Several RCON bug fixes and improvements

* Fixed uncontrolled format specifier in 'NetMsg' call on the RCON client.
* Removed extraneous call to 'PrintPercentageEscape'.
* Compare, and disable RCON logs if user attempts to connect to listen server's RCON.
This commit is contained in:
Kawe Mazidjatari 2023-04-16 12:05:39 +02:00
parent 5f4b436ec6
commit bd1bec3cfe
3 changed files with 23 additions and 28 deletions

View File

@ -252,25 +252,33 @@ void CRConClient::ProcessMessage(const sv_rcon::response& sv_response) const
{
if (!sv_response.responseval().empty())
{
bool bLocalHost = (g_pNetAdr->ComparePort(m_Address) && g_pNetAdr->CompareAdr(m_Address));
const long i = strtol(sv_response.responseval().c_str(), NULL, NULL);
if (!i) // sv_rcon_sendlogs is not set.
{
if (cl_rcon_request_sendlogs->GetBool())
if (!bLocalHost && cl_rcon_request_sendlogs->GetBool())
{
string svLogQuery = this->Serialize("", "", cl_rcon::request_t::SERVERDATA_REQUEST_SEND_CONSOLE_LOG);
string svLogQuery = this->Serialize("", "1", cl_rcon::request_t::SERVERDATA_REQUEST_SEND_CONSOLE_LOG);
this->Send(svLogQuery);
}
}
else if (bLocalHost)
{
// Don't send logs to local host, it already gets logged to the same console.
string svLogQuery = this->Serialize("", "0", cl_rcon::request_t::SERVERDATA_REQUEST_SEND_CONSOLE_LOG);
this->Send(svLogQuery);
}
}
DevMsg(eDLL_T::NETCON, "%s", PrintPercentageEscape(sv_response.responsemsg()).c_str());
DevMsg(eDLL_T::NETCON, "%s", sv_response.responsemsg().c_str());
break;
}
case sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG:
{
NetMsg(static_cast<LogType_t>(sv_response.messagetype()),
static_cast<eDLL_T>(sv_response.messageid()), sv_response.responseval().c_str(),
PrintPercentageEscape(sv_response.responsemsg()).c_str());
static_cast<eDLL_T>(sv_response.messageid()),
sv_response.responseval().c_str(), "%s", sv_response.responsemsg().c_str());
break;
}
default:
@ -293,24 +301,9 @@ string CRConClient::Serialize(const string& svReqBuf, const string& svReqVal, co
cl_request.set_messageid(-1);
cl_request.set_requesttype(request_t);
switch (request_t)
{
case cl_rcon::request_t::SERVERDATA_REQUEST_SETVALUE:
case cl_rcon::request_t::SERVERDATA_REQUEST_AUTH:
{
cl_request.set_requestmsg(svReqBuf);
cl_request.set_requestval(svReqVal);
break;
}
case cl_rcon::request_t::SERVERDATA_REQUEST_EXECCOMMAND:
{
cl_request.set_requestmsg(svReqBuf);
break;
}
default:
break;
}
return cl_request.SerializeAsString();
}

View File

@ -160,7 +160,8 @@ void CRConServer::Send(const std::string& svMessage) const
if (pData->m_bAuthorized)
{
::send(pData->m_hSocket, ssSendBuf.str().data(), static_cast<int>(ssSendBuf.str().size()), MSG_NOSIGNAL);
::send(pData->m_hSocket, ssSendBuf.str().data(),
static_cast<int>(ssSendBuf.str().size()), MSG_NOSIGNAL);
}
}
}
@ -488,7 +489,7 @@ void CRConServer::ProcessMessage(const cl_rcon::request& cl_request)
{
if (pData->m_bAuthorized)
{
sv_rcon_sendlogs->SetValue(true);
sv_rcon_sendlogs->SetValue(cl_request.requestval().c_str());
}
break;
}

View File

@ -416,19 +416,20 @@ void CNetCon::ProcessMessage(const sv_rcon::response& sv_response) const
const long i = strtol(sv_response.responseval().c_str(), NULL, NULL);
if (!i) // sv_rcon_sendlogs is not set.
{
string svLogQuery = this->Serialize("", "", cl_rcon::request_t::SERVERDATA_REQUEST_SEND_CONSOLE_LOG);
string svLogQuery = this->Serialize("", "1",
cl_rcon::request_t::SERVERDATA_REQUEST_SEND_CONSOLE_LOG);
this->Send(svLogQuery);
}
}
DevMsg(eDLL_T::NETCON, "%s", PrintPercentageEscape(sv_response.responsemsg()).c_str());
DevMsg(eDLL_T::NETCON, "%s", sv_response.responsemsg().c_str());
break;
}
case sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG:
{
NetMsg(static_cast<LogType_t>(sv_response.messagetype()),
static_cast<eDLL_T>(sv_response.messageid()), sv_response.responseval().c_str(),
PrintPercentageEscape(sv_response.responsemsg()).c_str());
static_cast<eDLL_T>(sv_response.messageid()),
sv_response.responseval().c_str(), "%s", sv_response.responsemsg().c_str());
break;
}
default: