Skip to content

Commit 546fed9

Browse files
authored
fix(hexen2): player details (#115)
Fix Hexen 2 player details by enabling next_player_info flow. Also: * Extract code send code into send_packet_raw and use in all send methods. This enables easy conversion of callers using send(...) to use a version which supports packet debugging. Fixes #114
1 parent fab3912 commit 546fed9

File tree

3 files changed

+35
-50
lines changed

3 files changed

+35
-50
lines changed

qserver.c

Lines changed: 18 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,9 @@
2626
query_status_t
2727
qserver_send_initial(struct qserver *server, const char *data, size_t len)
2828
{
29-
int status = INPROGRESS;
29+
query_status_t status;
3030

31-
if (data) {
32-
int ret;
33-
debug(2, "[%s] send", server->type->type_prefix);
34-
if (4 <= get_debug_level()) {
35-
output_packet(server, data, len, 1);
36-
}
37-
38-
if (server->flags & FLAG_BROADCAST) {
39-
ret = send_broadcast(server, data, len);
40-
} else {
41-
ret = send(server->fd, data, len, 0);
42-
}
43-
44-
if (ret == SOCKET_ERROR) {
45-
send_error(server, ret);
46-
status = SYS_ERROR;
47-
}
48-
}
31+
status = send_packet_raw(server, data, len);
4932

5033
if ((server->retry1 == n_retries) || server->flags & FLAG_BROADCAST) {
5134
gettimeofday(&server->packet_time1, NULL);
@@ -59,25 +42,12 @@ qserver_send_initial(struct qserver *server, const char *data, size_t len)
5942
return (status);
6043
}
6144

62-
6345
query_status_t
6446
qserver_send(struct qserver *server, const char *data, size_t len)
6547
{
66-
int status = INPROGRESS;
48+
query_status_t status;
6749

68-
if (data) {
69-
int ret;
70-
if (server->flags & FLAG_BROADCAST) {
71-
ret = send_broadcast(server, data, len);
72-
} else {
73-
ret = send(server->fd, data, len, 0);
74-
}
75-
76-
if (ret == SOCKET_ERROR) {
77-
send_error(server, ret);
78-
status = SYS_ERROR;
79-
}
80-
}
50+
status = send_packet_raw(server, data, len);
8151

8252
server->retry1 = n_retries - 1;
8353
gettimeofday(&server->packet_time1, NULL);
@@ -87,7 +57,6 @@ qserver_send(struct qserver *server, const char *data, size_t len)
8757
return (status);
8858
}
8959

90-
9160
int
9261
send_broadcast(struct qserver *server, const char *pkt, size_t pktlen)
9362
{
@@ -105,7 +74,6 @@ send_broadcast(struct qserver *server, const char *pkt, size_t pktlen)
10574
return (sendto(server->fd, (const char *)pkt, pktlen, 0, (struct sockaddr *)&addr, sizeof(addr)));
10675
}
10776

108-
10977
int
11078
register_send(struct qserver *server)
11179
{
@@ -124,9 +92,8 @@ register_send(struct qserver *server)
12492
return (INPROGRESS);
12593
}
12694

127-
12895
query_status_t
129-
send_packet(struct qserver *server, const char *data, size_t len)
96+
send_packet_raw(struct qserver *server, const char *data, size_t len)
13097
{
13198
debug(2, "[%s] send", server->type->type_prefix);
13299
if (4 <= get_debug_level()) {
@@ -146,11 +113,21 @@ send_packet(struct qserver *server, const char *data, size_t len)
146113
}
147114
}
148115

149-
register_send(server);
150-
151116
return (INPROGRESS);
152117
}
153118

119+
query_status_t
120+
send_packet(struct qserver *server, const char *data, size_t len)
121+
{
122+
query_status_t rc;
123+
124+
rc = send_packet_raw(server, data, len);
125+
if (rc == SYS_ERROR) {
126+
return (rc);
127+
}
128+
129+
return (register_send(server));
130+
}
154131

155132
query_status_t
156133
send_error(struct qserver *server, int rc)
@@ -164,6 +141,6 @@ send_error(struct qserver *server, int rc)
164141
(ipaddr >> 8) & 0xff,
165142
ipaddr & 0xff,
166143
errstr
167-
);
144+
);
168145
return (SYS_ERROR);
169146
}

qserver.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,11 @@ int register_send(struct qserver *server);
219219
*/
220220
query_status_t send_packet(struct qserver *server, const char *data, size_t len);
221221

222+
/**
223+
* Sends a packet to the server either direct or via broadcast.
224+
*/
225+
query_status_t send_packet_raw(struct qserver *server, const char *data, size_t len);
226+
222227
/**
223228
* Logs the error from a socket send
224229
*/

qstat.c

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3206,9 +3206,9 @@ do_work(void)
32063206
}
32073207

32083208
#ifdef ENABLE_DUMP
3209-
if (do_dump) {
3210-
dump_packet(pkt, pktlen);
3211-
}
3209+
if (do_dump) {
3210+
dump_packet(pkt, pktlen);
3211+
}
32123212
#endif
32133213
if (server->flags & FLAG_BROADCAST) {
32143214
struct qserver *broadcast = server;
@@ -5581,7 +5581,7 @@ send_rule_request_packet(struct qserver *server)
55815581
query_status_t
55825582
send_player_request_packet(struct qserver *server)
55835583
{
5584-
int rc;
5584+
query_status_t rc;
55855585

55865586
debug(3, "send_player_request_packet %p", server);
55875587

@@ -5605,12 +5605,15 @@ send_player_request_packet(struct qserver *server)
56055605
return (0);
56065606
}
56075607

5608-
if (server->type->id == Q_SERVER) {
5608+
switch (server->type->id) {
5609+
case Q_SERVER:
5610+
case H2_SERVER:
56095611
q_player.data[0] = server->next_player_info;
56105612
}
5611-
rc = send(server->fd, (const char *)server->type->player_packet, server->type->player_len, 0);
5612-
if (rc == SOCKET_ERROR) {
5613-
return (send_error(server, rc));
5613+
5614+
rc = send_packet_raw(server, (const char *)server->type->player_packet, server->type->player_len);
5615+
if (rc < INPROGRESS) {
5616+
return (rc);
56145617
}
56155618

56165619
setup_retry:
@@ -5623,7 +5626,7 @@ send_player_request_packet(struct qserver *server)
56235626
server->retry2--;
56245627
server->n_packets++;
56255628

5626-
return (1);
5629+
return (DONE_AUTO);
56275630
}
56285631

56295632

0 commit comments

Comments
 (0)