Used new decode/encodeString functions in other places, made getString private.
This commit is contained in:
parent
b092b47a58
commit
0076a041c9
@ -58,6 +58,18 @@ private:
|
|||||||
|
|
||||||
std::vector<uint8_t> m_string;
|
std::vector<uint8_t> m_string;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
/** Returns a part of the network string as a std::string. This is an
|
||||||
|
* internal function only, the user should call decodeString(W) instead.
|
||||||
|
* \param pos First position to be in the string.
|
||||||
|
* \param len Number of bytes to copy.
|
||||||
|
*/
|
||||||
|
std::string getString(int pos, int len) const
|
||||||
|
{
|
||||||
|
return std::string(m_string.begin() + pos,
|
||||||
|
m_string.begin() + pos + len);
|
||||||
|
} // getString
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/** Dummy constructor. */
|
/** Dummy constructor. */
|
||||||
NetworkString() { }
|
NetworkString() { }
|
||||||
@ -91,11 +103,6 @@ public:
|
|||||||
NetworkString& encodeString(const irr::core::stringw &value);
|
NetworkString& encodeString(const irr::core::stringw &value);
|
||||||
int decodeString(int n, std::string *out) const;
|
int decodeString(int n, std::string *out) const;
|
||||||
int decodeStringW(int n, irr::core::stringw *out) const;
|
int decodeStringW(int n, irr::core::stringw *out) const;
|
||||||
// ------------------------------------------------------------------------
|
|
||||||
NetworkString& add(const std::string &s)
|
|
||||||
{
|
|
||||||
return addUInt8(uint8_t(s.size())).as(s);
|
|
||||||
} // add
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
NetworkString& removeFront(int size)
|
NetworkString& removeFront(int size)
|
||||||
@ -316,17 +323,6 @@ public:
|
|||||||
{
|
{
|
||||||
return get<unsigned char>(pos);
|
return get<unsigned char>(pos);
|
||||||
} // getUChar
|
} // getUChar
|
||||||
// ------------------------------------------------------------------------
|
|
||||||
/** Returns a part of the network string as a std::string.
|
|
||||||
* \param pos First position to be in the string.
|
|
||||||
* \param len Number of bytes to copy.
|
|
||||||
*/
|
|
||||||
std::string getString(int pos, int len) const
|
|
||||||
{
|
|
||||||
return std::string(m_string.begin() + pos,
|
|
||||||
m_string.begin() + pos + len);
|
|
||||||
} // getString
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
/** Returns a standard integer. */
|
/** Returns a standard integer. */
|
||||||
inline int gi(int pos = 0) const { return get<int, 4>(pos); }
|
inline int gi(int pos = 0) const { return get<int, 4>(pos); }
|
||||||
|
@ -61,7 +61,7 @@ void ClientLobbyRoomProtocol::requestKartSelection(const std::string &kart_name)
|
|||||||
NetworkString request(6+1+kart_name.size());
|
NetworkString request(6+1+kart_name.size());
|
||||||
// size_token (4), token, size kart name, kart name
|
// size_token (4), token, size kart name, kart name
|
||||||
request.ai8(LE_KART_SELECTION).ai8(4).ai32(m_server->getClientServerToken())
|
request.ai8(LE_KART_SELECTION).ai8(4).ai32(m_server->getClientServerToken())
|
||||||
.add(kart_name);
|
.encodeString(kart_name);
|
||||||
sendMessage(request, true);
|
sendMessage(request, true);
|
||||||
} // requestKartSelection
|
} // requestKartSelection
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ void ClientLobbyRoomProtocol::voteTrack(const std::string &track,
|
|||||||
NetworkString request(8+1+track.size());
|
NetworkString request(8+1+track.size());
|
||||||
// size_token (4), token, size track, track, size #track, #track
|
// size_token (4), token, size track, track, size #track, #track
|
||||||
request.ai8(LE_VOTE_TRACK).ai8(4).ai32(m_server->getClientServerToken())
|
request.ai8(LE_VOTE_TRACK).ai8(4).ai32(m_server->getClientServerToken())
|
||||||
.add(track).ai8(1).ai8(track_nb);
|
.encodeString(track).ai8(1).ai8(track_nb);
|
||||||
sendMessage(request, true);
|
sendMessage(request, true);
|
||||||
} // voteTrack
|
} // voteTrack
|
||||||
|
|
||||||
@ -310,9 +310,9 @@ void ClientLobbyRoomProtocol::newPlayer(Event* event)
|
|||||||
|
|
||||||
uint32_t global_id = data.gui32(1);
|
uint32_t global_id = data.gui32(1);
|
||||||
uint8_t player_id = data.gui8(6);
|
uint8_t player_id = data.gui8(6);
|
||||||
int name_len = data.getUInt8(7);
|
|
||||||
std::string name_utf8 = data.getString(8, name_len);
|
core::stringw name;
|
||||||
core::stringw name = StringUtils::utf8ToWide(name_utf8);
|
data.decodeStringW(7, &name);
|
||||||
if (global_id == PlayerManager::getCurrentOnlineId())
|
if (global_id == PlayerManager::getCurrentOnlineId())
|
||||||
{
|
{
|
||||||
Log::error("ClientLobbyRoomProtocol",
|
Log::error("ClientLobbyRoomProtocol",
|
||||||
@ -554,15 +554,8 @@ void ClientLobbyRoomProtocol::kartSelectionUpdate(Event* event)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
uint8_t player_id = data[1];
|
uint8_t player_id = data[1];
|
||||||
uint8_t kart_name_length = data[2];
|
std::string kart_name;
|
||||||
std::string kart_name = data.getString(3, kart_name_length);
|
data.decodeString(2, &kart_name);
|
||||||
if (kart_name.size() != kart_name_length)
|
|
||||||
{
|
|
||||||
Log::error("ClientLobbyRoomProtocol",
|
|
||||||
"Kart names sizes differ: told: %d, real: %d.",
|
|
||||||
kart_name_length, kart_name.size());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!m_setup->isKartAvailable(kart_name))
|
if (!m_setup->isKartAvailable(kart_name))
|
||||||
{
|
{
|
||||||
Log::error("ClientLobbyRoomProtocol",
|
Log::error("ClientLobbyRoomProtocol",
|
||||||
@ -811,11 +804,12 @@ void ClientLobbyRoomProtocol::playerTrackVote(Event* event)
|
|||||||
return;
|
return;
|
||||||
if (!isByteCorrect(event, 5, 1))
|
if (!isByteCorrect(event, 5, 1))
|
||||||
return;
|
return;
|
||||||
int N = data[7];
|
std::string track_name;
|
||||||
std::string track_name = data.getString(8, N);
|
int N = data.decodeString(7, &track_name);
|
||||||
if (!isByteCorrect(event, N+8, 1))
|
if (!isByteCorrect(event, N+8, 1))
|
||||||
return;
|
return;
|
||||||
m_setup->getRaceConfig()->setPlayerTrackVote(data[6], track_name, data[N+9]);
|
m_setup->getRaceConfig()->setPlayerTrackVote(data[6], track_name,
|
||||||
|
data[N+9]);
|
||||||
} // playerTrackVote
|
} // playerTrackVote
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -528,14 +528,8 @@ void ServerLobbyRoomProtocol::kartSelectionRequested(Event* event)
|
|||||||
if (!checkDataSizeAndToken(event, 6))
|
if (!checkDataSizeAndToken(event, 6))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint8_t kart_name_size = data.gui8(5);
|
std::string kart_name;
|
||||||
std::string kart_name = data.getString(6, kart_name_size);
|
data.decodeString(5, &kart_name);
|
||||||
if (kart_name.size() != kart_name_size)
|
|
||||||
{
|
|
||||||
Log::error("ServerLobbyRoomProtocol", "Kart names sizes differ: told:"
|
|
||||||
"%d, real: %d.", kart_name_size, kart_name.size());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// check if selection is possible
|
// check if selection is possible
|
||||||
if (!m_selection_enabled)
|
if (!m_selection_enabled)
|
||||||
{
|
{
|
||||||
@ -566,9 +560,8 @@ void ServerLobbyRoomProtocol::kartSelectionRequested(Event* event)
|
|||||||
// send a kart update to everyone
|
// send a kart update to everyone
|
||||||
NetworkString answer(3+1+kart_name.size());
|
NetworkString answer(3+1+kart_name.size());
|
||||||
// kart update (3), 1, race id
|
// kart update (3), 1, race id
|
||||||
answer.ai8(0x03).ai8(1).ai8(peer->getPlayerProfile()->getPlayerID());
|
answer.ai8(0x03).ai8(1).ai8(peer->getPlayerProfile()->getPlayerID())
|
||||||
// kart name size, kart name
|
.encodeString(kart_name);
|
||||||
answer.add(kart_name);
|
|
||||||
sendMessage(answer);
|
sendMessage(answer);
|
||||||
m_setup->setPlayerKart(peer->getPlayerProfile()->getPlayerID(), kart_name);
|
m_setup->setPlayerKart(peer->getPlayerProfile()->getPlayerID(), kart_name);
|
||||||
} // kartSelectionRequested
|
} // kartSelectionRequested
|
||||||
@ -687,8 +680,8 @@ void ServerLobbyRoomProtocol::playerTrackVote(Event* event)
|
|||||||
STKPeer* peer = event->getPeer();
|
STKPeer* peer = event->getPeer();
|
||||||
if (!checkDataSizeAndToken(event, 8))
|
if (!checkDataSizeAndToken(event, 8))
|
||||||
return;
|
return;
|
||||||
int N = data[5];
|
std::string track_name;
|
||||||
std::string track_name = data.getString(6, N);
|
int N = data.decodeString(5, &track_name);
|
||||||
if (!isByteCorrect(event, N+6, 1))
|
if (!isByteCorrect(event, N+6, 1))
|
||||||
return;
|
return;
|
||||||
uint8_t player_id = peer->getPlayerProfile()->getPlayerID();
|
uint8_t player_id = peer->getPlayerProfile()->getPlayerID();
|
||||||
|
@ -173,16 +173,15 @@ Online::XMLRequest* ServersManager::getLANRefreshRequest() const
|
|||||||
if(len>0)
|
if(len>0)
|
||||||
{
|
{
|
||||||
NetworkString s(buffer, len);
|
NetworkString s(buffer, len);
|
||||||
uint8_t name_len = s.getUInt8(0);
|
irr::core::stringw name;
|
||||||
std::string name = s.getString(1, name_len);
|
// name_len is the number of bytes read
|
||||||
irr::core::stringw name_w =
|
uint8_t bytes_read = s.decodeStringW(0, &name);
|
||||||
StringUtils::utf8ToWide(name);
|
uint8_t max_players = s.getUInt8(1+bytes_read );
|
||||||
uint8_t max_players = s.getUInt8(1+name_len );
|
uint8_t players = s.getUInt8(1+bytes_read+1);
|
||||||
uint8_t players = s.getUInt8(1+name.size()+1);
|
uint32_t my_ip = s.getUInt32(1+bytes_read+2);
|
||||||
uint32_t my_ip = s.getUInt32(1+name.size()+2);
|
uint32_t my_port = s.getUInt16(1+bytes_read+6);
|
||||||
uint32_t my_port = s.getUInt16(1+name.size()+6);
|
|
||||||
ServersManager::get()
|
ServersManager::get()
|
||||||
->addServer(new Server(name_w, /*lan*/true,
|
->addServer(new Server(name, /*lan*/true,
|
||||||
max_players, players,
|
max_players, players,
|
||||||
sender) );
|
sender) );
|
||||||
TransportAddress me(my_ip, my_port);
|
TransportAddress me(my_ip, my_port);
|
||||||
|
@ -525,8 +525,7 @@ void STKHost::handleLANRequests()
|
|||||||
// number (which solves the problem which network interface
|
// number (which solves the problem which network interface
|
||||||
// might be the right one if there is more than one).
|
// might be the right one if there is more than one).
|
||||||
NetworkString s;
|
NetworkString s;
|
||||||
s.addUInt8((uint8_t)name.size());
|
s.encodeString(name);
|
||||||
s.addString(name.c_str());
|
|
||||||
s.addUInt8(NetworkConfig::get()->getMaxPlayers());
|
s.addUInt8(NetworkConfig::get()->getMaxPlayers());
|
||||||
s.addUInt8(0); // FIXME: current number of connected players
|
s.addUInt8(0); // FIXME: current number of connected players
|
||||||
s.addUInt32(sender.getIP());
|
s.addUInt32(sender.getIP());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user