mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Properly tokenize netconsole input
Use the command tokenizer class.
This commit is contained in:
parent
568f88040e
commit
e7420a26af
@ -26,6 +26,7 @@ CNetCon::CNetCon(void)
|
|||||||
, m_bPromptConnect(true)
|
, m_bPromptConnect(true)
|
||||||
, m_flTickInterval(0.05f)
|
, m_flTickInterval(0.05f)
|
||||||
{
|
{
|
||||||
|
CharacterSetBuild(&m_CharacterSet, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -122,31 +123,33 @@ void CNetCon::UserInput(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::lock_guard<std::mutex> l(m_Mutex);
|
std::lock_guard<std::mutex> l(m_Mutex);
|
||||||
|
|
||||||
if (IsConnected())
|
if (IsConnected())
|
||||||
{
|
{
|
||||||
if (m_Input.compare("disconnect") == 0)
|
CCommand cmd;
|
||||||
|
cmd.Tokenize(m_Input.c_str());
|
||||||
|
|
||||||
|
if (V_strcmp(cmd.Arg(0), "disconnect") == 0)
|
||||||
{
|
{
|
||||||
Disconnect("user closed connection");
|
Disconnect("user closed connection");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// !TODO[ AMOS ]: Swap out with CCommand!
|
|
||||||
const vector<string> vSubStrings = StringSplit(m_Input, ' ', 2);
|
|
||||||
vector<char> vecMsg;
|
vector<char> vecMsg;
|
||||||
|
|
||||||
const SocketHandle_t hSocket = GetSocket();
|
const SocketHandle_t hSocket = GetSocket();
|
||||||
bool bSend = false;
|
bool bSend = false;
|
||||||
|
|
||||||
if (vSubStrings.size() > 1)
|
if (cmd.ArgC() > 1)
|
||||||
{
|
{
|
||||||
if (vSubStrings[0].compare("PASS") == 0) // Auth with RCON server.
|
if (V_strcmp(cmd.Arg(0), "PASS") == 0) // Auth with RCON server.
|
||||||
{
|
{
|
||||||
bSend = Serialize(vecMsg, vSubStrings[1].c_str(), "",
|
bSend = Serialize(vecMsg, cmd.Arg(1), "",
|
||||||
cl_rcon::request_t::SERVERDATA_REQUEST_AUTH);
|
cl_rcon::request_t::SERVERDATA_REQUEST_AUTH);
|
||||||
}
|
}
|
||||||
else // Execute command query.
|
else // Execute command query.
|
||||||
{
|
{
|
||||||
bSend = Serialize(vecMsg, m_Input.c_str(), "",
|
bSend = Serialize(vecMsg, cmd.Arg(0), cmd.GetCommandString(),
|
||||||
cl_rcon::request_t::SERVERDATA_REQUEST_EXECCOMMAND);
|
cl_rcon::request_t::SERVERDATA_REQUEST_EXECCOMMAND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -165,34 +168,30 @@ void CNetCon::UserInput(void)
|
|||||||
}
|
}
|
||||||
else // Setup connection from input.
|
else // Setup connection from input.
|
||||||
{
|
{
|
||||||
const vector<string> vSubStrings = StringSplit(m_Input, ' ', 2);
|
CCommand cmd;
|
||||||
if (vSubStrings.size() > 1)
|
cmd.Tokenize(m_Input.c_str(), cmd_source_t::kCommandSrcCode, &m_CharacterSet);
|
||||||
|
|
||||||
|
if (cmd.ArgC() > 1)
|
||||||
{
|
{
|
||||||
const string::size_type nPos = m_Input.find(' ');
|
const char* inAddr = cmd.Arg(0);
|
||||||
if (nPos > 0
|
const char* inPort = cmd.Arg(1);
|
||||||
&& nPos < m_Input.size()
|
|
||||||
&& nPos != m_Input.size())
|
if (!*inAddr || !*inPort)
|
||||||
{
|
{
|
||||||
string svInPort = m_Input.substr(nPos + 1);
|
Warning(eDLL_T::CLIENT, "No IP address or port provided\n");
|
||||||
string svInAdr = m_Input.erase(m_Input.find(' '));
|
m_bPromptConnect = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (svInPort.empty() || svInAdr.empty())
|
if (!Connect(inAddr, atoi(inPort)))
|
||||||
{
|
{
|
||||||
Warning(eDLL_T::CLIENT, "No IP address or port provided\n");
|
m_bPromptConnect = true;
|
||||||
m_bPromptConnect = true;
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Connect(svInAdr.c_str(), atoi(svInPort.c_str())))
|
|
||||||
{
|
|
||||||
m_bPromptConnect = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // Initialize as [ip]:port.
|
else
|
||||||
{
|
{
|
||||||
if (m_Input.empty() || !Connect(m_Input.c_str()))
|
if (!Connect(cmd.GetCommandString()))
|
||||||
{
|
{
|
||||||
m_bPromptConnect = true;
|
m_bPromptConnect = true;
|
||||||
return;
|
return;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
//
|
//
|
||||||
//===========================================================================//
|
//===========================================================================//
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include "tier1/cmd.h"
|
||||||
#include "protoc/cl_rcon.pb.h"
|
#include "protoc/cl_rcon.pb.h"
|
||||||
#include "protoc/sv_rcon.pb.h"
|
#include "protoc/sv_rcon.pb.h"
|
||||||
#include "engine/shared/base_rcon.h"
|
#include "engine/shared/base_rcon.h"
|
||||||
@ -42,6 +43,8 @@ private:
|
|||||||
bool m_bPromptConnect;
|
bool m_bPromptConnect;
|
||||||
float m_flTickInterval;
|
float m_flTickInterval;
|
||||||
|
|
||||||
|
characterset_t m_CharacterSet;
|
||||||
|
|
||||||
std::string m_Input;
|
std::string m_Input;
|
||||||
mutable std::mutex m_Mutex;
|
mutable std::mutex m_Mutex;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user