Check return value of GetPlayerNetInfo (bug 4315, r=fyren).

This commit is contained in:
David Anderson 2010-04-27 23:40:04 -07:00
parent 55205e631b
commit fc88cd3cb1
4 changed files with 64 additions and 8 deletions

View File

@ -1619,8 +1619,22 @@ void CPlayer::Kick(const char *str)
{
MarkAsBeingKicked();
INetChannel *pNetChan = static_cast<INetChannel *>(engine->GetPlayerNetInfo(m_iIndex));
IClient *pClient = static_cast<IClient *>(pNetChan->GetMsgHandler());
pClient->Disconnect("%s", str);
if (pNetChan == NULL)
{
/* What does this even mean? Hell if I know. */
int userid = GetUserId();
if (userid > 0)
{
char buffer[255];
UTIL_Format(buffer, sizeof(buffer), "kickid %d %s\n", userid, str);
engine->ServerCommand(buffer);
}
}
else
{
IClient *pClient = static_cast<IClient *>(pNetChan->GetMsgHandler());
pClient->Disconnect("%s", str);
}
}
void CPlayer::Authorize_Post()

View File

@ -200,8 +200,8 @@ static void ReplicateConVar(ConVar *pConVar)
if (pPlayer && pPlayer->IsInGame() && !pPlayer->IsFakeClient())
{
INetChannel *netchan = static_cast<INetChannel *>(engine->GetPlayerNetInfo(i));
netchan->SendData(buffer);
if (INetChannel *netchan = static_cast<INetChannel *>(engine->GetPlayerNetInfo(i)))
netchan->SendData(buffer);
}
}
}
@ -1319,6 +1319,11 @@ static cell_t SendConVarValue(IPluginContext *pContext, const cell_t *params)
}
INetChannel *netchan = static_cast<INetChannel *>(engine->GetPlayerNetInfo(params[1]));
if (netchan == NULL)
{
return 0;
}
netchan->SendData(buffer);
return 1;

View File

@ -720,6 +720,10 @@ static cell_t GetTimeConnected(IPluginContext *pContext, const cell_t *params)
}
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
if (pInfo == NULL)
{
return 0;
}
return sp_ftoc(pInfo->GetTimeConnected());
}
@ -739,6 +743,10 @@ static cell_t GetDataRate(IPluginContext *pContext, const cell_t *params)
}
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
if (pInfo == NULL)
{
return 0;
}
return pInfo->GetDataRate();
}
@ -758,6 +766,10 @@ static cell_t IsTimingOut(IPluginContext *pContext, const cell_t *params)
}
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
if (pInfo == NULL)
{
return 1;
}
return pInfo->IsTimingOut() ? 1 : 0;
}
@ -782,6 +794,10 @@ static cell_t GetLatency(IPluginContext *pContext, const cell_t *params)
}
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
if (pInfo == NULL)
{
return sp_ftoc(-1);
}
if (params[2] == MAX_FLOWS)
{
@ -815,6 +831,10 @@ static cell_t GetAvgLatency(IPluginContext *pContext, const cell_t *params)
}
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
if (pInfo == NULL)
{
return sp_ftoc(-1);
}
if (params[2] == MAX_FLOWS)
{
@ -848,6 +868,10 @@ static cell_t GetAvgLoss(IPluginContext *pContext, const cell_t *params)
}
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
if (pInfo == NULL)
{
return sp_ftoc(-1);
}
if (params[2] == MAX_FLOWS)
{
@ -881,6 +905,10 @@ static cell_t GetAvgChoke(IPluginContext *pContext, const cell_t *params)
}
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
if (pInfo == NULL)
{
return sp_ftoc(-1);
}
if (params[2] == MAX_FLOWS)
{
@ -914,6 +942,10 @@ static cell_t GetAvgData(IPluginContext *pContext, const cell_t *params)
}
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
if (pInfo == NULL)
{
return 0;
}
if (params[2] == MAX_FLOWS)
{
@ -948,6 +980,11 @@ static cell_t GetAvgPackets(IPluginContext *pContext, const cell_t *params)
INetChannelInfo *pInfo = engine->GetPlayerNetInfo(client);
if (pInfo == NULL)
{
return 0;
}
if (params[2] == MAX_FLOWS)
{
value = pInfo->GetAvgPackets(FLOW_INCOMING) + pInfo->GetAvgPackets(FLOW_OUTGOING);

View File

@ -601,7 +601,7 @@ native Float:GetClientTime(client);
*
* @param client Player's index.
* @param flow Traffic flowing direction.
* @return Latency.
* @return Latency, or -1 if network info is not available.
* @error Invalid client index, client not in game, or fake client.
*/
native Float:GetClientLatency(client, NetFlow:flow);
@ -611,7 +611,7 @@ native Float:GetClientLatency(client, NetFlow:flow);
*
* @param client Player's index.
* @param flow Traffic flowing direction.
* @return Average latency.
* @return Latency, or -1 if network info is not available.
* @error Invalid client index, client not in game, or fake client.
*/
native Float:GetClientAvgLatency(client, NetFlow:flow);
@ -621,7 +621,7 @@ native Float:GetClientAvgLatency(client, NetFlow:flow);
*
* @param client Player's index.
* @param flow Traffic flowing direction.
* @return Average packet loss.
* @return Average packet loss, or -1 if network info is not available.
* @error Invalid client index, client not in game, or fake client.
*/
native Float:GetClientAvgLoss(client, NetFlow:flow);
@ -631,7 +631,7 @@ native Float:GetClientAvgLoss(client, NetFlow:flow);
*
* @param client Player's index.
* @param flow Traffic flowing direction.
* @return Average packet choke.
* @return Average packet loss, or -1 if network info is not available.
* @error Invalid client index, client not in game, or fake client.
*/
native Float:GetClientAvgChoke(client, NetFlow:flow);