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()) 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); const long i = strtol(sv_response.responseval().c_str(), NULL, NULL);
if (!i) // sv_rcon_sendlogs is not set. 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); 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; break;
} }
case sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG: case sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG:
{ {
NetMsg(static_cast<LogType_t>(sv_response.messagetype()), NetMsg(static_cast<LogType_t>(sv_response.messagetype()),
static_cast<eDLL_T>(sv_response.messageid()), sv_response.responseval().c_str(), static_cast<eDLL_T>(sv_response.messageid()),
PrintPercentageEscape(sv_response.responsemsg()).c_str()); sv_response.responseval().c_str(), "%s", sv_response.responsemsg().c_str());
break; break;
} }
default: default:
@ -293,24 +301,9 @@ string CRConClient::Serialize(const string& svReqBuf, const string& svReqVal, co
cl_request.set_messageid(-1); cl_request.set_messageid(-1);
cl_request.set_requesttype(request_t); 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_requestmsg(svReqBuf);
cl_request.set_requestval(svReqVal); 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(); return cl_request.SerializeAsString();
} }

View File

@ -160,7 +160,8 @@ void CRConServer::Send(const std::string& svMessage) const
if (pData->m_bAuthorized) 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) if (pData->m_bAuthorized)
{ {
sv_rcon_sendlogs->SetValue(true); sv_rcon_sendlogs->SetValue(cl_request.requestval().c_str());
} }
break; 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); const long i = strtol(sv_response.responseval().c_str(), NULL, NULL);
if (!i) // sv_rcon_sendlogs is not set. 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); 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; break;
} }
case sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG: case sv_rcon::response_t::SERVERDATA_RESPONSE_CONSOLE_LOG:
{ {
NetMsg(static_cast<LogType_t>(sv_response.messagetype()), NetMsg(static_cast<LogType_t>(sv_response.messagetype()),
static_cast<eDLL_T>(sv_response.messageid()), sv_response.responseval().c_str(), static_cast<eDLL_T>(sv_response.messageid()),
PrintPercentageEscape(sv_response.responsemsg()).c_str()); sv_response.responseval().c_str(), "%s", sv_response.responsemsg().c_str());
break; break;
} }
default: default: