Пример #1
0
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;
}
Пример #2
0
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
}
Пример #3
0
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 );
}
Пример #4
0
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 );
}
Пример #5
0
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
}