Skip to content

Commit 632dd98

Browse files
add CTOS_EXTERNAL_ADDRESS (#2832)
1 parent e7ebb75 commit 632dd98

3 files changed

Lines changed: 27 additions & 0 deletions

File tree

gframe/duelclient.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,15 @@ void DuelClient::ClientRead(bufferevent* bev, void* ctx) {
118118
void DuelClient::ClientEvent(bufferevent* bev, short events, void* ctx) {
119119
if (events & BEV_EVENT_CONNECTED) {
120120
bool create_game = (intptr_t)ctx;
121+
if(!create_game) {
122+
uint16_t hostname_buf[LEN_HOSTNAME];
123+
auto hostname_len = BufferIO::CopyCharArray(mainGame->ebJoinHost->getText(), hostname_buf);
124+
auto hostname_msglen = (hostname_len + 1) * sizeof(uint16_t);
125+
char buf[LEN_HOSTNAME * sizeof(uint16_t) + sizeof(uint32_t)];
126+
memset(buf, 0, sizeof(uint32_t)); // real_ip
127+
memcpy(buf + sizeof(uint32_t), hostname_buf, hostname_msglen);
128+
SendBufferToServer(CTOS_EXTERNAL_ADDRESS, buf, hostname_msglen + sizeof(uint32_t));
129+
}
121130
CTOS_PlayerInfo cspi;
122131
BufferIO::CopyCharArray(mainGame->ebNickName->getText(), cspi.name);
123132
SendPacketToServer(CTOS_PLAYER_INFO, cspi);

gframe/netserver.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,15 @@ void NetServer::HandleCTOSPacket(DuelPlayer* dp, unsigned char* data, int len) {
257257
BufferIO::CopyCharArray(pkt->name, dp->name);
258258
break;
259259
}
260+
case CTOS_EXTERNAL_ADDRESS: {
261+
// for other server & reverse proxy use only
262+
/*
263+
wchar_t hostname[LEN_HOSTNAME];
264+
uint32_t real_ip = ntohl(BufferIO::ReadInt32(pdata));
265+
BufferIO::CopyCharArray((uint16_t*)pdata, hostname);
266+
*/
267+
break;
268+
}
260269
case CTOS_CREATE_GAME: {
261270
if(dp->game || duel_mode)
262271
return;

gframe/network.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,14 @@ struct CTOS_Kick {
103103
check_trivially_copyable(CTOS_Kick);
104104
static_assert(sizeof(CTOS_Kick) == 1, "size mismatch: CTOS_Kick");
105105

106+
/*
107+
* CTOS_ExternalAddress
108+
* uint32_t real_ip; (IPv4 address, BE, alway 0 in normal client)
109+
* uint16_t hostname[256]; (UTF-16 string)
110+
*/
111+
112+
constexpr int LEN_HOSTNAME = 256;
113+
106114
// STOC
107115
struct STOC_ErrorMsg {
108116
uint8_t msg{};
@@ -258,6 +266,7 @@ class DuelMode {
258266
#define CTOS_SURRENDER 0x14 // no data
259267
#define CTOS_TIME_CONFIRM 0x15 // no data
260268
#define CTOS_CHAT 0x16 // uint16_t array
269+
#define CTOS_EXTERNAL_ADDRESS 0x17 // CTOS_ExternalAddress
261270
#define CTOS_HS_TODUELIST 0x20 // no data
262271
#define CTOS_HS_TOOBSERVER 0x21 // no data
263272
#define CTOS_HS_READY 0x22 // no data

0 commit comments

Comments
 (0)