use phosg big-endian types
This commit is contained in:
+1
-1
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user