Archive arFrString(String name) { static Table tbl = 0; Archive ar; FileName fn; arDEBUG(dbOut, "Looking for archive \"%s\"\n", name); if (tbl == 0) tbl = tblNew((TblHashFun) strAHash, (TblEqFun) strAEqual); if ((ar = (Archive) tblElt(tbl, (TblKey) name, (TblElt) 0)) != 0) return ar; if ((fn = fileRdFind(libSearchPath(), name, FTYPE_AR_INT)) != 0) ar = arRead(fn); else if (fileIsOpenable((fn = arFileNameFrPath(name)), "r")) { ar = arRead(fn); } else { comsgWarning(NULL, ALDOR_W_CantUseArchive, name); ar = 0; } tblSetElt(tbl, (TblKey) name, (TblElt) ar); return ar; }
void CDPLoginSrvr::OnRemovePlayer( CAr & ar, DPID dpid, LPBYTE lpBuf, u_long uBufSize ) { #ifdef __REMOVE_PLAYER_0221 #ifdef __SECURITY_FIXES CAr arRead(lpBuf,uBufSize); char szAccount[MAX_ACCOUNT] = {0,}; char szPassword[MAX_PASSWORD] = {0,}; char szNo[MAX_PASSWORD] = {0,}; arRead.ReadString( szAccount,MAX_ACCOUNT ); arRead.ReadString( szPassword,MAX_PASSWORD ); arRead.ReadString( szNo, MAX_PASSWORD ); if(!prj.IsAllowedLetter(szAccount,FALSE) || !prj.IsAllowedLetter(szPassword,FALSE) || !prj.IsAllowedLetter(szNo,FALSE)) { return; } #endif // __SECURITY_FIXES CAr ar1; ar1 << PACKETTYPE_DEL_PLAYER; ar1.Write( lpBuf, uBufSize ); ar1 << dpid; int nBlockSize; LPBYTE pBlock = ar1.GetBuffer( &nBlockSize ); g_dpAccountClient.Send( pBlock, nBlockSize, DPID_SERVERPLAYER ); #else // __REMOVE_PLAYER_0221 LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus = g_DbManager.AllocRequest(); g_DbManager.MakeRequest( lpDbOverlappedPlus, lpBuf, uBufSize ); lpDbOverlappedPlus->dpid = dpid; lpDbOverlappedPlus->nQueryMode = REMOVEPLAYER; PostQueuedCompletionStatus( g_DbManager.m_hIOCPGet, 1, NULL, &lpDbOverlappedPlus->Overlapped ); #endif // __REMOVE_PLAYER_0221 }
void CDPLoginSrvr::OnGetPlayerList( CAr & ar, DPID dpid, LPBYTE lpBuf, u_long uBufSize ) { #ifdef __SECURITY_FIXES CAr arRead(lpBuf,uBufSize); DWORD dwAuthKey; arRead >> dwAuthKey; u_long uIdofMulti; arRead >> uIdofMulti; char szAccount[MAX_ACCOUNT] = {0,}; char szPassword[MAX_PASSWORD] = {0,}; arRead.ReadString( szAccount, MAX_ACCOUNT ); arRead.ReadString( szPassword, MAX_PASSWORD ); if(!prj.IsAllowedLetter(szAccount,FALSE) || !prj.IsAllowedLetter(szPassword,FALSE)) { return; } #endif // __SECURITY_FIXES CAr ar1; ar1 << PACKETTYPE_GETPLAYERLIST; ar1.Write( lpBuf, uBufSize ); ar1 << dpid; int nBlockSize; LPBYTE pBlock = ar1.GetBuffer( &nBlockSize ); g_dpAccountClient.Send( pBlock, nBlockSize, DPID_SERVERPLAYER ); }
void CDPLoginSrvr::OnCreatePlayer( CAr & ar, DPID dpid, LPBYTE lpBuf, u_long uBufSize ) { #ifdef __SECURITY_FIXES CAr arRead(lpBuf,uBufSize); char szAccount[MAX_ACCOUNT] = {0,}; char szPassword[MAX_PASSWORD] = {0,}; arRead.ReadString(szAccount,MAX_ACCOUNT); arRead.ReadString(szPassword,MAX_PASSWORD); if(!prj.IsAllowedLetter(szAccount,FALSE) || !prj.IsAllowedLetter(szPassword,FALSE)) { return; } #endif // __SECURITY_FIXES LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus = g_DbManager.AllocRequest(); g_DbManager.MakeRequest( lpDbOverlappedPlus, lpBuf, uBufSize ); lpDbOverlappedPlus->dpid = dpid; lpDbOverlappedPlus->nQueryMode = CREATEPLAYER; PostQueuedCompletionStatus( g_DbManager.m_hIOCPGet, 1, NULL, &lpDbOverlappedPlus->Overlapped ); }
void CDPLoginSrvr::OnLeave( CAr & ar, DPID dpid, LPBYTE lpBuf, u_long uBufSize ) { #ifdef __SECURITY_FIXES CAr arRead(lpBuf,uBufSize); char szAccount[MAX_ACCOUNT] = {0,}; arRead.ReadString( szAccount, MAX_ACCOUNT ); if(!prj.IsAllowedLetter(szAccount,FALSE)) { return; } #endif // __SECURITY_FIXES char lpszAccount[MAX_ACCOUNT] = { 0, }; ar.ReadString( lpszAccount, MAX_ACCOUNT ); #ifdef __SECURITY_FIXES if(!prj.IsAllowedLetter(lpszAccount,FALSE)) { return; } #endif // __SECURITY_FIXES g_dpAccountClient.SendRemoveAccount( lpszAccount ); u_long idPlayer; ar >> idPlayer; if( idPlayer == 0 ) return; LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus = g_DbManager.AllocRequest(); g_DbManager.MakeRequest( lpDbOverlappedPlus, lpBuf, uBufSize ); lpDbOverlappedPlus->dpid = dpid; lpDbOverlappedPlus->nQueryMode = SAVE_PLAY_TIME; PostQueuedCompletionStatus( g_DbManager.m_hIOCPPut, 1, NULL, &lpDbOverlappedPlus->Overlapped ); #ifdef __INTERNALSERVER time_t cur = time(NULL); WriteLog( "CDPLoginSrvr::OnLeave(%s) - %s\n", lpszAccount, ctime( &cur )); #endif }