removed passpod
This commit is contained in:
@@ -67,8 +67,6 @@ enum EMisc
|
||||
//LIMIT_GOLD
|
||||
GOLD_MAX = 2000000000,
|
||||
|
||||
MAX_PASSPOD = 8 ,
|
||||
|
||||
|
||||
//END_LIMIT_GOLD
|
||||
|
||||
|
||||
@@ -271,36 +271,8 @@ enum
|
||||
HEADER_DG_MAP_LOCATIONS = 0xfe,
|
||||
HEADER_DG_P2P = 0xff,
|
||||
|
||||
HEADER_GP_CONFIRM_PASSPOD = 1,
|
||||
HEADER_PG_CONFIRM_PASSPOD = 2,
|
||||
|
||||
};
|
||||
|
||||
enum E_PASSPOD
|
||||
{
|
||||
E_PASSPOD_SUCCESS = 0,
|
||||
E_PASSPOD_FAILED_PASSPOD_ERROR,
|
||||
E_PASSPOD_FAILED_USER_NOT_FOUND,
|
||||
E_PASSPOD_FAILED_SYSTEM_NOT_FOUND,
|
||||
E_PASSPOD_FAILED_TOKEN_DISABLED,
|
||||
E_PASSPOD_FAILED_EMPTY,
|
||||
};
|
||||
|
||||
|
||||
typedef struct SRequestConfirmPasspod
|
||||
{
|
||||
int32_t pid;
|
||||
char passpod[MAX_PASSPOD + 1];
|
||||
char login[LOGIN_MAX_LEN + 1];
|
||||
|
||||
} RequestConfirmPasspod;
|
||||
|
||||
typedef struct SResultConfirmPasspod
|
||||
{
|
||||
int32_t pid;
|
||||
int32_t ret_code;
|
||||
char login[LOGIN_MAX_LEN + 1];
|
||||
} ResultConfirmPasspod;
|
||||
/* ----------------------------------------------
|
||||
* table
|
||||
* ----------------------------------------------
|
||||
|
||||
@@ -32,7 +32,6 @@ int save_event_second_cycle = passes_per_sec * 120; // 3분
|
||||
int ping_event_second_cycle = passes_per_sec * 60;
|
||||
bool g_bNoMoreClient = false;
|
||||
bool g_bNoRegen = false;
|
||||
bool g_bNoPasspod = false;
|
||||
|
||||
// TRAFFIC_PROFILER
|
||||
bool g_bTrafficProfileOn = false;
|
||||
|
||||
@@ -17,9 +17,6 @@ extern WORD p2p_port;
|
||||
extern char db_addr[ADDRESS_MAX_LEN + 1];
|
||||
extern WORD db_port;
|
||||
|
||||
extern char passpod_addr[ADDRESS_MAX_LEN + 1];
|
||||
extern WORD passpod_port;
|
||||
|
||||
extern int passes_per_sec;
|
||||
extern int save_event_second_cycle;
|
||||
extern int ping_event_second_cycle;
|
||||
|
||||
@@ -19,40 +19,8 @@
|
||||
#include "spam.h"
|
||||
#include "auth_brazil.h"
|
||||
|
||||
extern bool g_bNoPasspod;
|
||||
extern std::string g_stBlockDate;
|
||||
|
||||
//중국 passpod 전용 함수
|
||||
bool CheckPasspod(const char * account)
|
||||
{
|
||||
char szQuery[1024];
|
||||
|
||||
snprintf(szQuery, sizeof(szQuery), "SELECT ID FROM passpod WHERE Login='%s'", account);
|
||||
SQLMsg * pMsg = DBManager::instance().DirectQuery(szQuery);
|
||||
|
||||
if (!pMsg)
|
||||
{
|
||||
//fprintf(stderr, "cannot get the MATRIX\n");
|
||||
sys_log(0, "cannot get the PASSPOD");
|
||||
delete pMsg;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pMsg->Get()->uiNumRows == 0)
|
||||
{
|
||||
puts(szQuery);
|
||||
sys_log(0, "[PASSPOD]DirectQuery failed(%s)", szQuery);
|
||||
|
||||
delete pMsg;
|
||||
return false;
|
||||
}
|
||||
|
||||
delete pMsg;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
DBManager::DBManager() : m_bIsConnect(false)
|
||||
{
|
||||
}
|
||||
@@ -285,32 +253,8 @@ void DBManager::LoginPrepare(LPDESC d, uint32_t * pdwClientKey, int * paiPremium
|
||||
MATRIX_CARD_COL(cols, 3) + 1,
|
||||
d->GetMatrixCode());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (LC_IsNewCIBN())
|
||||
{
|
||||
if (!g_bNoPasspod)
|
||||
{
|
||||
if (CheckPasspod(r.login))
|
||||
{
|
||||
BYTE id = HEADER_GC_REQUEST_PASSPOD;
|
||||
d->Packet(&id, sizeof(BYTE));
|
||||
sys_log(0, "%s request passpod", r.login);
|
||||
}
|
||||
else
|
||||
{
|
||||
SendAuthLogin(d);
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SendAuthLogin(d);
|
||||
}
|
||||
}
|
||||
else
|
||||
SendAuthLogin(d);
|
||||
}
|
||||
SendAuthLogin(d);
|
||||
}
|
||||
|
||||
void DBManager::AnalyzeReturnQuery(SQLMsg * pMsg)
|
||||
|
||||
@@ -17,7 +17,6 @@ extern LPFDWATCH main_fdw;
|
||||
LPCLIENT_DESC db_clientdesc = NULL;
|
||||
LPCLIENT_DESC g_pkAuthMasterDesc = NULL;
|
||||
LPCLIENT_DESC g_NetmarbleDBDesc = NULL;
|
||||
LPCLIENT_DESC g_PasspodDesc = NULL;
|
||||
|
||||
static const char* GetKnownClientDescName(LPCLIENT_DESC desc) {
|
||||
if (desc == db_clientdesc) {
|
||||
@@ -26,8 +25,6 @@ static const char* GetKnownClientDescName(LPCLIENT_DESC desc) {
|
||||
return "g_pkAuthMasterDesc";
|
||||
} else if (desc == g_NetmarbleDBDesc) {
|
||||
return "g_NetmarbleDBDesc";
|
||||
} else if (desc == g_PasspodDesc) {
|
||||
return "g_PasspodDesc";
|
||||
}
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
@@ -46,6 +46,5 @@ class CLIENT_DESC : public DESC
|
||||
extern LPCLIENT_DESC db_clientdesc;
|
||||
extern LPCLIENT_DESC g_pkAuthMasterDesc;
|
||||
extern LPCLIENT_DESC g_NetmarbleDBDesc;
|
||||
extern LPCLIENT_DESC g_PasspodDesc;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
#endif
|
||||
|
||||
extern time_t get_global_time();
|
||||
extern bool g_bNoPasspod;
|
||||
|
||||
bool IsEmptyAdminPage()
|
||||
{
|
||||
@@ -271,13 +270,6 @@ int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
|
||||
else
|
||||
stResult = "YES";
|
||||
}
|
||||
else if (!stBuf.compare("IS_PASSPOD_UP"))
|
||||
{
|
||||
if (g_bNoPasspod)
|
||||
stResult = "NO";
|
||||
else
|
||||
stResult = "YES";
|
||||
}
|
||||
//else if (!stBuf.compare("SHOWMETHEMONEY"))
|
||||
else if (stBuf == g_stAdminPagePassword)
|
||||
{
|
||||
@@ -381,16 +373,6 @@ int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
|
||||
LogManager::instance().CharLog(0, 0, 0, 1, "NOTICE", msg.c_str(), d->GetHostName());
|
||||
BroadcastNotice(msg.c_str());
|
||||
}
|
||||
else if (!stBuf.compare("CLOSE_PASSPOD"))
|
||||
{
|
||||
g_bNoPasspod = true;
|
||||
stResult += "CLOSE_PASSPOD";
|
||||
}
|
||||
else if (!stBuf.compare("OPEN_PASSPOD"))
|
||||
{
|
||||
g_bNoPasspod = false;
|
||||
stResult += "OPEN_PASSPOD";
|
||||
}
|
||||
else if (!stBuf.compare("SHUTDOWN"))
|
||||
{
|
||||
LogManager::instance().CharLog(0, 0, 0, 2, "SHUTDOWN", "", d->GetHostName());
|
||||
|
||||
@@ -362,7 +362,6 @@ class CInputAuth : public CInputProcessor
|
||||
|
||||
public:
|
||||
void Login(LPDESC d, const char * c_pData);
|
||||
void PasspodAnswer(LPDESC d, const char * c_pData );
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "desc_manager.h"
|
||||
#include "protocol.h"
|
||||
#include "matrix_card.h"
|
||||
#include "passpod.h"
|
||||
#include "locale_service.h"
|
||||
#include "auth_brazil.h"
|
||||
#include "db.h"
|
||||
@@ -263,10 +262,6 @@ int CInputAuth::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
|
||||
Login(d, c_pData);
|
||||
break;
|
||||
|
||||
case HEADER_CG_PASSPOD_ANSWER:
|
||||
PasspodAnswer(d, c_pData);
|
||||
break;
|
||||
|
||||
case HEADER_CG_HANDSHAKE:
|
||||
break;
|
||||
|
||||
@@ -277,54 +272,3 @@ int CInputAuth::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
|
||||
|
||||
return iExtraLen;
|
||||
}
|
||||
|
||||
void CInputAuth::PasspodAnswer(LPDESC d, const char * c_pData)
|
||||
{
|
||||
|
||||
if (!g_bAuthServer)
|
||||
{
|
||||
sys_err ("CInputAuth class is not for game server. IP %s might be a hacker.",
|
||||
inet_ntoa(d->GetAddr().sin_addr));
|
||||
d->DelayedDisconnect(5);
|
||||
return;
|
||||
}
|
||||
|
||||
TPacketCGPasspod * packet = (TPacketCGPasspod*)c_pData;
|
||||
|
||||
RequestConfirmPasspod Confirm;
|
||||
|
||||
memcpy(Confirm.passpod, packet->szAnswer, MAX_PASSPOD + 1);
|
||||
memcpy(Confirm.login, d->GetAccountTable().login, LOGIN_MAX_LEN + 1);
|
||||
|
||||
|
||||
if (!d->GetAccountTable().id)
|
||||
{
|
||||
sys_err("HEADER_CG_PASSPOD_ANSWER received to desc with no account table binded");
|
||||
return;
|
||||
}
|
||||
|
||||
int ret_code = 1;
|
||||
sys_log(0, "Passpod start %s %s", d->GetAccountTable().login, packet->szAnswer);
|
||||
ret_code = CPasspod::instance().ConfirmPasspod(d->GetAccountTable().login, packet->szAnswer);
|
||||
|
||||
if (ret_code != 0)
|
||||
{
|
||||
sys_log(0, "PASSPOD: wrong answer: %s ret_code %d", d->GetAccountTable().login, ret_code);
|
||||
|
||||
LoginFailure(d, ERR_MESSAGE[ret_code]);
|
||||
|
||||
if (!d->CheckMatrixTryCount())
|
||||
{
|
||||
LoginFailure(d, "QUIT");
|
||||
d->SetPhase(PHASE_CLOSE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sys_log(0, "PASSPOD: success: %s", d->GetAccountTable().login);
|
||||
DBManager::instance().SendAuthLogin(d);
|
||||
}
|
||||
// g_PasspodDesc->DBPacket(HEADER_GP_CONFIRM_PASSPOD, 0, &Confirm, sizeof(Confirm));
|
||||
|
||||
// sys_log(0, "PASSPOD %s %d", Confirm.login, Confirm.passpod);
|
||||
}
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
#include "polymorph.h"
|
||||
#include "blend_item.h"
|
||||
#include "castle.h"
|
||||
#include "passpod.h"
|
||||
#include "ani.h"
|
||||
#include "BattleArena.h"
|
||||
#include "over9refine.h"
|
||||
@@ -484,7 +483,6 @@ int main(int argc, char **argv)
|
||||
CTableBySkill SkillPowerByLevel;
|
||||
CPolymorphUtils polymorph_utils;
|
||||
CProfiler profiler;
|
||||
CPasspod passpod;
|
||||
CBattleArena ba;
|
||||
COver9RefineManager o9r;
|
||||
SpamManager spam_mgr;
|
||||
|
||||
@@ -94,9 +94,6 @@ enum
|
||||
// HEADER_CG_ROULETTE = 200,
|
||||
// HEADER_CG_RUNUP_MATRIX_ANSWER = 201,
|
||||
|
||||
//
|
||||
HEADER_CG_PASSPOD_ANSWER = 202,
|
||||
|
||||
//NOTE : 이런 개XXX 정말 이거 Packet설계한 사람은 누구냐. 이렇게 코딩하고 밥이 넘어가나.
|
||||
//enum을 별도로 구별을 하던가. 아님 namepsace로 구별을 하던가..
|
||||
//정말 packet generator까지는 바라지도 않는다. 이런 씨XX
|
||||
@@ -277,9 +274,6 @@ enum
|
||||
// ROULETTE
|
||||
HEADER_GC_ROULETTE = 200,
|
||||
// END_ROULETTE
|
||||
//
|
||||
HEADER_GC_REQUEST_PASSPOD = 202,
|
||||
HEADER_GC_REQUEST_PASSPOD_FAILED = 203,
|
||||
|
||||
HEADER_GC_SPECIFIC_EFFECT = 208,
|
||||
|
||||
@@ -843,7 +837,6 @@ enum EPhase
|
||||
PHASE_DBCLIENT,
|
||||
PHASE_P2P,
|
||||
PHASE_AUTH,
|
||||
PHASE_PASSPOD,
|
||||
};
|
||||
|
||||
typedef struct packet_phase
|
||||
@@ -2127,18 +2120,6 @@ typedef struct command_runup_matrix_answer
|
||||
char szAnswer[RUNUP_MATRIX_ANSWER_MAX_LEN + 1];
|
||||
} TPacketCGRunupMatrixAnswer;
|
||||
|
||||
typedef struct packet_passpod
|
||||
{
|
||||
uint8_t bHeader;
|
||||
char szAnswer[8+1];
|
||||
} TPacketCGPasspod;
|
||||
|
||||
typedef struct packet_passpod_failed
|
||||
{
|
||||
uint8_t bHeader;
|
||||
char szMessage[128];
|
||||
} TPacketCGPasspodFailed;
|
||||
|
||||
typedef struct tag_GGSiege
|
||||
{
|
||||
uint8_t bHeader;
|
||||
|
||||
@@ -219,7 +219,6 @@ CPacketInfoCG::CPacketInfoCG()
|
||||
Set(HEADER_CG_MALL_CHECKOUT, sizeof(TPacketCGSafeboxCheckout), "MallCheckout", true);
|
||||
|
||||
Set(HEADER_CG_SCRIPT_SELECT_ITEM, sizeof(TPacketCGScriptSelectItem), "ScriptSelectItem", true);
|
||||
Set(HEADER_CG_PASSPOD_ANSWER, sizeof(TPacketCGPasspod), "PasspodAnswer", true);
|
||||
|
||||
Set(HEADER_CG_DRAGON_SOUL_REFINE, sizeof(TPacketCGDragonSoulRefine), "DragonSoulRefine", false);
|
||||
Set(HEADER_CG_STATE_CHECKER, sizeof(BYTE), "ServerStateCheck", false);
|
||||
|
||||
@@ -1,196 +0,0 @@
|
||||
#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" );
|
||||
strlcat( szResult, szTmp, sizeof(szResult) );
|
||||
strlcat( szResult, "Content-type: application/x-www-form-urlencoded\r\n", sizeof(szResult) );
|
||||
snprintf( szTmp, sizeof(szTmp), "Content-length: %d\r\n", strlen(szRequest));
|
||||
strlcat( szResult, szTmp, sizeof(szResult) );
|
||||
strlcat( szResult, "Connection: Close\r\n\r\n", sizeof(szResult) );
|
||||
strlcat( 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;
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
#ifndef PASSPOD_H
|
||||
#define PASSPOD_H
|
||||
|
||||
class CPasspod : public singleton<CPasspod>
|
||||
{
|
||||
public:
|
||||
CPasspod();
|
||||
~CPasspod();
|
||||
|
||||
int ConfirmPasspod( const char * account,const char* passpod );
|
||||
bool Connect( LPFDWATCH fdw );
|
||||
bool Disconnect();
|
||||
|
||||
|
||||
private:
|
||||
bool IConv( const char * src, char * desc );
|
||||
|
||||
|
||||
private:
|
||||
|
||||
socket_t m_sock;
|
||||
LPFDWATCH m_lpFDW;
|
||||
};
|
||||
|
||||
extern const char ERR_STRINGS[6][32];
|
||||
extern const char ERR_MESSAGE[6][64];
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user