Files
tech5/source/shared/idlib/networking/amqp/mqcommon.cpp
T
2026-08-08 13:54:26 -07:00

95 lines
2.8 KiB
C++

#include "mqcommon.h"
#ifdef nullptr
#undef nullptr
#endif
#include <algorithm>
#include <cstring>
namespace {
unsigned short Swap16(const unsigned short value) {
return static_cast<unsigned short>((value >> 8) | (value << 8));
}
unsigned int Swap32(const unsigned int value) {
return ((value & 0x000000FFu) << 24)
| ((value & 0x0000FF00u) << 8)
| ((value & 0x00FF0000u) >> 8)
| ((value & 0xFF000000u) >> 24);
}
} // namespace
amqpEndpoint_t::amqpEndpoint_t()
: host("localhost"), port(5672), username("guest"), password("guest"),
vhost("/"), channelMax(0), frameMax(0), heartbeat(0),
nonBlocking(true), silent(true), minorVersion(0), majorVersion(8) {
}
idMQTCP::idMQTCP() = default;
idMQTCP::~idMQTCP() { Close(); }
bool idMQTCP::Connect(const char* host, const unsigned short port,
const bool nonBlocking, const bool silent) {
return tcp.Connect(host, port, nonBlocking, silent, false);
}
void idMQTCP::Close() { tcp.Close(); }
bool idMQTCP::IsOpen() const { return tcp.IsOpen(); }
int idMQTCP::Read(void* data, const int size, const bool blocking,
const int timeoutMS) {
return blocking ? tcp.ReadBlocking(data, size, timeoutMS)
: tcp.Read(data, size);
}
int idMQTCP::Write(const void* data, const int size, const bool blocking,
const int timeoutMS) {
return blocking ? tcp.WriteBlocking(data, size, timeoutMS)
: tcp.Write(data, size);
}
int idMQTCP::ReadByte(unsigned char& value, const bool blocking,
const int timeoutMS) {
return Read(&value, sizeof(value), blocking, timeoutMS);
}
int idMQTCP::ReadUInt16(unsigned short& value, const bool blocking,
const int timeoutMS) {
const int amount = Read(&value, sizeof(value), blocking, timeoutMS);
if (amount == sizeof(value)) value = Swap16(value);
return amount;
}
int idMQTCP::ReadUInt32(unsigned int& value, const bool blocking,
const int timeoutMS) {
const int amount = Read(&value, sizeof(value), blocking, timeoutMS);
if (amount == sizeof(value)) value = Swap32(value);
return amount;
}
idMQBuffer::idMQBuffer() : body(), readPos(0) {}
void idMQBuffer::Clear() {
body.Clear();
readPos = 0;
}
void idMQBuffer::WriteData(const void* source, const int size) {
if (source == nullptr || size <= 0) return;
const unsigned char* bytes = static_cast<const unsigned char*>(source);
for (int index = 0; index < size; ++index) body.Append(bytes[index]);
}
void idMQBuffer::WriteUInt16(unsigned short value, const bool bigEndian) {
if (bigEndian) value = Swap16(value);
WriteData(&value, sizeof(value));
}
void idMQBuffer::WriteUInt32(unsigned int value, const bool bigEndian) {
if (bigEndian) value = Swap32(value);
WriteData(&value, sizeof(value));
}