use phosg big-endian types

This commit is contained in:
Martin Michelsen
2022-03-07 22:05:43 -08:00
parent 627498dc8a
commit 3fc1013e1a
4 changed files with 15 additions and 19 deletions
+1 -1
View File
@@ -105,7 +105,7 @@ void DNSServer::on_receive_message(int fd, short) {
} else {
input.resize(bytes);
uint32_t remote_address = bswap32(remote.sin_addr.s_addr);
uint32_t remote_address = ntohl(remote.sin_addr.s_addr);
uint32_t connect_address = is_local_address(remote_address)
? this->local_connect_address
: this->external_connect_address;
+4 -4
View File
@@ -41,7 +41,7 @@ uint32_t resolve_address(const char* address) {
}
struct sockaddr_in* res_sin = (struct sockaddr_in*)res4->ai_addr;
return bswap32(res_sin->sin_addr.s_addr);
return ntohl(res_sin->sin_addr.s_addr);
}
map<string, uint32_t> get_local_addresses() {
@@ -64,7 +64,7 @@ map<string, uint32_t> get_local_addresses() {
continue;
}
ret.emplace(i->ifa_name, bswap32(sin->sin_addr.s_addr));
ret.emplace(i->ifa_name, ntohl(sin->sin_addr.s_addr));
}
return ret;
@@ -83,7 +83,7 @@ bool is_local_address(const sockaddr_storage& daddr) {
return false;
}
const sockaddr_in* sin = reinterpret_cast<const sockaddr_in*>(&daddr);
return is_local_address(bswap32(sin->sin_addr.s_addr));
return is_local_address(ntohl(sin->sin_addr.s_addr));
}
string string_for_address(uint32_t address) {
@@ -93,5 +93,5 @@ string string_for_address(uint32_t address) {
}
uint32_t address_for_string(const char* address) {
return bswap32(inet_addr(address));
return ntohl(inet_addr(address));
}
+2 -8
View File
@@ -19,14 +19,9 @@ using namespace std;
struct PSODownloadQuestHeader {
// When sending a DLQ to the client, this is the DECOMPRESSED size. When
// reading it from a GCI file, this is the COMPRESSED size.
uint32_t size;
be_uint32_t size;
// Note: use PSO PC encryption, even for GC quests.
uint32_t encryption_seed;
void byteswap() {
this->size = bswap32(this->size);
this->encryption_seed = bswap32(this->encryption_seed);
}
be_uint32_t encryption_seed;
};
@@ -367,7 +362,6 @@ string Quest::decode_gci(const string& filename) {
}
PSODownloadQuestHeader* h = reinterpret_cast<PSODownloadQuestHeader*>(
data.data() + 0x2080);
h->byteswap();
string compressed_data_with_header = data.substr(0x2088, h->size);
+8 -6
View File
@@ -251,10 +251,12 @@ void send_update_client_config(shared_ptr<Client> c) {
void send_reconnect(shared_ptr<Client> c, uint32_t address, uint16_t port) {
struct {
uint32_t address;
// The address is big-endian, for some reason. Probably it was defined as a
// uint8_t[4] in the original PSO source rather than a uint32_t
be_uint32_t address;
uint16_t port;
uint16_t unused;
} cmd = {bswap32(address), port, 0};
} cmd = {address, port, 0};
send_command(c, 0x19, 0x00, cmd);
}
@@ -263,22 +265,22 @@ void send_reconnect(shared_ptr<Client> c, uint32_t address, uint16_t port) {
void send_pc_gc_split_reconnect(shared_ptr<Client> c, uint32_t address,
uint16_t pc_port, uint16_t gc_port) {
struct {
uint32_t pc_address;
be_uint32_t pc_address;
uint16_t pc_port;
uint8_t unused1[0x0F];
uint8_t gc_command;
uint8_t gc_flag;
uint16_t gc_size;
uint32_t gc_address;
be_uint32_t gc_address;
uint16_t gc_port;
uint8_t unused2[0xB0 - 0x23];
} cmd;
memset(&cmd, 0, sizeof(cmd));
cmd.pc_address = bswap32(address);
cmd.pc_address = address;
cmd.pc_port = pc_port;
cmd.gc_command = 0x19;
cmd.gc_size = 0x97;
cmd.gc_address = bswap32(address);
cmd.gc_address = address;
cmd.gc_port = gc_port;
send_command(c, 0x19, 0x00, cmd);
}