server/game/src/passpod.cpp

197 lines
4.0 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "stdafx.h"
#include "constants.h"
#include "passpod.h"
extern BOOL g_test_server;
extern int test_server;
const char ERR_STRINGS[6][32] =
{
"AUTH_SUCCESS" ,
"AUTH_FAILURE:PASSPOD_ERROR" ,
"AUTH_FAILURE:USER_NOT_FOUND" ,
"AUTH_FAILURE:SYSTEM_NOT_FOUND" ,
"AUTH_FAILURE:TOKEN_DISABLED" ,
"AUTH_FAILURE:EMPTY",
};
const char ERR_MESSAGE[6][64] =
{
"SUCCESS",
"PASERR1",
"PASERR2",
"PASERR3",
"PASERR4",
"PASERR5"
};
CPasspod::CPasspod()
: m_sock(INVALID_SOCKET), m_lpFDW(NULL)
{
}
CPasspod::~CPasspod()
{
}
int CPasspod::ConfirmPasspod( const char * account, const char * passpod )
{
const char * servername = "1001";
const char * algname = "plaintext";
const char * posspod_server = "/passpod-server";
const char * auth = "/auth.s";
char szRequest[1024];
char szResult[1024];
char szTmp[128];
int ret_code = 1; // 0 ÀÌ ¼º°ø
snprintf( szRequest, sizeof(szRequest), "username=%s&systemname=%s&passpod=%s&algname=%s", account, servername, passpod, algname );
snprintf( szResult, sizeof(szResult), "POST %s%s HTTP/1.0\r\n", posspod_server, auth );
snprintf( szTmp, sizeof(szTmp), "Host: %s\r\n", "218.99.6.103" );
strncat( szResult, szTmp, sizeof(szResult) );
strncat( szResult, "Content-type: application/x-www-form-urlencoded\r\n", sizeof(szResult) );
snprintf( szTmp, sizeof(szTmp), "Content-length: %d\r\n", strlen(szRequest));
strncat( szResult, szTmp, sizeof(szResult) );
strncat( szResult, "Connection: Close\r\n\r\n", sizeof(szResult) );
strncat( szResult, szRequest, sizeof(szResult) );
if ( !Connect( NULL ) )
{
sys_log( 0, "PASSPOD : Can not connect to passpod server" );
Disconnect();
return ret_code;
}
int ret = socket_write( m_sock, (const char *)szResult, strlen(szResult));
sys_log( 0, "PASSPOD : Write End %s %s", account, passpod );
if ( test_server )
{
sys_log( 0, "PASSPOD : %s", szResult );
}
char Read[1024];
int nCount = 5;
while (--nCount)
{
ret = recv(m_sock, Read, 1024, 0);
if ( ret > 0 )
{
if ( test_server )
{
sys_log( 0, "PASSPOD : %d", ret );
}
break;
}
else
{
if ( test_server )
{
sys_log( 0, "PASSPOD : %d", ret );
}
Disconnect();
return ret_code;
}
}
sys_log( 0, "PASSPOD : Read End %s %s \n %s\n", account, passpod, Read );
char * pos = Read;
nCount = 15;
while ( --nCount )
{
int n = 0;
//¶óÀγѱâ±â
for (; pos[n]!='\n'; ++n ) {}
//\n¿¡¼­ ¸ØÃß±â Çϳª´õ ³²°ÜÁÖÀÚ
pos = pos+n+1;
//Return Value ¸¦ ºñ±³
if ( 0 == strncmp( pos, "AUTH_SUCCESS", strlen(ERR_STRINGS[0]) ) )
{
ret_code = E_PASSPOD_SUCCESS;
break;
}
if ( 0 == strncmp( pos, "AUTH_FAILURE:PASSPOD_ERROR", strlen(ERR_STRINGS[1]) ) )
{
ret_code = E_PASSPOD_FAILED_PASSPOD_ERROR;
break;
}
if ( 0 == strncmp( pos, "AUTH_FAILURE:USER_NOT_FOUND", strlen(ERR_STRINGS[2] ) ) )
{
ret_code = E_PASSPOD_FAILED_USER_NOT_FOUND;
break;
}
if ( 0 == strncmp( pos, "AUTH_FAILURE:SYSTEM_NOT_FOUND", strlen(ERR_STRINGS[3] ) ) )
{
ret_code = E_PASSPOD_FAILED_SYSTEM_NOT_FOUND;
break;
}
if ( 0 == strncmp( pos, "AUTH_FAILURE:TOKEN_DISABLED", strlen(ERR_STRINGS[4] ) ) )
{
ret_code = E_PASSPOD_FAILED_TOKEN_DISABLED;
break;
}
if ( 0 == strncmp( pos, "AUTH_FAILURE:EMPTY", strlen(ERR_STRINGS[5] ) ) )
{
ret_code = E_PASSPOD_FAILED_EMPTY;
break;
}
}
sys_log(0, "PASSPOD Ret Value = %s ", ERR_STRINGS[ret_code] );
this->Disconnect();
return ret_code;
}
bool CPasspod::Connect( LPFDWATCH fdw )
{
// m_lpFDW = fdw;
if ( m_sock != INVALID_SOCKET )
{
sys_err( "Sock != INVALID_SOCKET " );
return false;
}
m_sock = socket_connect( "218.99.6.103", 8080 );
if ( m_sock == INVALID_SOCKET )
{
sys_err( "Sock == INVALID_SOCKET " );
return false;
}
//fdwatch_add_fd( m_lpFDW, m_sock, this, FDW_READ, false );
//fdwatch_add_fd( m_lpFDW, m_sock, this, FDW_WRITE, false );
return true;
}
bool CPasspod::Disconnect()
{
//fdwatch_del_fd( m_lpFDW, m_sock );
socket_close(m_sock);
m_sock = INVALID_SOCKET;
return true;
}
bool CPasspod::IConv( const char * src, char * desc )
{
return true;
}