#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; }