summaryrefslogtreecommitdiff
path: root/include/pso/TProtocol.h
blob: c4b803df51d66c01079282fe65653fe8d6329ff2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#ifndef TPROTOCOL_H
#define TPROTOCOL_H

#include <global_types.h>
#include <string.h>
#include <pso/macros.h>
#include <pso/forward.h>
#include <pso/protocol.h>
#include <pso/PSOV3EncryptionTCP.h>
#include <pso/TArray.h>
#include <pso/TMainTask.h>
#include <pso/TMenuList.h>
#include <pso/TObject.h>
#include <pso/TPlyGuildCardTag.h>
#include <pso/TSocket.h>
#include <pso/TTcpSocket.h>


class TPlySmth {
	TArray<u8, 4> m_smth;
	TArray<u8, 4> m_smth1;
};

struct packet {
	packet_header header;
	TArray<u8, 0x7fbc> data;
};

typedef void (*recv_packet_handler)(packet &pkt);

class TProtocol : public TTcpSocket {
private:
	TPlySmth m_smth;
	TPlyGuildCardTag m_guildcard_tag;
	u16 sub_version;
	int m_login_response_state;
	int m_connected;
	int m_joined_game;
	int m_has_meet_user_settings;
	int m_buffer_ready;
	int m_entry_count;
	int m_unused;
	int m_lobby_list_count;
	int m_unused2;
	int m_udp_disabled;
	int m_language;
	TArray<u8, 80> m_unused3;
	TPlyCharData m_character_data;
	u32 m_unused4;
	TArray<TMenuListEntry<GameMenuEntry>, 64> m_game_entries;
	TArray<TMenuListEntry<GameMenuEntry>, 64> m_game_entries2;
	TArray<TMenuListEntry<LobbyListEntry>, 16> m_lobby_entries;
	TArray<TMenuListEntry<QuestMenuEntry>, 30> m_quest_entries;
	TArray<u8, 128> m_unused5;
	TArray<char, 17> m_serial_number3;
	TArray<char, 17> m_password2;
	TArray<char, 48> m_serial_number;
	TArray<char, 48> m_access_key;
	TArray<char, 64> m_password;
	TArray<char, 16> m_player_name;
	TArray<char, 17> m_serial_number2;
	TArray<char, 17> m_access_key2;
	TPlyClientConfig m_client_config;
	int m_packet_offset;
	int m_packet_size;
	packet m_packet;
	TArray<recv_packet_handler, 52> m_recv_handlers;
public:
	TProtocol(TObject *parent = nullptr, u16 sub_version, int language, char *serial_number, char *access_key, char *password);
	virtual ~TProtocol();

	virtual run_task();
	virtual send(u8 *data, size_t size);

	int handle_command(packet *pkt);

	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, buffer_ready);
	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_ARRAY(TMenuListEntry<GameListEntry>, game_entries, 64);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(TMenuListEntry<GameListEntry>, game_entries2, 64);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(TMenuListEntry<LobbyListEntry>, lobby_entries, 16);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(TMenuListEntry<QuestMenuEntry>, quest_entries, 30);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(u8, unused5, 128);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(char, m_serial_number3, 17);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(char, m_password2, 17);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(char, m_serial_number, 48);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(char, m_access_key, 48);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(char, m_password, 64);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(char, m_player_name, 16);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(char, m_serial_number2, 17);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(char, m_access_key2, 17);
	PRIVATE_MEMBER_ACCESSORS(int, packet_offset);
	PRIVATE_MEMBER_ACCESSORS(int, packet_size);
	PRIVATE_MEMBER_ACCESSORS(packet, packet);
	PRIVATE_MEMBER_ACCESSORS_ARRAY(recv_packet_handler, recv_handlers, 52);
};

#endif