From 09c901655db3bb42d2aac4b506846b18833d777c Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Tue, 7 Mar 2023 15:23:51 -0400 Subject: global: Completly disable inlining This is because it looks more, and more clear that the entire codebase was compiled without inlining. Likely to reduce code size from all the byteswap functions, only present on the GameCube version. --- Makefile | 13 +- context.h | 553 +++++++++++++-------------------------- include/pso/PSOV3Encryption.h | 9 +- include/pso/PSOV3EncryptionTCP.h | 4 +- include/pso/TMainTask.h | 14 +- include/pso/TMenuList.h | 135 +++------- include/pso/TObject.h | 150 +++++------ include/pso/TPlyCharData.h | 7 +- include/pso/TPlyClientConfig.h | 11 +- include/pso/TPlyDispData.h | 32 +-- include/pso/TPlyGuildCardTag.h | 36 ++- include/pso/TPlyInventory.h | 28 +- include/pso/TPlySmth.h | 21 +- include/pso/TProtocol.h | 65 ++--- include/pso/TSocket.h | 40 +-- include/pso/TTcpSocket.h | 4 - include/pso/protocol.h | 7 +- obj_files.mk | 2 - src/pso/PSOV3Encryption.cpp | 21 +- src/pso/TMainTask.cpp | 40 +-- src/pso/TObject.cpp | 32 +-- src/pso/TObject2.cpp | 45 ---- src/pso/TPlyGuildCardTag.cpp | 30 --- src/pso/TProtocol.cpp | 106 ++++---- src/pso/TSocket.cpp | 11 +- src/pso/TTcpSocket.cpp | 128 ++++----- src/pso/protocol.cpp | 4 - 27 files changed, 535 insertions(+), 1013 deletions(-) delete mode 100644 src/pso/TObject2.cpp delete mode 100644 src/pso/TPlyGuildCardTag.cpp diff --git a/Makefile b/Makefile index 839ec5b..fd839a4 100644 --- a/Makefile +++ b/Makefile @@ -43,7 +43,12 @@ CXXFLAGS := $(CFLAGS_BASE) -Cpp_exceptions off -RTTI off include obj_files.mk -$(BUILD_DIR)/src/pso/TProtocol.o: FILE_UNIQUE_CFLAGS := -inline none +# This is a hack, and should be removed once we make separate repos for +# all the support libraries (such as the Dolphin SDK, MSL, and MetroTRK). +$(BUILD_DIR)/src/pso/%.o: DIR_UNIQUE_CFLAGS := -inline none + +# File specific flags. +$(BUILD_DIR)/src/pso/TObject.o: FILE_UNIQUE_CFLAGS := -sym on ALL_DIRS := $(sort $(dir $(O_FILES))) @@ -70,12 +75,12 @@ $(BUILD_DIR)/%.o: %.s $(BUILD_DIR)/%.o: %.c @echo "Compiling " $< - $(QUIET) $(CC) -lang=c $(CFLAGS) $(FILE_UNIQUE_CFLAGS) -c -o $@ $< + $(QUIET) $(CC) -lang=c $(CFLAGS) $(DIR_UNIQUE_CFLAGS) $(FILE_UNIQUE_CFLAGS) -c -o $@ $< $(BUILD_DIR)/%.o: %.cp @echo "Compiling " $< - $(QUIET) $(CC) $(CXXFLAGS) $(FILE_UNIQUE_CFLAGS) -c -o $@ $< + $(QUIET) $(CC) $(CXXFLAGS) $(DIR_UNIQUE_CFLAGS) $(FILE_UNIQUE_CFLAGS) -c -o $@ $< $(BUILD_DIR)/%.o: %.cpp @echo "Compiling " $< - $(QUIET) $(CC) -lang=c++ $(CXXFLAGS) $(FILE_UNIQUE_CFLAGS) -c -o $@ $< + $(QUIET) $(CC) -lang=c++ $(CXXFLAGS) $(DIR_UNIQUE_CFLAGS) $(FILE_UNIQUE_CFLAGS) -c -o $@ $< diff --git a/context.h b/context.h index c9a8dcd..39fa7f3 100644 --- a/context.h +++ b/context.h @@ -358,121 +358,66 @@ inline TArray &to_TArray(T *array) { // pso/TMenuList.h template class TMenuListEntry : public TPlyGuildCardTag { - public: - T entry; - +public: TMenuListEntry() : TPlyGuildCardTag() {}; - void bswap(); - void assign(const TMenuListEntry &src); - - TMenuListEntry &operator=(const TMenuListEntry &src) { - _assign(src); - return *this; + void bswap() { + TPlyGuildCardTag::bswap(); + entry.bswap(); }; - - private: - void _assign(const TMenuListEntry &src); +public: + T entry; } __packed__; template class TMenuList { - public: +public: + void bswap() { + header.bswap(); + if (num_pad_entries) { + for (int i = 0; i < num_pad_entries; i++) { + pad_entries[i].bswap(); + } + } + if (num_entries) { + for (int i = 0; i < num_entries; i++) { + entries[i].bswap(); + } + } + }; +public: packet_header header; - TArray, num_pad_entries> pad_entries; - TArray, num_entries> entries; - - void bswap(); - TMenuList &assign(const TMenuList &src); + TMenuListEntry pad_entries[num_pad_entries]; + TMenuListEntry entries[num_entries]; } __packed__; template class TMenuList { - public: +public: + void bswap() { + header.bswap(); + for (int i = 0; i < num_entries; i++) { + entries[i].bswap(); + } + }; +public: packet_header header; - TArray, num_entries> entries; - - void bswap(); - TMenuList &assign(const TMenuList &src); + TMenuListEntry entries[num_entries]; } __packed__; template class TMenuList { - public: - packet_header header; - TArray, num_pad_entries> pad_entries; - - void bswap(); - TMenuList &assign(const TMenuList &src); -} __packed__; - - -template -void TMenuList::bswap() { - header.bswap(); - for (int i = 0; i < num_entries; i++) { - entries[i].bswap(); - } -} - -template -void TMenuList::bswap() { - header.bswap(); - for (int i = 0; i < num_pad_entries; i++) { - pad_entries[i].bswap(); - } -} - -template -void TMenuList::bswap() { - header.bswap(); - if (num_pad_entries) { +public: + void bswap() { + header.bswap(); for (int i = 0; i < num_pad_entries; i++) { pad_entries[i].bswap(); } - } - if (num_entries) { - for (int i = 0; i < num_entries; i++) { - entries[i].bswap(); - } - } -} - -template -void TMenuListEntry::bswap() { - TPlyGuildCardTag::bswap(); - entry.bswap(); -} - -template -TMenuList &TMenuList::assign(const TMenuList &src) { - *this = src; - return *this; -} - -template -TMenuList &TMenuList::assign(const TMenuList &src) { - *this = src; - return *this; -} - -template -TMenuList &TMenuList::assign(const TMenuList &src) { - *this = src; - return *this; -} - -template -void TMenuListEntry::_assign(const TMenuListEntry &src) { - TPlyGuildCardTag::assign(src); - entry = src.entry; -} - -template -void TMenuListEntry::assign(const TMenuListEntry &src) { - TPlyGuildCardTag::operator=(src); - entry = src.entry; -} + }; +public: + packet_header header; + TMenuListEntry pad_entries[num_pad_entries]; +} __packed__; // TMainTask.cpp // Const defs. @@ -572,7 +517,7 @@ struct packet_header { u8 command; u8 flags; u16 size; - void bswap(); + void bswap() { bswap_16(&size); }; } __packed__; // pso/TMath.h @@ -612,11 +557,11 @@ struct disp_data_part2 { void bswap(); disp_data_part2 &assign(const disp_data_part2 &src); - TArray name; - TArray smth; + char name[16]; + u32 smth[2]; u32 name_colour; u8 extra_model; - TArray padding; + u8 padding[15]; u32 name_colour_checksum; u8 section_id; u8 char_class; @@ -648,14 +593,14 @@ struct TItemData { TItemData &assign(const TItemData &src); union { - TArray data_u8; - TArray data_u16; - TArray data_u32; + u8 data_u8[12]; + u16 data_u16[6]; + u32 data_u32[3]; } data1; u32 id; union { - TArray data_u8; - TArray data_u16; + u8 data_u8[4]; + u8 data_u16[2]; u32 data_u32; } data2; }; @@ -699,7 +644,7 @@ struct packet { union { struct { packet_header header; - TArray data; + u8 data[0x7c00-sizeof(packet_header)]; } pkt; u8 bytes[0x7c00]; }; @@ -718,7 +663,7 @@ struct packet { struct GameListEntry { u8 difficulty_tag; u8 num_players; - TArray name; + char name[16]; u8 episode; u8 flags; }; @@ -728,15 +673,15 @@ struct LobbyListEntry { }; struct QuestListEntry { - TArray name; - TArray short_description; + char name[32]; + char short_description[112]; }; // pso/TSocket.h // Union defs. union ipv4_addr { u32 addr; - TArray addr_bytes; + u8 addr_bytes[4]; }; // pso/TObject.h @@ -761,26 +706,14 @@ enum object_flags { ALL_BITS = 0xFFFF }; -// Inline operator defs. -static inline object_flags operator^(object_flags a, object_flags b) { return static_cast(static_cast(a) ^ static_cast(b)); }; -static inline object_flags operator&(object_flags a, object_flags b) { return static_cast(static_cast(a) & static_cast(b)); }; -static inline object_flags operator|(object_flags a, object_flags b) { return static_cast(static_cast(a) | static_cast(b)); }; -static inline object_flags operator~(object_flags a) { return static_cast(~static_cast(a)); } -static inline void operator^=(object_flags &a, object_flags b) { a = a ^ b; }; -static inline void operator&=(object_flags &a, object_flags b) { a = a & b; }; -static inline void operator|=(object_flags &a, object_flags b) { a = a | b; }; - // pso/TPlyCharData.h // Class defs. class TPlyCharData { public: - TPlyCharData(); + TPlyCharData() {}; void bswap(); TPlyCharData &assign(const TPlyCharData &src); - - PRIVATE_MEMBER_ACCESSORS(TPlyInventory, inventory); - PRIVATE_MEMBER_ACCESSORS(TPlyDispData, disp_data); -private: +public: TPlyInventory m_inventory; TPlyDispData m_disp_data; }; @@ -788,17 +721,12 @@ private: // pso/TPlyClientConfig.h class TPlyClientConfig { public: - PRIVATE_MEMBER_ACCESSORS(u64, magic); - PRIVATE_MEMBER_ACCESSORS(u32, flags); - PRIVATE_MEMBER_ACCESSORS(u32, proxy_dst_addr); - PRIVATE_MEMBER_ACCESSORS(u16, proxy_dst_port); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, mbr_0xe, 14); -private: - u64 m_magic; +public: + u32 m_magic[2]; u32 m_flags; u32 m_proxy_dst_addr; u16 m_proxy_dst_port; - TArray m_mbr_0xe; + u8 m_mbr_0xe[14]; }; // pso/TPlyDispData.h @@ -809,9 +737,7 @@ public: void bswap(); TPlyDispConfigSmthTag &assign(const TPlyDispConfigSmthTag &src); - - PRIVATE_MEMBER_ACCESSORS(gc_tag, tag); -private: +public: gc_tag m_tag; }; @@ -819,23 +745,16 @@ class TPlyDispConfigSmth { public: void bswap(); TPlyDispConfigSmth &assign(const TPlyDispConfigSmth &src); - - PRIVATE_MEMBER_ACCESSORS(u32, mbr_0x0); - PRIVATE_MEMBER_ACCESSORS_ARRAY(TPlyDispConfigSmthTag, tags, 4); - PRIVATE_MEMBER_ACCESSORS_ARRAY(TPlyDispConfigSmthTag, tags1, 4); -private: +public: u32 m_mbr_0x0; - TArray m_tags; - TArray m_tags1; + TPlyDispConfigSmthTag m_tags[4]; + TPlyDispConfigSmthTag m_tags1[4]; }; class TPlyDispConfig { public: void bswap(); TPlyDispConfig &assign(const TPlyDispConfig &src); - - PRIVATE_MEMBER_ACCESSORS(TPlyDispConfigSmth, smth); - PRIVATE_MEMBER_ACCESSORS(TPlyDispConfigSmth, smth1); private: TPlyDispConfigSmth m_smth; TPlyDispConfigSmth m_smth1; @@ -845,39 +764,42 @@ class TPlyDispData { public: void bswap(); TPlyDispData &assign(const TPlyDispData &src); - - PRIVATE_MEMBER_ACCESSORS(player_stats, stats); - PRIVATE_MEMBER_ACCESSORS(disp_data_part2, disp_part2); - PRIVATE_MEMBER_ACCESSORS(TPlyDispConfig, config); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, tech_levels, 20); -private: +public: player_stats m_stats; disp_data_part2 m_disp_part2; TPlyDispConfig m_config; - TArray m_tech_levels; + u8 m_tech_levels[20]; }; // pso/TPlyGuildCardTag.h class TPlyGuildCardTag { public: - TPlyGuildCardTag(); - TPlyGuildCardTag(u16 tag2, u32 guildcard_number); - - TPlyGuildCardTag &operator=(const TPlyGuildCardTag &src); - - void bswap(); - void assign(const TPlyGuildCardTag &src); - void assign(const TPlyGuildCardTag *src); + TPlyGuildCardTag() {}; + TPlyGuildCardTag(u16 tag2, u32 guildcard_number) { + m_tag.tag0 = 0; + m_tag.tag1 = 0; + m_tag.tag2 = tag2; + m_guildcard_number = guildcard_number; + }; - PRIVATE_MEMBER_ACCESSORS(gc_tag, tag); - PRIVATE_MEMBER_ACCESSORS(u32, tag_u32); - PRIVATE_MEMBER_ACCESSORS(u32, guildcard_number); -private: - void _assign(const TPlyGuildCardTag &src) { - m_tag = src.m_tag; + TPlyGuildCardTag &operator=(const TPlyGuildCardTag &src) { + m_tag.tag0 = src.m_tag.tag0; + m_tag.tag1 = src.m_tag.tag1; + m_tag.tag2 = src.m_tag.tag2; m_guildcard_number = src.m_guildcard_number; }; + void bswap() { + bswap_32(&m_guildcard_number); + bswap_16(&m_tag.tag2); + }; + + void assign(const TPlyGuildCardTag &src) { *this = src; }; + void assign(const TPlyGuildCardTag *src) { + m_tag_u32 = src->m_tag_u32; + m_guildcard_number = src->m_guildcard_number; + }; +public: union { gc_tag m_tag; u32 m_tag_u32; @@ -891,12 +813,8 @@ public: void init(); void bswap(); TPlyInventoryItem &assign(const TPlyInventoryItem &src); - - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, present, 4); - PRIVATE_MEMBER_ACCESSORS(u32, flags); - PRIVATE_MEMBER_ACCESSORS(TItemData, data); -private: - TArray m_present; +public: + u8 m_present[4]; u32 m_flags; TItemData m_data; }; @@ -905,18 +823,12 @@ class TPlyInventory { public: void bswap(); TPlyInventory &assign(const TPlyInventory &src); - - PRIVATE_MEMBER_ACCESSORS(u8, num_items); - PRIVATE_MEMBER_ACCESSORS(u8, hp_materials_used); - PRIVATE_MEMBER_ACCESSORS(u8, tp_materials_used); - PRIVATE_MEMBER_ACCESSORS(u8, language); - PRIVATE_MEMBER_ACCESSORS_ARRAY(TPlyInventoryItem, items, 30); -private: +public: u8 m_num_items; u8 m_hp_materials_used; u8 m_tp_materials_used; u8 m_language; - TArray m_items; + TPlyInventoryItem m_items[30]; }; // pso/TPlySmth.h @@ -925,17 +837,12 @@ public: TPlySmth() {}; void bswap() { - bswap_32(m_smth.as()); - bswap_32(m_smth1.as()); + bswap_32(reinterpret_cast(&m_smth)); + bswap_32(reinterpret_cast(&m_smth1)); }; - - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, smth, 4); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, smth1, 4); - - friend class TProtocol; -protected: - TArray m_smth; - TArray m_smth1; +public: + u8 m_smth[4]; + u8 m_smth1[4]; }; // pso/PSOV3EncryptionTCP.h @@ -946,9 +853,7 @@ public: void reset(u32 seed); void encrypt(void *void_data, int size); - - PRIVATE_MEMBER_ACCESSORS(u32, seed); -private: +public: u32 m_seed; }; @@ -976,95 +881,79 @@ public: // pso/TObject.h class TObject { -private: - void _delete_children() { - while (m_down != NULL) { - delete m_down; - } - }; - void add_parent(TObject *parent, bool set_parent) { - if (set_parent) { - m_up = parent; - } - TObject *child; - if (parent == NULL) { - m_prev = this; - m_next = NULL; - return; - } - child = parent->m_down; - if (child != NULL) { - m_prev = child->m_next; - m_next = NULL; - child->m_prev->m_next = this; - child->m_prev = this; - } else { - m_prev = this; - parent->m_down = this; - m_next = NULL; - } - }; - void remove_parent() { - if (m_up != NULL) { - if (m_prev == this) { - m_up->m_down = NULL; - } else if (m_up->m_down == this) { - m_up->m_down = m_next; - m_prev->m_next = NULL; - if (m_next != NULL) { - m_next->m_prev = m_prev; - } - } else { - m_prev->m_next = m_next; - if (m_next != NULL) { - m_next->m_prev = m_prev; - } else { - m_up->m_down->m_prev = m_prev; - } - } - } - }; - - void set_flags(object_flags flags) { - m_flags |= flags; +#ifdef TOBJECT_CPP + #define _delete_children() { \ + while (m_down != NULL) { \ + delete m_down; \ + } \ } - - void clear_flags(object_flags flags) { - m_flags_u16 &= ~static_cast(flags); + #define add_parent(parent, set_parent) { \ + if (set_parent) { \ + m_up = parent; \ + } \ + /*TObject *child;*/ \ + if (parent == NULL) { \ + m_prev = this; \ + m_next = NULL; \ + } else { \ + TObject *child = parent->m_down; \ + if (child != NULL) { \ + m_prev = child->m_next; \ + m_next = NULL; \ + child->m_prev->m_next = this; \ + child->m_prev = this; \ + } else { \ + m_prev = this; \ + parent->m_down = this; \ + m_next = NULL; \ + } \ + } \ } - - void toggle_flags(object_flags flags) { - m_flags ^= flags; + #define remove_parent() { \ + if (m_up != NULL) { \ + if (m_prev == this) { \ + m_up->m_down = NULL; \ + } else if (m_up->m_down == this) { \ + m_up->m_down = m_next; \ + m_prev->m_next = NULL; \ + if (m_next != NULL) { \ + m_next->m_prev = m_prev; \ + } \ + } else { \ + m_prev->m_next = m_next; \ + if (m_next != NULL) { \ + m_next->m_prev = m_prev; \ + } else { \ + m_up->m_down->m_prev = m_prev; \ + } \ + } \ + } \ } - - u32 get_flags(object_flags flags) { - return m_flags & flags; - }; - - +#endif public: const char *m_name; - union { - object_flags m_flags; - u16 m_flags_u16; - }; + u16 m_flags; u16 m_id; TObject *m_prev; TObject *m_next; TObject *m_up; TObject *m_down; public: - void disallow_rendering_shadows(); - void allow_rendering_shadows(); - void disallow_rendering(); - void allow_rendering(); - void toggle_flag_3(); - void set_flag_3(); - void clear_flag_3(); - void queue_destruction(); - void set_flag_9(); - u32 get_flag_9(); - void clear_flag_9(); + void allow_rendering_shadows() { m_flags &= ~DISALLOW_RENDER_SHADOWS; }; + void disallow_rendering_shadows() { m_flags |= DISALLOW_RENDER_SHADOWS; }; + + void clear_flag_9() { m_flags &= ~BIT_9; }; + void set_flag_9() { m_flags |= BIT_9; }; + u32 get_flag_9() { return m_flags & BIT_9; }; + + void allow_rendering() { m_flags &= ~DISALLOW_RENDER; }; + void disallow_rendering() { m_flags |= DISALLOW_RENDER; }; + + void clear_flag_3() { m_flags &= ~BIT_3; }; + void set_flag_3() { m_flags |= BIT_3; }; + void toggle_flag_3() { m_flags ^= BIT_3; }; + + void queue_destruction() { m_flags |= QUEUE_DESTRUCTION; }; TObject(TObject *parent = NULL); virtual ~TObject(); @@ -1089,8 +978,6 @@ public: void log(const char *str); int get_node_count(); int all_parents_unqueued_for_destruction(); - static void *alloc(size_t size); - static void free(void *ptr); bool toggle_flag_9_if_flag_10_is_clear(); }; @@ -1107,8 +994,8 @@ public: s16 m_size; s16 m_buffer_offset; u32 m_unused; - TArray m_unused2; - TArray m_packet_buffer; + u8 m_unused2[64]; + u8 m_packet_buffer[2048]; s16 m_stat_val; u16 m_unused3; u32 m_send_window; @@ -1129,40 +1016,6 @@ public: void set_port(u32 port); const u8 next(); int is_empty(); - - void set_flags(u8 flags) { - m_is_invalid_packet |= flags; - }; - - void clear_flags(u8 flags) { - m_is_invalid_packet &= ~flags; - }; - - void toggle_flags(u8 flags) { - m_is_invalid_packet ^= flags; - }; - - u8 get_flags(u8 flags) { - return m_is_invalid_packet & flags; - }; - - PRIVATE_MEMBER_ACCESSORS(ipv4_addr, dst_addr); - PRIVATE_MEMBER_ACCESSORS(u16, dst_port); - PRIVATE_MEMBER_ACCESSORS(u16, src_port); - PRIVATE_MEMBER_ACCESSORS(ipv4_addr, src_addr); - PRIVATE_MEMBER_ACCESSORS(s16, sock_fd); - PRIVATE_MEMBER_ACCESSORS(char, is_invalid_packet); - PRIVATE_MEMBER_ACCESSORS(char, buffer_cleared); - PRIVATE_MEMBER_ACCESSORS(s16, size); - PRIVATE_MEMBER_ACCESSORS(s16, buffer_offset); - PRIVATE_MEMBER_ACCESSORS(u32, unused); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, unused2, 64); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, packet_buffer, 2048); - PRIVATE_MEMBER_ACCESSORS(s16, stat_val); - PRIVATE_MEMBER_ACCESSORS(u16, unused3); - PRIVATE_MEMBER_ACCESSORS(u32, send_window); - PRIVATE_MEMBER_ACCESSORS(u32, recv_window); - PRIVATE_MEMBER_ACCESSORS_FUNC(void, callback, TSocket *socket); }; // pso/TTcpSocket.h @@ -1189,14 +1042,10 @@ public: int test_connection(); static void notify(short size, short sock_fd); - - PRIVATE_MEMBER_ACCESSORS(PSOV3EncryptionTCP, send_crypt); - PRIVATE_MEMBER_ACCESSORS(PSOV3EncryptionTCP, recv_crypt); - PRIVATE_MEMBER_ACCESSORS(int, is_encrypted); }; // pso/TMainTask.h -class TMainTask : private TObject { +class TMainTask : public TObject { public: u32 task_flags; u32 mbr_0x20; @@ -1228,18 +1077,6 @@ public: virtual void run_task(); virtual void render(); virtual void render_shadows(); -private: - void set_task_flags(u32 flags) { - this->task_flags |= flags; - } - - void clear_task_flags(u32 flags) { - this->task_flags &= ~flags; - } - - u32 get_task_flags(u32 flags) { - return this->task_flags & flags; - }; }; // pso/PSOV3Encryption.h @@ -1259,13 +1096,8 @@ public: virtual ~PSOV3Encryption(); virtual void init(u32 seed); virtual u32 next(); - - PRIVATE_MEMBER_ACCESSORS_ARRAY(u32, buffer, 522); - PRIVATE_MEMBER_ACCESSORS_NON_REF(u32 *, buffer_start); - PRIVATE_MEMBER_ACCESSORS_NON_REF(u32 *, buffer_end); - -private: - TArray m_buffer; +public: + u32 m_buffer[522]; u32 *m_buffer_start; u32 *m_buffer_end; }; @@ -1287,27 +1119,27 @@ public: int m_unused2; int m_udp_disabled; int m_language; - TArray m_unused3; + u8 m_unused3[80]; TPlyCharData m_character_data; u32 m_unused4; TMenuListEntry m_game_entries[64]; TMenuListEntry m_game_entries2[64]; TMenuListEntry m_lobby_entries[16]; TMenuListEntry m_quest_entries[30]; - TArray m_unused5; - TArray m_serial_number3; - TArray m_password2; - TArray m_serial_number; - TArray m_access_key; - TArray m_password; - TArray m_player_name; - TArray m_serial_number2; - TArray m_access_key2; + u8 m_unused5[128]; + char m_serial_number3[17]; + char m_password2[17]; + char m_serial_number[48]; + char m_access_key[48]; + char m_password[64]; + char m_player_name[16]; + char m_serial_number2[17]; + char m_access_key2[17]; TPlyClientConfig m_client_config; int m_packet_offset; int m_packet_size; struct packet m_packet; - TArray m_recv_handlers; + recv_packet_handler m_recv_handlers[52]; public: TProtocol(TObject *parent, u16 sub_version, int language, char *serial_number, char *access_key, char *password); virtual ~TProtocol(); @@ -1318,39 +1150,4 @@ public: void some_stub() {}; int handle_command(struct packet *pkt); void parse_packet(); - - PRIVATE_MEMBER_ACCESSORS(TPlySmth, smth); - PRIVATE_MEMBER_ACCESSORS(TPlyGuildCardTag, guildcard_tag); - PRIVATE_MEMBER_ACCESSORS(u16, sub_version); - PRIVATE_MEMBER_ACCESSORS(int, login_response_state); - PRIVATE_MEMBER_ACCESSORS(int, connected); - PRIVATE_MEMBER_ACCESSORS(int, joined_game); - PRIVATE_MEMBER_ACCESSORS(int, has_meet_user_settings); - PRIVATE_MEMBER_ACCESSORS(int, handle_pings_only); - PRIVATE_MEMBER_ACCESSORS(int, entry_count); - PRIVATE_MEMBER_ACCESSORS(int, unused); - PRIVATE_MEMBER_ACCESSORS(int, lobby_list_count); - PRIVATE_MEMBER_ACCESSORS(int, unused2); - PRIVATE_MEMBER_ACCESSORS(int, udp_disabled); - PRIVATE_MEMBER_ACCESSORS(int, language); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, unused3, 80); - PRIVATE_MEMBER_ACCESSORS(TPlyCharData, character_data); - PRIVATE_MEMBER_ACCESSORS(u32, unused4); - PRIVATE_MEMBER_ACCESSORS_C_ARRAY(TMenuListEntry, game_entries, 64); - PRIVATE_MEMBER_ACCESSORS_C_ARRAY(TMenuListEntry, game_entries2, 64); - PRIVATE_MEMBER_ACCESSORS_C_ARRAY(TMenuListEntry, lobby_entries, 16); - PRIVATE_MEMBER_ACCESSORS_C_ARRAY(TMenuListEntry, quest_entries, 30); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, unused5, 128); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, serial_number3, 17); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, password2, 17); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, serial_number, 48); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, access_key, 48); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, password, 64); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, player_name, 16); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, serial_number2, 17); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, access_key2, 17); - PRIVATE_MEMBER_ACCESSORS(int, packet_offset); - PRIVATE_MEMBER_ACCESSORS(int, packet_size); - PRIVATE_MEMBER_ACCESSORS(struct packet, packet); - PRIVATE_MEMBER_ACCESSORS_ARRAY(recv_packet_handler, recv_handlers, 52); }; diff --git a/include/pso/PSOV3Encryption.h b/include/pso/PSOV3Encryption.h index ae48f6b..d34cd4f 100644 --- a/include/pso/PSOV3Encryption.h +++ b/include/pso/PSOV3Encryption.h @@ -22,13 +22,8 @@ public: virtual ~PSOV3Encryption(); virtual void init(u32 seed); virtual u32 next(); - - PRIVATE_MEMBER_ACCESSORS_ARRAY(u32, buffer, 522); - PRIVATE_MEMBER_ACCESSORS_NON_REF(u32 *, buffer_start); - PRIVATE_MEMBER_ACCESSORS_NON_REF(u32 *, buffer_end); - -private: - TArray m_buffer; +public: + u32 m_buffer[522]; u32 *m_buffer_start; u32 *m_buffer_end; }; diff --git a/include/pso/PSOV3EncryptionTCP.h b/include/pso/PSOV3EncryptionTCP.h index da3208d..9546df0 100644 --- a/include/pso/PSOV3EncryptionTCP.h +++ b/include/pso/PSOV3EncryptionTCP.h @@ -15,9 +15,7 @@ public: void reset(u32 seed); void encrypt(void *void_data, int size); - - PRIVATE_MEMBER_ACCESSORS(u32, seed); -private: +public: u32 m_seed; }; diff --git a/include/pso/TMainTask.h b/include/pso/TMainTask.h index b73d69d..eb50a99 100644 --- a/include/pso/TMainTask.h +++ b/include/pso/TMainTask.h @@ -34,7 +34,7 @@ TL_OBJECTS TL_OBJECTS #undef o -class TMainTask : private TObject { +class TMainTask : public TObject { public: u32 task_flags; u32 mbr_0x20; @@ -66,17 +66,5 @@ public: virtual void run_task(); virtual void render(); virtual void render_shadows(); -private: - void set_task_flags(u32 flags) { - this->task_flags |= flags; - } - - void clear_task_flags(u32 flags) { - this->task_flags &= ~flags; - } - - u32 get_task_flags(u32 flags) { - return this->task_flags & flags; - }; }; #endif diff --git a/include/pso/TMenuList.h b/include/pso/TMenuList.h index af71a87..d065622 100644 --- a/include/pso/TMenuList.h +++ b/include/pso/TMenuList.h @@ -10,120 +10,65 @@ template class TMenuListEntry : public TPlyGuildCardTag { - public: - T entry; - +public: TMenuListEntry() : TPlyGuildCardTag() {}; - void bswap(); - void assign(const TMenuListEntry &src); - - TMenuListEntry &operator=(const TMenuListEntry &src) { - _assign(src); - return *this; + void bswap() { + TPlyGuildCardTag::bswap(); + entry.bswap(); }; - - private: - void _assign(const TMenuListEntry &src); +public: + T entry; } __packed__; template class TMenuList { - public: +public: + void bswap() { + header.bswap(); + if (num_pad_entries) { + for (int i = 0; i < num_pad_entries; i++) { + pad_entries[i].bswap(); + } + } + if (num_entries) { + for (int i = 0; i < num_entries; i++) { + entries[i].bswap(); + } + } + }; +public: packet_header header; - TArray, num_pad_entries> pad_entries; - TArray, num_entries> entries; - - void bswap(); - TMenuList &assign(const TMenuList &src); + TMenuListEntry pad_entries[num_pad_entries]; + TMenuListEntry entries[num_entries]; } __packed__; template class TMenuList { - public: +public: + void bswap() { + header.bswap(); + for (int i = 0; i < num_entries; i++) { + entries[i].bswap(); + } + }; +public: packet_header header; - TArray, num_entries> entries; - - void bswap(); - TMenuList &assign(const TMenuList &src); + TMenuListEntry entries[num_entries]; } __packed__; template class TMenuList { - public: - packet_header header; - TArray, num_pad_entries> pad_entries; - - void bswap(); - TMenuList &assign(const TMenuList &src); -} __packed__; - - -template -void TMenuList::bswap() { - header.bswap(); - for (int i = 0; i < num_entries; i++) { - entries[i].bswap(); - } -} - -template -void TMenuList::bswap() { - header.bswap(); - for (int i = 0; i < num_pad_entries; i++) { - pad_entries[i].bswap(); - } -} - -template -void TMenuList::bswap() { - header.bswap(); - if (num_pad_entries) { +public: + void bswap() { + header.bswap(); for (int i = 0; i < num_pad_entries; i++) { pad_entries[i].bswap(); } - } - if (num_entries) { - for (int i = 0; i < num_entries; i++) { - entries[i].bswap(); - } - } -} - -template -void TMenuListEntry::bswap() { - TPlyGuildCardTag::bswap(); - entry.bswap(); -} - -template -TMenuList &TMenuList::assign(const TMenuList &src) { - *this = src; - return *this; -} - -template -TMenuList &TMenuList::assign(const TMenuList &src) { - *this = src; - return *this; -} - -template -TMenuList &TMenuList::assign(const TMenuList &src) { - *this = src; - return *this; -} - -template -void TMenuListEntry::_assign(const TMenuListEntry &src) { - TPlyGuildCardTag::assign(src); - entry = src.entry; -} - -template -void TMenuListEntry::assign(const TMenuListEntry &src) { - TPlyGuildCardTag::operator=(src); - entry = src.entry; -} + }; +public: + packet_header header; + TMenuListEntry pad_entries[num_pad_entries]; +} __packed__; #endif diff --git a/include/pso/TObject.h b/include/pso/TObject.h index 55e49ce..b1d4748 100644 --- a/include/pso/TObject.h +++ b/include/pso/TObject.h @@ -35,104 +35,80 @@ enum object_flags { ALL_BITS = 0xFFFF }; -static inline object_flags operator^(object_flags a, object_flags b) { return static_cast(static_cast(a) ^ static_cast(b)); }; -static inline object_flags operator&(object_flags a, object_flags b) { return static_cast(static_cast(a) & static_cast(b)); }; -static inline object_flags operator|(object_flags a, object_flags b) { return static_cast(static_cast(a) | static_cast(b)); }; -static inline object_flags operator~(object_flags a) { return static_cast(~static_cast(a)); } -static inline void operator^=(object_flags &a, object_flags b) { a = a ^ b; }; -static inline void operator&=(object_flags &a, object_flags b) { a = a & b; }; -static inline void operator|=(object_flags &a, object_flags b) { a = a | b; }; - class TObject { -private: - void _delete_children() { - while (m_down != NULL) { - delete m_down; - } - }; - void add_parent(TObject *parent, bool set_parent) { - if (set_parent) { - m_up = parent; - } - TObject *child; - if (parent == NULL) { - m_prev = this; - m_next = NULL; - return; - } - child = parent->m_down; - if (child != NULL) { - m_prev = child->m_next; - m_next = NULL; - child->m_prev->m_next = this; - child->m_prev = this; - } else { - m_prev = this; - parent->m_down = this; - m_next = NULL; - } - }; - void remove_parent() { - if (m_up != NULL) { - if (m_prev == this) { - m_up->m_down = NULL; - } else if (m_up->m_down == this) { - m_up->m_down = m_next; - m_prev->m_next = NULL; - if (m_next != NULL) { - m_next->m_prev = m_prev; - } - } else { - m_prev->m_next = m_next; - if (m_next != NULL) { - m_next->m_prev = m_prev; - } else { - m_up->m_down->m_prev = m_prev; - } - } - } - }; - - void set_flags(object_flags flags) { - m_flags |= flags; +#ifdef TOBJECT_CPP + #define _delete_children() { \ + while (m_down != NULL) { \ + delete m_down; \ + } \ } - - void clear_flags(object_flags flags) { - m_flags_u16 &= ~static_cast(flags); + #define add_parent(parent, set_parent) { \ + if (set_parent) { \ + m_up = parent; \ + } \ + /*TObject *child;*/ \ + if (parent == NULL) { \ + m_prev = this; \ + m_next = NULL; \ + } else { \ + TObject *child = parent->m_down; \ + if (child != NULL) { \ + m_prev = child->m_next; \ + m_next = NULL; \ + child->m_prev->m_next = this; \ + child->m_prev = this; \ + } else { \ + m_prev = this; \ + parent->m_down = this; \ + m_next = NULL; \ + } \ + } \ } - - void toggle_flags(object_flags flags) { - m_flags ^= flags; + #define remove_parent() { \ + if (m_up != NULL) { \ + if (m_prev == this) { \ + m_up->m_down = NULL; \ + } else if (m_up->m_down == this) { \ + m_up->m_down = m_next; \ + m_prev->m_next = NULL; \ + if (m_next != NULL) { \ + m_next->m_prev = m_prev; \ + } \ + } else { \ + m_prev->m_next = m_next; \ + if (m_next != NULL) { \ + m_next->m_prev = m_prev; \ + } else { \ + m_up->m_down->m_prev = m_prev; \ + } \ + } \ + } \ } - - u32 get_flags(object_flags flags) { - return m_flags & flags; - }; - - +#endif public: const char *m_name; - union { - object_flags m_flags; - u16 m_flags_u16; - }; + u16 m_flags; u16 m_id; TObject *m_prev; TObject *m_next; TObject *m_up; TObject *m_down; public: - void disallow_rendering_shadows(); - void allow_rendering_shadows(); - void disallow_rendering(); - void allow_rendering(); - void toggle_flag_3(); - void set_flag_3(); - void clear_flag_3(); - void queue_destruction(); - void set_flag_9(); - u32 get_flag_9(); - void clear_flag_9(); + void allow_rendering_shadows() { m_flags &= ~DISALLOW_RENDER_SHADOWS; }; + void disallow_rendering_shadows() { m_flags |= DISALLOW_RENDER_SHADOWS; }; + + void clear_flag_9() { m_flags &= ~BIT_9; }; + void set_flag_9() { m_flags |= BIT_9; }; + u32 get_flag_9() { return m_flags & BIT_9; }; + + void allow_rendering() { m_flags &= ~DISALLOW_RENDER; }; + void disallow_rendering() { m_flags |= DISALLOW_RENDER; }; + + void clear_flag_3() { m_flags &= ~BIT_3; }; + void set_flag_3() { m_flags |= BIT_3; }; + void toggle_flag_3() { m_flags ^= BIT_3; }; + + void queue_destruction() { m_flags |= QUEUE_DESTRUCTION; }; TObject(TObject *parent = NULL); virtual ~TObject(); @@ -157,8 +133,6 @@ public: void log(const char *str); int get_node_count(); int all_parents_unqueued_for_destruction(); - static void *alloc(size_t size); - static void free(void *ptr); bool toggle_flag_9_if_flag_10_is_clear(); }; diff --git a/include/pso/TPlyCharData.h b/include/pso/TPlyCharData.h index d516c10..7e0036c 100644 --- a/include/pso/TPlyCharData.h +++ b/include/pso/TPlyCharData.h @@ -10,13 +10,10 @@ class TPlyCharData { public: - TPlyCharData() {} + TPlyCharData() {}; void bswap(); TPlyCharData &assign(const TPlyCharData &src); - - PRIVATE_MEMBER_ACCESSORS(TPlyInventory, inventory); - PRIVATE_MEMBER_ACCESSORS(TPlyDispData, disp_data); -private: +public: TPlyInventory m_inventory; TPlyDispData m_disp_data; }; diff --git a/include/pso/TPlyClientConfig.h b/include/pso/TPlyClientConfig.h index 6551fc2..b4c9103 100644 --- a/include/pso/TPlyClientConfig.h +++ b/include/pso/TPlyClientConfig.h @@ -8,17 +8,12 @@ class TPlyClientConfig { public: - PRIVATE_MEMBER_ACCESSORS_ARRAY(u32, magic, 2); - PRIVATE_MEMBER_ACCESSORS(u32, flags); - PRIVATE_MEMBER_ACCESSORS(u32, proxy_dst_addr); - PRIVATE_MEMBER_ACCESSORS(u16, proxy_dst_port); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, mbr_0xe, 14); -private: - TArray m_magic; +public: + u32 m_magic[2]; u32 m_flags; u32 m_proxy_dst_addr; u16 m_proxy_dst_port; - TArray m_mbr_0xe; + u8 m_mbr_0xe[14]; }; #endif diff --git a/include/pso/TPlyDispData.h b/include/pso/TPlyDispData.h index 7901fb9..2113d04 100644 --- a/include/pso/TPlyDispData.h +++ b/include/pso/TPlyDispData.h @@ -38,11 +38,11 @@ struct disp_data_part2 { void bswap(); disp_data_part2 &assign(const disp_data_part2 &src); - TArray name; - TArray smth; + char name[16]; + u32 smth[2]; u32 name_colour; u8 extra_model; - TArray padding; + u8 padding[15]; u32 name_colour_checksum; u8 section_id; u8 char_class; @@ -67,9 +67,7 @@ public: void bswap(); TPlyDispConfigSmthTag &assign(const TPlyDispConfigSmthTag &src); - - PRIVATE_MEMBER_ACCESSORS(gc_tag, tag); -private: +public: gc_tag m_tag; }; @@ -77,23 +75,16 @@ class TPlyDispConfigSmth { public: void bswap(); TPlyDispConfigSmth &assign(const TPlyDispConfigSmth &src); - - PRIVATE_MEMBER_ACCESSORS(u32, mbr_0x0); - PRIVATE_MEMBER_ACCESSORS_ARRAY(TPlyDispConfigSmthTag, tags, 4); - PRIVATE_MEMBER_ACCESSORS_ARRAY(TPlyDispConfigSmthTag, tags1, 4); -private: +public: u32 m_mbr_0x0; - TArray m_tags; - TArray m_tags1; + TPlyDispConfigSmthTag m_tags[4]; + TPlyDispConfigSmthTag m_tags1[4]; }; class TPlyDispConfig { public: void bswap(); TPlyDispConfig &assign(const TPlyDispConfig &src); - - PRIVATE_MEMBER_ACCESSORS(TPlyDispConfigSmth, smth); - PRIVATE_MEMBER_ACCESSORS(TPlyDispConfigSmth, smth1); private: TPlyDispConfigSmth m_smth; TPlyDispConfigSmth m_smth1; @@ -103,16 +94,11 @@ class TPlyDispData { public: void bswap(); TPlyDispData &assign(const TPlyDispData &src); - - PRIVATE_MEMBER_ACCESSORS(player_stats, stats); - PRIVATE_MEMBER_ACCESSORS(disp_data_part2, disp_part2); - PRIVATE_MEMBER_ACCESSORS(TPlyDispConfig, config); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, tech_levels, 20); -private: +public: player_stats m_stats; disp_data_part2 m_disp_part2; TPlyDispConfig m_config; - TArray m_tech_levels; + u8 m_tech_levels[20]; }; #endif diff --git a/include/pso/TPlyGuildCardTag.h b/include/pso/TPlyGuildCardTag.h index 8a8e577..de96902 100644 --- a/include/pso/TPlyGuildCardTag.h +++ b/include/pso/TPlyGuildCardTag.h @@ -13,24 +13,32 @@ struct gc_tag { class TPlyGuildCardTag { public: - TPlyGuildCardTag(); - TPlyGuildCardTag(u16 tag2, u32 guildcard_number); - - TPlyGuildCardTag &operator=(const TPlyGuildCardTag &src); - - void bswap(); - void assign(const TPlyGuildCardTag &src); - void assign(const TPlyGuildCardTag *src); + TPlyGuildCardTag() {}; + TPlyGuildCardTag(u16 tag2, u32 guildcard_number) { + m_tag.tag0 = 0; + m_tag.tag1 = 0; + m_tag.tag2 = tag2; + m_guildcard_number = guildcard_number; + }; - PRIVATE_MEMBER_ACCESSORS(gc_tag, tag); - PRIVATE_MEMBER_ACCESSORS(u32, tag_u32); - PRIVATE_MEMBER_ACCESSORS(u32, guildcard_number); -private: - void _assign(const TPlyGuildCardTag &src) { - m_tag = src.m_tag; + TPlyGuildCardTag &operator=(const TPlyGuildCardTag &src) { + m_tag.tag0 = src.m_tag.tag0; + m_tag.tag1 = src.m_tag.tag1; + m_tag.tag2 = src.m_tag.tag2; m_guildcard_number = src.m_guildcard_number; }; + void bswap() { + bswap_32(&m_guildcard_number); + bswap_16(&m_tag.tag2); + }; + + void assign(const TPlyGuildCardTag &src) { *this = src; }; + void assign(const TPlyGuildCardTag *src) { + m_tag_u32 = src->m_tag_u32; + m_guildcard_number = src->m_guildcard_number; + }; +public: union { gc_tag m_tag; u32 m_tag_u32; diff --git a/include/pso/TPlyInventory.h b/include/pso/TPlyInventory.h index 6cfb7ec..397b4cc 100644 --- a/include/pso/TPlyInventory.h +++ b/include/pso/TPlyInventory.h @@ -12,14 +12,14 @@ struct TItemData { TItemData &assign(const TItemData &src); union { - TArray data_u8; - TArray data_u16; - TArray data_u32; + u8 data_u8[12]; + u16 data_u16[6]; + u32 data_u32[3]; } data1; u32 id; union { - TArray data_u8; - TArray data_u16; + u8 data_u8[4]; + u8 data_u16[2]; u32 data_u32; } data2; }; @@ -29,12 +29,8 @@ public: void init(); void bswap(); TPlyInventoryItem &assign(const TPlyInventoryItem &src); - - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, present, 4); - PRIVATE_MEMBER_ACCESSORS(u32, flags); - PRIVATE_MEMBER_ACCESSORS(TItemData, data); -private: - TArray m_present; +public: + u8 m_present[4]; u32 m_flags; TItemData m_data; }; @@ -43,18 +39,12 @@ class TPlyInventory { public: void bswap(); TPlyInventory &assign(const TPlyInventory &src); - - PRIVATE_MEMBER_ACCESSORS(u8, num_items); - PRIVATE_MEMBER_ACCESSORS(u8, hp_materials_used); - PRIVATE_MEMBER_ACCESSORS(u8, tp_materials_used); - PRIVATE_MEMBER_ACCESSORS(u8, language); - PRIVATE_MEMBER_ACCESSORS_ARRAY(TPlyInventoryItem, items, 30); -private: +public: u8 m_num_items; u8 m_hp_materials_used; u8 m_tp_materials_used; u8 m_language; - TArray m_items; + TPlyInventoryItem m_items[30]; }; #endif diff --git a/include/pso/TPlySmth.h b/include/pso/TPlySmth.h index 99bf763..2530c7b 100644 --- a/include/pso/TPlySmth.h +++ b/include/pso/TPlySmth.h @@ -10,24 +10,13 @@ class TPlySmth { public: TPlySmth() {}; - //TPlySmth &operator=(const TPlySmth &src) { return assign(src); }; - void bswap() { - bswap_32(m_smth.as()); - bswap_32(m_smth1.as()); + bswap_32(reinterpret_cast(&m_smth)); + bswap_32(reinterpret_cast(&m_smth1)); }; - - TPlySmth &assign(const TPlySmth &src) /*{ - m_smth = src.m_smth; - }*/; - - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, smth, 4); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, smth1, 4); - - friend class TProtocol; -protected: - TArray m_smth; - TArray m_smth1; +public: + u8 m_smth[4]; + u8 m_smth1[4]; }; #endif diff --git a/include/pso/TProtocol.h b/include/pso/TProtocol.h index ac2589e..f9d22f9 100644 --- a/include/pso/TProtocol.h +++ b/include/pso/TProtocol.h @@ -25,7 +25,7 @@ struct packet { union { struct { packet_header header; - TArray data; + u8 data[0x7c00-sizeof(packet_header)]; } pkt; u8 bytes[0x7c00]; }; @@ -44,7 +44,7 @@ struct packet { struct GameListEntry { u8 difficulty_tag; u8 num_players; - TArray name; + char name[16]; u8 episode; u8 flags; }; @@ -54,8 +54,8 @@ struct LobbyListEntry { }; struct QuestListEntry { - TArray name; - TArray short_description; + char name[32]; + char short_description[112]; }; typedef void (*recv_packet_handler)(packet &pkt); @@ -76,27 +76,27 @@ public: int m_unused2; int m_udp_disabled; int m_language; - TArray m_unused3; + u8 m_unused3[80]; TPlyCharData m_character_data; u32 m_unused4; TMenuListEntry m_game_entries[64]; TMenuListEntry m_game_entries2[64]; TMenuListEntry m_lobby_entries[16]; TMenuListEntry m_quest_entries[30]; - TArray m_unused5; - TArray m_serial_number3; - TArray m_password2; - TArray m_serial_number; - TArray m_access_key; - TArray m_password; - TArray m_player_name; - TArray m_serial_number2; - TArray m_access_key2; + u8 m_unused5[128]; + char m_serial_number3[17]; + char m_password2[17]; + char m_serial_number[48]; + char m_access_key[48]; + char m_password[64]; + char m_player_name[16]; + char m_serial_number2[17]; + char m_access_key2[17]; TPlyClientConfig m_client_config; int m_packet_offset; int m_packet_size; struct packet m_packet; - TArray m_recv_handlers; + recv_packet_handler m_recv_handlers[52]; public: TProtocol(TObject *parent, u16 sub_version, int language, char *serial_number, char *access_key, char *password); virtual ~TProtocol(); @@ -107,41 +107,6 @@ public: void some_stub() {}; int handle_command(struct packet *pkt); void parse_packet(); - - PRIVATE_MEMBER_ACCESSORS(TPlySmth, smth); - PRIVATE_MEMBER_ACCESSORS(TPlyGuildCardTag, guildcard_tag); - PRIVATE_MEMBER_ACCESSORS(u16, sub_version); - PRIVATE_MEMBER_ACCESSORS(int, login_response_state); - PRIVATE_MEMBER_ACCESSORS(int, connected); - PRIVATE_MEMBER_ACCESSORS(int, joined_game); - PRIVATE_MEMBER_ACCESSORS(int, has_meet_user_settings); - PRIVATE_MEMBER_ACCESSORS(int, handle_pings_only); - PRIVATE_MEMBER_ACCESSORS(int, entry_count); - PRIVATE_MEMBER_ACCESSORS(int, unused); - PRIVATE_MEMBER_ACCESSORS(int, lobby_list_count); - PRIVATE_MEMBER_ACCESSORS(int, unused2); - PRIVATE_MEMBER_ACCESSORS(int, udp_disabled); - PRIVATE_MEMBER_ACCESSORS(int, language); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, unused3, 80); - PRIVATE_MEMBER_ACCESSORS(TPlyCharData, character_data); - PRIVATE_MEMBER_ACCESSORS(u32, unused4); - PRIVATE_MEMBER_ACCESSORS_C_ARRAY(TMenuListEntry, game_entries, 64); - PRIVATE_MEMBER_ACCESSORS_C_ARRAY(TMenuListEntry, game_entries2, 64); - PRIVATE_MEMBER_ACCESSORS_C_ARRAY(TMenuListEntry, lobby_entries, 16); - PRIVATE_MEMBER_ACCESSORS_C_ARRAY(TMenuListEntry, quest_entries, 30); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, unused5, 128); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, serial_number3, 17); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, password2, 17); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, serial_number, 48); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, access_key, 48); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, password, 64); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, player_name, 16); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, serial_number2, 17); - PRIVATE_MEMBER_ACCESSORS_ARRAY(char, access_key2, 17); - PRIVATE_MEMBER_ACCESSORS(int, packet_offset); - PRIVATE_MEMBER_ACCESSORS(int, packet_size); - PRIVATE_MEMBER_ACCESSORS(struct packet, packet); - PRIVATE_MEMBER_ACCESSORS_ARRAY(recv_packet_handler, recv_handlers, 52); }; #endif diff --git a/include/pso/TSocket.h b/include/pso/TSocket.h index e4c5c5e..4a1f5ab 100644 --- a/include/pso/TSocket.h +++ b/include/pso/TSocket.h @@ -10,7 +10,7 @@ union ipv4_addr { u32 addr; - TArray addr_bytes; + u8 addr_bytes[4]; }; extern u16 to_be_uint16_t(u16 val); @@ -28,8 +28,8 @@ public: s16 m_size; s16 m_buffer_offset; u32 m_unused; - TArray m_unused2; - TArray m_packet_buffer; + u8 m_unused2[64]; + u8 m_packet_buffer[2048]; s16 m_stat_val; u16 m_unused3; u32 m_send_window; @@ -50,40 +50,6 @@ public: void set_port(u32 port); const u8 next(); int is_empty(); - - void set_flags(u8 flags) { - m_is_invalid_packet |= flags; - }; - - void clear_flags(u8 flags) { - m_is_invalid_packet &= ~flags; - }; - - void toggle_flags(u8 flags) { - m_is_invalid_packet ^= flags; - }; - - u8 get_flags(u8 flags) { - return m_is_invalid_packet & flags; - }; - - PRIVATE_MEMBER_ACCESSORS(ipv4_addr, dst_addr); - PRIVATE_MEMBER_ACCESSORS(u16, dst_port); - PRIVATE_MEMBER_ACCESSORS(u16, src_port); - PRIVATE_MEMBER_ACCESSORS(ipv4_addr, src_addr); - PRIVATE_MEMBER_ACCESSORS(s16, sock_fd); - PRIVATE_MEMBER_ACCESSORS(char, is_invalid_packet); - PRIVATE_MEMBER_ACCESSORS(char, buffer_cleared); - PRIVATE_MEMBER_ACCESSORS(s16, size); - PRIVATE_MEMBER_ACCESSORS(s16, buffer_offset); - PRIVATE_MEMBER_ACCESSORS(u32, unused); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, unused2, 64); - PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, packet_buffer, 2048); - PRIVATE_MEMBER_ACCESSORS(s16, stat_val); - PRIVATE_MEMBER_ACCESSORS(u16, unused3); - PRIVATE_MEMBER_ACCESSORS(u32, send_window); - PRIVATE_MEMBER_ACCESSORS(u32, recv_window); - PRIVATE_MEMBER_ACCESSORS_FUNC(void, callback, TSocket *socket); }; #endif diff --git a/include/pso/TTcpSocket.h b/include/pso/TTcpSocket.h index 0e47ef0..aa0790a 100644 --- a/include/pso/TTcpSocket.h +++ b/include/pso/TTcpSocket.h @@ -36,10 +36,6 @@ public: int test_connection(); static void notify(short size, short sock_fd); - - PRIVATE_MEMBER_ACCESSORS(PSOV3EncryptionTCP, send_crypt); - PRIVATE_MEMBER_ACCESSORS(PSOV3EncryptionTCP, recv_crypt); - PRIVATE_MEMBER_ACCESSORS(int, is_encrypted); }; #endif diff --git a/include/pso/protocol.h b/include/pso/protocol.h index 697f6b0..140a024 100644 --- a/include/pso/protocol.h +++ b/include/pso/protocol.h @@ -5,13 +5,14 @@ #include "pso/macros.h" #include +extern void bswap_16(u16 *val); +extern void bswap_32(u32 *val); + struct packet_header { u8 command; u8 flags; u16 size; - void bswap(); + void bswap() { bswap_16(&size); }; } __packed__; -extern void bswap_16(u16 *val); -extern void bswap_32(u32 *val); #endif diff --git a/obj_files.mk b/obj_files.mk index c8fb0f1..8db59d1 100644 --- a/obj_files.mk +++ b/obj_files.mk @@ -1,5 +1,4 @@ O_FILES := $(BUILD_DIR)/src/main.o \ - $(BUILD_DIR)/src/pso/TPlyGuildCardTag.o \ $(BUILD_DIR)/src/pso/TTcpSocket.o \ $(BUILD_DIR)/src/pso/TSocket.o \ $(BUILD_DIR)/src/pso/PSOV3EncryptionTCP.o \ @@ -7,7 +6,6 @@ O_FILES := $(BUILD_DIR)/src/main.o \ $(BUILD_DIR)/src/pso/protocol.o \ $(BUILD_DIR)/src/pso/TMainTask.o \ $(BUILD_DIR)/src/pso/TObject.o \ - $(BUILD_DIR)/src/pso/TObject2.o \ $(BUILD_DIR)/src/pso/PSOV3Encryption.o \ $(BUILD_DIR)/src/pso/TProtocol.o \ $(BUILD_DIR)/src/Dolphin/PPCArch.o \ diff --git a/src/pso/PSOV3Encryption.cpp b/src/pso/PSOV3Encryption.cpp index 38225bf..867c864 100644 --- a/src/pso/PSOV3Encryption.cpp +++ b/src/pso/PSOV3Encryption.cpp @@ -16,9 +16,9 @@ void PSOV3Encryption::update_stream() { u32 *part1; u32 *part2; - part2 = m_buffer.start(); - m_buffer_start = m_buffer.start(); - ptr = m_buffer.start(); + part2 = m_buffer; + m_buffer_start = m_buffer; + ptr = m_buffer; part1 = &ptr[489]; for (; part1 != m_buffer_end; *ptr++ ^= *part1++); @@ -27,10 +27,9 @@ void PSOV3Encryption::update_stream() { } void PSOV3Encryption::init(u32 seed) { - const size_t size = m_buffer.size(); - u32 thing; - m_buffer_end = &m_buffer[size]; - m_buffer_start = m_buffer.start(); + const size_t size = (sizeof(m_buffer)/sizeof(*m_buffer))-1; + m_buffer_end = &m_buffer[size+1]; + m_buffer_start = m_buffer; u32 value = 0; for (int i = 0; i <= 16; ++i, *m_buffer_start++ = value) { @@ -41,8 +40,8 @@ void PSOV3Encryption::init(u32 seed) { } --m_buffer_start; - thing = m_buffer[0xf]; - *m_buffer_start = (m_buffer[0] >> 9) ^ (*m_buffer_start << 23) ^ thing; + + *m_buffer_start = (*m_buffer_start << 23) ^ (m_buffer[0] >> 9) ^ m_buffer[0xf]; for (u32 *buf_val = &m_buffer[0], *next_buf_val = &m_buffer[1], *buf = m_buffer_start++; m_buffer_start != m_buffer_end;) { *m_buffer_start++ = (*buf_val++ << 23) ^ (*next_buf_val++ >> 9) ^ *buf++; @@ -51,11 +50,11 @@ void PSOV3Encryption::init(u32 seed) { update_stream(); update_stream(); update_stream(); - m_buffer_start = m_buffer.end(); + m_buffer_start = &m_buffer[size-1]; } PSOV3Encryption::~PSOV3Encryption() { - m_buffer.fill(0); + memset(m_buffer, 0, sizeof(m_buffer)); m_buffer_start = nullptr; m_buffer_end = nullptr; } diff --git a/src/pso/TMainTask.cpp b/src/pso/TMainTask.cpp index 0458c3e..f02b179 100644 --- a/src/pso/TMainTask.cpp +++ b/src/pso/TMainTask.cpp @@ -39,13 +39,13 @@ void func_803e11f0() {} void func_803369b4() {} void TMainTask::render_screen_overlay() { - if (!get_task_flags(0x100)) { + if (!(task_flags & 0x100)) { render_clipout_and_fade(); empty_func(); empty_render_screen_overlay_func(); func_803369b4(); } - clear_task_flags(0x180); + task_flags &= ~0x180; } void TMainTask::some_empty_func() {} @@ -83,14 +83,14 @@ void TMainTask::tl_02_clear_flag_3() { void TMainTask::empty_render_screen_overlay_func() {} void TMainTask::run_tl_camera_tasks() { - set_task_flags(1); + task_flags |= 1; tl_camera->run_tasks(); - clear_task_flags(1); + task_flags &= ~1; } void TMainTask::render() { DISALLOW_OR_ALLOW_CHILD(render_flags, old_render_flags, rendering); - set_task_flags(2); + task_flags |= 2; some_main_task_flag = 0; render_geometry(); some_main_task_flag = 1; @@ -102,8 +102,8 @@ void TMainTask::render() { some_main_task_flag = 0; unused_render_func(); render_ui(); - clear_task_flags(2); - set_task_flags(0x100); + task_flags &= ~2; + task_flags |= 0x100; } void TMainTask::unused_render_func() { @@ -111,7 +111,7 @@ void TMainTask::unused_render_func() { } void TMainTask::render_objects() { - set_task_flags(0x200); + task_flags |= 0x200; tl_03->render_nodes2(); tl_04->render_nodes2(); @@ -125,7 +125,7 @@ void TMainTask::render_objects() { func_80141618(); func_803e11f0(); - clear_task_flags(0x200); + task_flags &= ~0x200; set_depth_buffer_settings_id(2); func_803e11e8(2); @@ -217,7 +217,7 @@ void TMainTask::render_geometry() { } void TMainTask::func_80228bbc() { - set_task_flags(0x40); + task_flags |= 0x40; some_main_task_flag = 0; set_depth_buffer_settings_3(); set_depth_buffer_settings_id(1); @@ -235,11 +235,11 @@ void TMainTask::func_80228bbc() { tl_02->render_nodes(); restore_depth_buffer_settings(); - clear_task_flags(0x40); + task_flags &= ~0x40; } void TMainTask::func_80228c44(s32 arg0) { - set_task_flags(0x20); + task_flags |= 0x20; some_main_task_flag = 0; set_depth_buffer_settings_3(); set_depth_buffer_settings_id(1); @@ -300,11 +300,11 @@ void TMainTask::func_80228c44(s32 arg0) { save_depth_buffer_settings(); restore_depth_buffer_settings(); - clear_task_flags(0x20); + task_flags &= ~0x20; } void TMainTask::func_80228dbc() { - set_task_flags(0x10); + task_flags |= 0x10; some_main_task_flag = 0; render_geometry(); some_main_task_flag = 1; @@ -313,12 +313,12 @@ void TMainTask::func_80228dbc() { some_main_task_flag = 0; render_particle_effects(); unused_render_func(); - clear_task_flags(0x10); + task_flags &= ~0x10; } void TMainTask::render_clipout_and_fade() { u32 some_id; - set_task_flags(2); + task_flags |= 2; set_depth_buffer_settings_2(); set_depth_buffer_settings_id(1); @@ -336,16 +336,16 @@ void TMainTask::render_clipout_and_fade() { set_some_id(some_id); restore_depth_buffer_settings(); - clear_task_flags(2); + task_flags &= ~2; }; void TMainTask::run_task() { SET_OR_CLEAR_CHILD_FLAGS(update_flags, old_update_flags, 3); some_main_task_flag = 0; - set_task_flags(1); + task_flags |= 1; run_tasks(); - clear_task_flags(1); - set_task_flags(0x80); + task_flags &= ~1; + task_flags |= 0x80; } void TMainTask::render_shadows() { diff --git a/src/pso/TObject.cpp b/src/pso/TObject.cpp index ed56035..c832ebe 100644 --- a/src/pso/TObject.cpp +++ b/src/pso/TObject.cpp @@ -1,7 +1,8 @@ +#define TOBJECT_CPP + #include "pso/THeap.h" #include "pso/TMainTask.h" #include "pso/TObject.h" -#define MATCHING TMainTask main_task; TObject global_obj1; @@ -20,7 +21,7 @@ void debug_print(const char *fmt) { } bool TObject::toggle_flag_9_if_flag_10_is_clear() { - if (get_flags(BIT_10)) { + if (m_flags & BIT_10) { return false; } if (!get_flag_9()) { @@ -40,10 +41,9 @@ void *TObject::operator new(size_t size) { return obj_heap->heap_alloc(size); } - int TObject::all_parents_unqueued_for_destruction() { for (TObject *parent = this; parent != NULL; parent = parent->m_up) { - if (parent->get_flags(QUEUE_DESTRUCTION)) { + if (parent->m_flags & QUEUE_DESTRUCTION) { return false; } } @@ -91,7 +91,7 @@ void TObject::empty_func() { void TObject::render_nodes2() { FOREACH_NODE(TObject, this->m_down, child) { - if (child->get_flags(BIT_9)) { + if (child->m_flags & BIT_9) { child->render(); child->clear_flag_9(); } @@ -101,7 +101,7 @@ void TObject::render_nodes2() { void TObject::render_shadows_for_each_node() { FOREACH_NODE(TObject, this->m_down, child) { - if (!child->get_flags(DISALLOW_RENDER_SHADOWS)) { + if (!(child->m_flags & DISALLOW_RENDER_SHADOWS)) { child->render_shadows(); child->render_shadows_for_each_node(); } @@ -110,7 +110,7 @@ void TObject::render_shadows_for_each_node() { void TObject::render_nodes() { FOREACH_NODE(TObject, this->m_down, child) { - if (!child->get_flags(DISALLOW_RENDER)) { + if (!(child->m_flags & DISALLOW_RENDER)) { child->render(); child->render_nodes(); } @@ -123,22 +123,22 @@ void TObject::run_tasks() { while (this->m_down != NULL && child != NULL) { TObject *node = child; child = child->m_next; - if (node->get_flags(DISALLOW_UPDATE)) { + if (node->m_flags & DISALLOW_UPDATE) { // Clearing flag 0 in the if statement is required to match. - if (node->get_flags(QUEUE_DESTRUCTION) && (node->clear_flags(QUEUE_DESTRUCTION), !node->get_flags(DISALLOW_DESTRUCTION))) { + if (node->m_flags & QUEUE_DESTRUCTION && (node->m_flags &= ~QUEUE_DESTRUCTION, !(node->m_flags & DISALLOW_DESTRUCTION))) { delete node; } else { - if (node->get_flags(CHILD_QUEUE_DESTRUCTION)) { + if (node->m_flags & CHILD_QUEUE_DESTRUCTION) { node->delete_children(); node->run_task(); - node->clear_flags(CHILD_QUEUE_DESTRUCTION); + node->m_flags &= ~CHILD_QUEUE_DESTRUCTION; } - if (!node->get_flags(BIT_2)) { + if (!(node->m_flags & BIT_2)) { // Adding this here somehow causes the // dead code to be compiled. // `volatile` typecast is required to match. - (vu16)node->get_flags(QUEUE_DESTRUCTION); + (vu16)node->m_flags & QUEUE_DESTRUCTION; } } } else { @@ -160,8 +160,8 @@ void TObject::delete_children() { } TObject::~TObject() { - if (!get_flags(DISALLOW_DESTRUCTION)) { - set_flags(DISALLOW_DESTRUCTION); + if (!(m_flags & DISALLOW_DESTRUCTION)) { + m_flags |= DISALLOW_DESTRUCTION; _delete_children(); remove_parent(); } @@ -174,3 +174,5 @@ TObject::TObject(TObject *parent) { m_name = TObject_name; add_parent(parent, false); } + +#undef TOBJECT_CPP diff --git a/src/pso/TObject2.cpp b/src/pso/TObject2.cpp deleted file mode 100644 index f020bd3..0000000 --- a/src/pso/TObject2.cpp +++ /dev/null @@ -1,45 +0,0 @@ -#include "pso/TObject.h" - -void TObject::allow_rendering_shadows() { - clear_flags(DISALLOW_RENDER_SHADOWS); -} - -void TObject::clear_flag_9() { - clear_flags(BIT_9); -} - -void TObject::set_flag_9() { - set_flags(BIT_9); -} - -u32 TObject::get_flag_9() { - return get_flags(BIT_9); -} - -void TObject::queue_destruction() { - set_flags(QUEUE_DESTRUCTION); -} - -void TObject::clear_flag_3() { - clear_flags(BIT_3); -} - -void TObject::set_flag_3() { - set_flags(BIT_3); -} - -void TObject::toggle_flag_3() { - toggle_flags(BIT_3); -} - -void TObject::allow_rendering() { - clear_flags(DISALLOW_RENDER); -} - -void TObject::disallow_rendering() { - set_flags(DISALLOW_RENDER); -} - -void TObject::disallow_rendering_shadows() { - set_flags(DISALLOW_RENDER_SHADOWS); -} diff --git a/src/pso/TPlyGuildCardTag.cpp b/src/pso/TPlyGuildCardTag.cpp deleted file mode 100644 index 021c644..0000000 --- a/src/pso/TPlyGuildCardTag.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "pso/TPlyGuildCardTag.h" -#include "pso/protocol.h" -#include - -TPlyGuildCardTag::TPlyGuildCardTag() {} - -TPlyGuildCardTag::TPlyGuildCardTag(u16 tag2, u32 guildcard_number) { - m_tag.tag0 = 0; - m_tag.tag1 = 0; - m_tag.tag2 = tag2; - m_guildcard_number = guildcard_number; -} - -void TPlyGuildCardTag::bswap() { - bswap_32(&m_guildcard_number); - bswap_16(&m_tag.tag2); -} - -TPlyGuildCardTag &TPlyGuildCardTag::operator=(const TPlyGuildCardTag &src) { - _assign(src); - return *this; -} - -void TPlyGuildCardTag::assign(const TPlyGuildCardTag &src) { - _assign(src); -} - -void TPlyGuildCardTag::assign(const TPlyGuildCardTag *src) { - _assign(*src); -} diff --git a/src/pso/TProtocol.cpp b/src/pso/TProtocol.cpp index 0e243d0..dacb966 100644 --- a/src/pso/TProtocol.cpp +++ b/src/pso/TProtocol.cpp @@ -96,7 +96,7 @@ TProtocol::~TProtocol() { } #define fill_with(name, value) memset(&m_##name, value, sizeof(m_##name)) -#define copy(name) strncpy(m_##name.m_data, name, sizeof(m_##name.m_data)) +#define copy(name) strncpy(m_##name, name, sizeof(m_##name)) TProtocol::TProtocol(TObject *parent, u16 sub_version, int language, char *serial_number, char *access_key, char *password) : TTcpSocket(parent) { u8 thing[6]; @@ -105,15 +105,15 @@ TProtocol::TProtocol(TObject *parent, u16 sub_version, int language, char *seria { int i = 0; int j = 0; - m_smth.m_smth.m_data[i++] = 0; - m_smth.m_smth.m_data[i++] = 0; - m_smth.m_smth.m_data[i++] = thing[j++]; - m_smth.m_smth.m_data[i++] = thing[j++]; + m_smth.m_smth[i++] = 0; + m_smth.m_smth[i++] = 0; + m_smth.m_smth[i++] = thing[j++]; + m_smth.m_smth[i++] = thing[j++]; i = 0; - m_smth.m_smth1.m_data[i++] = thing[j++]; - m_smth.m_smth1.m_data[i++] = thing[j++]; - m_smth.m_smth1.m_data[i++] = thing[j++]; - m_smth.m_smth1.m_data[i++] = thing[j++]; + m_smth.m_smth1[i++] = thing[j++]; + m_smth.m_smth1[i++] = thing[j++]; + m_smth.m_smth1[i++] = thing[j++]; + m_smth.m_smth1[i++] = thing[j++]; } m_guildcard_tag = TPlyGuildCardTag(-1, -1); m_login_response_state = 0; @@ -124,7 +124,7 @@ TProtocol::TProtocol(TObject *parent, u16 sub_version, int language, char *seria m_entry_count = 0; m_unused = 0; m_lobby_list_count = 0; - m_unused5.m_data[0] = 0; + m_unused5[0] = 0; m_unused2 = 0; m_udp_disabled = 0; m_packet_offset = 0; @@ -142,49 +142,49 @@ TProtocol::TProtocol(TObject *parent, u16 sub_version, int language, char *seria fill_with(client_config, 0); - m_recv_handlers.m_data[0] = nullptr; - m_recv_handlers.m_data[1] = nullptr; - m_recv_handlers.m_data[2] = nullptr; - m_recv_handlers.m_data[3] = nullptr; - m_recv_handlers.m_data[4] = nullptr; - m_recv_handlers.m_data[6] = nullptr; - m_recv_handlers.m_data[7] = nullptr; - m_recv_handlers.m_data[8] = nullptr; - m_recv_handlers.m_data[10] = nullptr; - m_recv_handlers.m_data[11] = nullptr; - m_recv_handlers.m_data[12] = nullptr; - m_recv_handlers.m_data[13] = nullptr; - m_recv_handlers.m_data[14] = nullptr; - m_recv_handlers.m_data[36] = nullptr; - m_recv_handlers.m_data[15] = nullptr; - m_recv_handlers.m_data[16] = nullptr; - m_recv_handlers.m_data[17] = nullptr; - m_recv_handlers.m_data[18] = nullptr; - m_recv_handlers.m_data[19] = nullptr; - m_recv_handlers.m_data[20] = nullptr; - m_recv_handlers.m_data[22] = nullptr; - m_recv_handlers.m_data[23] = nullptr; - m_recv_handlers.m_data[25] = nullptr; - m_recv_handlers.m_data[26] = nullptr; - m_recv_handlers.m_data[33] = nullptr; - m_recv_handlers.m_data[34] = nullptr; - m_recv_handlers.m_data[35] = nullptr; - m_recv_handlers.m_data[36] = nullptr; - m_recv_handlers.m_data[37] = nullptr; - m_recv_handlers.m_data[38] = nullptr; - m_recv_handlers.m_data[41] = nullptr; - m_recv_handlers.m_data[28] = nullptr; - m_recv_handlers.m_data[43] = nullptr; - m_recv_handlers.m_data[42] = nullptr; - m_recv_handlers.m_data[44] = nullptr; - m_recv_handlers.m_data[45] = nullptr; - m_recv_handlers.m_data[46] = nullptr; - m_recv_handlers.m_data[49] = nullptr; - m_recv_handlers.m_data[50] = nullptr; - m_recv_handlers.m_data[51] = nullptr; - m_recv_handlers.m_data[32] = nullptr; - m_recv_handlers.m_data[47] = nullptr; - m_recv_handlers.m_data[48] = nullptr; + m_recv_handlers[0] = nullptr; + m_recv_handlers[1] = nullptr; + m_recv_handlers[2] = nullptr; + m_recv_handlers[3] = nullptr; + m_recv_handlers[4] = nullptr; + m_recv_handlers[6] = nullptr; + m_recv_handlers[7] = nullptr; + m_recv_handlers[8] = nullptr; + m_recv_handlers[10] = nullptr; + m_recv_handlers[11] = nullptr; + m_recv_handlers[12] = nullptr; + m_recv_handlers[13] = nullptr; + m_recv_handlers[14] = nullptr; + m_recv_handlers[36] = nullptr; + m_recv_handlers[15] = nullptr; + m_recv_handlers[16] = nullptr; + m_recv_handlers[17] = nullptr; + m_recv_handlers[18] = nullptr; + m_recv_handlers[19] = nullptr; + m_recv_handlers[20] = nullptr; + m_recv_handlers[22] = nullptr; + m_recv_handlers[23] = nullptr; + m_recv_handlers[25] = nullptr; + m_recv_handlers[26] = nullptr; + m_recv_handlers[33] = nullptr; + m_recv_handlers[34] = nullptr; + m_recv_handlers[35] = nullptr; + m_recv_handlers[36] = nullptr; + m_recv_handlers[37] = nullptr; + m_recv_handlers[38] = nullptr; + m_recv_handlers[41] = nullptr; + m_recv_handlers[28] = nullptr; + m_recv_handlers[43] = nullptr; + m_recv_handlers[42] = nullptr; + m_recv_handlers[44] = nullptr; + m_recv_handlers[45] = nullptr; + m_recv_handlers[46] = nullptr; + m_recv_handlers[49] = nullptr; + m_recv_handlers[50] = nullptr; + m_recv_handlers[51] = nullptr; + m_recv_handlers[32] = nullptr; + m_recv_handlers[47] = nullptr; + m_recv_handlers[48] = nullptr; } #undef fill_with diff --git a/src/pso/TSocket.cpp b/src/pso/TSocket.cpp index 3c5576f..d7d22a0 100644 --- a/src/pso/TSocket.cpp +++ b/src/pso/TSocket.cpp @@ -27,7 +27,11 @@ void TSocket::set_port(u32 port) { } void TSocket::set_ip_address(u32 addr) { - m_dst_addr.addr_bytes.fast_copy_reverse(addr); + u8 *ptr = reinterpret_cast(&addr); + m_dst_addr.addr_bytes[3] = ptr[0]; + m_dst_addr.addr_bytes[2] = ptr[1]; + m_dst_addr.addr_bytes[1] = ptr[2]; + m_dst_addr.addr_bytes[0] = ptr[3]; } int TSocket::resolve_domain(char *domain) { @@ -36,7 +40,10 @@ int TSocket::resolve_domain(char *domain) { } TSocket::TSocket(TObject *parent) : TObject(parent) { - m_dst_addr.addr_bytes.fast_fill_with(0); + m_dst_addr.addr_bytes[0] = 0; + m_dst_addr.addr_bytes[1] = 0; + m_dst_addr.addr_bytes[2] = 0; + m_dst_addr.addr_bytes[3] = 0; m_dst_port = 0; m_src_port = 0; m_sock_fd = -1; diff --git a/src/pso/TTcpSocket.cpp b/src/pso/TTcpSocket.cpp index 949f962..55bf360 100644 --- a/src/pso/TTcpSocket.cpp +++ b/src/pso/TTcpSocket.cpp @@ -66,10 +66,10 @@ TTcpSocket::~TTcpSocket() { } void TTcpSocket::recv() { - if (sock_fd() != -1) { - packet_buffer().fill(0); - set_buffer_cleared(true); - (int)tcp_receive(sock_fd(), notify, packet_buffer().size(), packet_buffer().data()); + if (m_sock_fd != -1) { + memset(m_packet_buffer, 0, sizeof(m_packet_buffer)); + m_buffer_cleared = true; + (int)tcp_receive(m_sock_fd, notify, sizeof(m_packet_buffer), m_packet_buffer); } } @@ -79,49 +79,49 @@ void TTcpSocket::notify(short size, short sock_fd) { if (socket != nullptr) { if (size > 0) { - socket->set_buffer_cleared(false); - socket->set_size(size); - socket->set_buffer_offset(0); + socket->m_buffer_cleared = false; + socket->m_size = size; + socket->m_buffer_offset = 0; sprintf(tmp_str, "Rcv:%d byte", size); socket->log(tmp_str); - if (socket->callback() != nullptr) { - socket->callback()(socket); + if (socket->m_callback != nullptr) { + socket->m_callback(socket); } } else { - socket->set_flags(1); + socket->m_is_invalid_packet |= 1; } } } short TTcpSocket::send(u8 *data, size_t size) { - if (sock_fd() != -1) { + if (m_sock_fd != -1) { if (!m_is_encrypted) { m_send_crypt.encrypt(data, size); } - if (is_invalid_packet() || !get_link_status()) { + if (m_is_invalid_packet || !get_link_status()) { return -1; } else { if (int status = stat()) { log(get_sock_status_name(status)); - set_flags(1); + m_is_invalid_packet |= 1; return 1; } else { - if (send_window() <= size) { - set_flags(1); + if (m_send_window <= size) { + m_is_invalid_packet |= 1; return 1; } else { - if (stat_val() < 0) { - set_flags(1); + if (m_stat_val < 0) { + m_is_invalid_packet |= 1; return 1; } else { struct send_buffs sb; sb.buff = data; sb.len = size; - set_unused(0); - int ret = tcp_send(sock_fd(), nullptr, 1, &sb); + m_unused = 0; + int ret = tcp_send(m_sock_fd, nullptr, 1, &sb); if (ret >= 1 || ret < -1) { - set_flags(1); + m_is_invalid_packet |= 1; log(get_sock_status_name(ret)); close(); return ret; @@ -136,28 +136,28 @@ short TTcpSocket::send(u8 *data, size_t size) { } short TTcpSocket::send(u8 *data) { - if (sock_fd() != -1) { - if (is_invalid_packet() || !get_link_status()) { + if (m_sock_fd != -1) { + if (m_is_invalid_packet || !get_link_status()) { return -1; } else { if (short status = stat()) { log(get_sock_status_name(status)); - set_flags(1); + m_is_invalid_packet |= 1; return 1; } else { - if (stat_val() < 0) { - set_flags(1); + if (m_stat_val < 0) { + m_is_invalid_packet |= 1; return 1; } else { s8 len = strlen(reinterpret_cast(data)); struct send_buffs sb; sb.buff = data; sb.len = len; - if (send_window() <= len) { - set_flags(1); + if (m_send_window <= len) { + m_is_invalid_packet |= 1; return 1; } else { - short ret = tcp_send(sock_fd(), nullptr, 1, &sb); + short ret = tcp_send(m_sock_fd, nullptr, 1, &sb); if (ret) { close(); } @@ -175,18 +175,18 @@ int TTcpSocket::test_connection() { for (int i = 0; i < 1800; ++i) { if (int status = stat()) { log(get_sock_status_name(status)); - set_flags(1); + m_is_invalid_packet |= 1; return 1; - } else if (send_window() <= 128) { - set_flags(1); + } else if (m_send_window <= 128) { + m_is_invalid_packet |= 1; return 1; - } else if (stat_val() < 0) { - set_flags(1); + } else if (m_stat_val < 0) { + m_is_invalid_packet |= 1; return 1; } else if (!get_link_status()) { - set_flags(1); + m_is_invalid_packet |= 1; return 1; - } else if (send_window() > 4095) { + } else if (m_send_window > 4095) { return 0; } else { main_task.some_empty_func(); @@ -198,45 +198,45 @@ int TTcpSocket::test_connection() { } } - set_flags(1); + m_is_invalid_packet |= 1; return 1; } void TTcpSocket::some_stub() {} short TTcpSocket::stat() { - if (sock_fd() != -1) { - return tcp_stat(sock_fd(), &stat_val(), nullptr, &send_window(), &recv_window()); + if (m_sock_fd != -1) { + return tcp_stat(m_sock_fd, &m_stat_val, nullptr, &m_send_window, &m_recv_window); } else { return 0; } } short TTcpSocket::close() { - if (sock_fd() != -1) { - (short)tcp_abort(sock_fd()); - (short)tcp_delete(sock_fd()); - tcp_socket_table[sock_fd()] = nullptr; - set_sock_fd(-1); + if (m_sock_fd != -1) { + (short)tcp_abort(m_sock_fd); + (short)tcp_delete(m_sock_fd); + tcp_socket_table[m_sock_fd] = nullptr; + m_sock_fd = -1; m_is_encrypted = 0; - set_size(0); - set_buffer_offset(0); - set_buffer_cleared(true); + m_size = 0; + m_buffer_offset = 0; + m_buffer_cleared = true; } - return sock_fd(); + return m_sock_fd; } short TTcpSocket::open() { - set_sock_fd(-1); + m_sock_fd = -1; m_is_encrypted = 0; - set_size(0); - set_buffer_offset(0); - set_buffer_cleared(true); - set_unused(0); - set_sock_fd(tcp_create()); + m_size = 0; + m_buffer_offset = 0; + m_buffer_cleared = true; + m_unused = 0; + m_sock_fd = tcp_create(); - if (sock_fd() < 0) { - log(get_sock_status_name(sock_fd())); + if (m_sock_fd < 0) { + log(get_sock_status_name(m_sock_fd)); return -1; } else { struct at_ip_option connect_option; @@ -245,23 +245,23 @@ short TTcpSocket::open() { u32 opt = 1; - tcp_get_opt(sock_fd(), 0x2001, &opt); + tcp_get_opt(m_sock_fd, 0x2001, &opt); bind_addr.type = 4; bind_addr.ip46.ip4 = 0; - tcp_bind(sock_fd(), &bind_addr, src_port()); + tcp_bind(m_sock_fd, &bind_addr, m_src_port); connect_addr.type = 4; - connect_addr.ip46.ip4 = dst_addr().addr; + connect_addr.ip46.ip4 = m_dst_addr.addr; connect_option.type = 4; connect_option.ip46.ip4.ttl = 120; connect_option.ip46.ip4.svctype = 0; connect_option.ip46.ip4.df_flag = 0; - if (tcp_connect(sock_fd(), &connect_addr, dst_port(), &connect_option)) { - log(get_sock_status_name(sock_fd())); + if (tcp_connect(m_sock_fd, &connect_addr, m_dst_port, &connect_option)) { + log(get_sock_status_name(m_sock_fd)); return -1; } else { for (;;) { @@ -270,11 +270,11 @@ short TTcpSocket::open() { if (short status = stat()) { log(get_sock_status_name(status)); return -2; - } else if (stat_val() < 0) { + } else if (m_stat_val < 0) { return -2; } else { some_stub(); - if (stat_val() < 4) { + if (m_stat_val < 4) { if (!get_link_status()) { return -3; } else if (func_801a5d1c()) { @@ -288,8 +288,8 @@ short TTcpSocket::open() { render_tick(); } } else { - tcp_socket_table[sock_fd()] = this; - return sock_fd(); + tcp_socket_table[m_sock_fd] = this; + return m_sock_fd; } } } diff --git a/src/pso/protocol.cpp b/src/pso/protocol.cpp index 280b105..09ef213 100644 --- a/src/pso/protocol.cpp +++ b/src/pso/protocol.cpp @@ -3,7 +3,3 @@ void bswap_32(u32 *val) {} void bswap_16(u16 *val) {} - -void packet_header::bswap() { - bswap_16(&size); -} -- cgit v1.2.3-13-gbd6f