summaryrefslogtreecommitdiffhomepage
path: root/NetEx/NetGram.cpp
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2022-03-30 22:58:06 +0200
committerAki <please@ignore.pl>2022-03-30 23:15:02 +0200
commitc813023a9a19f42efd589e84eb7d5bcfc5e59b7f (patch)
treeb53e89e54f7f7a1f3f6335501ff725e6fb23f87d /NetEx/NetGram.cpp
parent0c64847028c1e39d44f76189d9ac215726442f9b (diff)
downloadstarshatter-c813023a9a19f42efd589e84eb7d5bcfc5e59b7f.zip
starshatter-c813023a9a19f42efd589e84eb7d5bcfc5e59b7f.tar.gz
starshatter-c813023a9a19f42efd589e84eb7d5bcfc5e59b7f.tar.bz2
Brought NetGram closer to standard
Diffstat (limited to 'NetEx/NetGram.cpp')
-rw-r--r--NetEx/NetGram.cpp78
1 files changed, 42 insertions, 36 deletions
diff --git a/NetEx/NetGram.cpp b/NetEx/NetGram.cpp
index 701d562..5394df2 100644
--- a/NetEx/NetGram.cpp
+++ b/NetEx/NetGram.cpp
@@ -3,53 +3,64 @@
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
- AUTHOR: John DiCamillo
+ AUTHOR: John DiCamillo
- OVERVIEW
- ========
- Generic Network Packet (Datagram) Implementation
+ OVERVIEW
+ ========
+ Generic Network Packet (Datagram) Implementation
*/
#include "NetGram.h"
+
+#include <atomic>
+#include <cstdint>
+#include <cstring>
+
+#include "NetAddr.h"
#include "NetLayer.h"
-// +-------------------------------------------------------------------+
-static DWORD net_gram_sequence = 1;
+static std::atomic<std::uint32_t> net_gram_sequence {1};
-// +-------------------------------------------------------------------+
/**
* NetGram constructor for ACK packets
*/
-NetGram::NetGram()
- : retries(0), packet_id(0), send_time(0)
-{ }
+NetGram::NetGram() :
+ retries(0),
+ packet_id(0),
+ send_time(0)
+{
+}
+
/**
* NetGram constructor for receiving packets from remote hosts
*/
-NetGram::NetGram(const NetAddr& src, Text msg)
- : addr(src), retries(0), send_time(0)
+NetGram::NetGram(const NetAddr& src, Text msg) :
+ addr(src),
+ retries(0),
+ send_time(0)
{
body = msg;
if (body.length() >= NET_GRAM_HEADER_SIZE) {
- BYTE* data = (BYTE*) body.data();
-
- packet_id = (((DWORD) data[0]) << 24) +
- (((DWORD) data[1]) << 16) +
- (((DWORD) data[2]) << 8) +
- ((DWORD) data[3]);
+ std::uint8_t* data = (std::uint8_t*) body.data();
+ packet_id =
+ (static_cast<std::uint32_t>(data[0]) << 24) +
+ (static_cast<std::uint32_t>(data[1]) << 16) +
+ (static_cast<std::uint32_t>(data[2]) << 8) +
+ (static_cast<std::uint32_t>(data[3]));
}
}
/**
* NetGram constructor for composing packets to send to remote hosts
*/
-NetGram::NetGram(const NetAddr& dst, Text user_data, int r)
- : addr(dst), retries(r)
+NetGram::NetGram(const NetAddr& dst, Text user_data, int r) :
+ addr(dst),
+ retries(r)
{
send_time = NetLayer::GetTime();
packet_id = net_gram_sequence++;
@@ -57,22 +68,21 @@ NetGram::NetGram(const NetAddr& dst, Text user_data, int r)
if (retries)
packet_id |= NET_GRAM_RELIABLE;
- static BYTE buf[NET_GRAM_MAX_SIZE];
- buf[0] = (BYTE) (packet_id >> 24) & 0xff;
- buf[1] = (BYTE) (packet_id >> 16) & 0xff;
- buf[2] = (BYTE) (packet_id >> 8) & 0xff;
- buf[3] = (BYTE) (packet_id) & 0xff;
+ static std::uint8_t buf[NET_GRAM_MAX_SIZE];
+ buf[0] = static_cast<std::uint8_t>((packet_id >> 24) & 0xff);
+ buf[1] = static_cast<std::uint8_t>((packet_id >> 16) & 0xff);
+ buf[2] = static_cast<std::uint8_t>((packet_id >> 8) & 0xff);
+ buf[3] = static_cast<std::uint8_t>((packet_id) & 0xff);
int len = user_data.length();
if (len >= NET_GRAM_MAX_SIZE - NET_GRAM_HEADER_SIZE)
len = NET_GRAM_MAX_SIZE - NET_GRAM_HEADER_SIZE - 1;
- CopyMemory(buf+NET_GRAM_HEADER_SIZE, user_data.data(), len);
+ std::memcpy(buf + NET_GRAM_HEADER_SIZE, user_data.data(), len);
body = Text((char*) buf, len+NET_GRAM_HEADER_SIZE);
}
-// +--------------------------------------------------------------------+
void
NetGram::Retry()
@@ -83,7 +93,6 @@ NetGram::Retry()
}
}
-// +--------------------------------------------------------------------+
NetGram
NetGram::Ack()
@@ -93,16 +102,13 @@ NetGram::Ack()
ack.packet_id = packet_id | NET_GRAM_ACK;
ack.send_time = NetLayer::GetTime();
- static BYTE buf[NET_GRAM_HEADER_SIZE];
- buf[0] = (BYTE) (ack.packet_id >> 24) & 0xff;
- buf[1] = (BYTE) (ack.packet_id >> 16) & 0xff;
- buf[2] = (BYTE) (ack.packet_id >> 8) & 0xff;
- buf[3] = (BYTE) (ack.packet_id) & 0xff;
+ static std::uint8_t buf[NET_GRAM_HEADER_SIZE];
+ buf[0] = static_cast<std::uint8_t>((ack.packet_id >> 24) & 0xff);
+ buf[1] = static_cast<std::uint8_t>((ack.packet_id >> 16) & 0xff);
+ buf[2] = static_cast<std::uint8_t>((ack.packet_id >> 8) & 0xff);
+ buf[3] = static_cast<std::uint8_t>((ack.packet_id) & 0xff);
ack.body = Text((char*) buf, NET_GRAM_HEADER_SIZE);
return ack;
}
-
-
-