diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-01-20 15:19:33 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-01-20 15:19:33 +0000 |
| commit | 438dfeb0ca817613bcffe7a3b4dec028bc64925d (patch) | |
| tree | 2f234b870bba6e0e8199557a98d62ccc3db4f118 /src | |
| parent | 805a74c1e4e487c1fabafc57858cd591e6dfed9d (diff) | |
| download | zcatch-438dfeb0ca817613bcffe7a3b4dec028bc64925d.tar.gz zcatch-438dfeb0ca817613bcffe7a3b4dec028bc64925d.zip | |
fixed bug when switching fast from internet and lan tabs
Diffstat (limited to 'src')
| -rw-r--r-- | src/engine/client/ec_client.c | 72 | ||||
| -rw-r--r-- | src/engine/client/ec_gfx.c | 24 | ||||
| -rw-r--r-- | src/engine/client/ec_srvbrowse.c | 5 | ||||
| -rw-r--r-- | src/engine/e_if_client.h | 13 | ||||
| -rw-r--r-- | src/engine/server/es_server.c | 14 | ||||
| -rw-r--r-- | src/mastersrv/mastersrv.h | 3 |
6 files changed, 100 insertions, 31 deletions
diff --git a/src/engine/client/ec_client.c b/src/engine/client/ec_client.c index 1732b02b..b1399645 100644 --- a/src/engine/client/ec_client.c +++ b/src/engine/client/ec_client.c @@ -608,36 +608,56 @@ static void client_process_packet(NETPACKET *packet) } } - if(packet->data_size >= (int)sizeof(SERVERBROWSE_INFO) && - memcmp(packet->data, SERVERBROWSE_INFO, sizeof(SERVERBROWSE_INFO)) == 0) { - /* we got ze info */ - UNPACKER up; - SERVER_INFO info = {0}; - int i; - - unpacker_reset(&up, (unsigned char*)packet->data+sizeof(SERVERBROWSE_INFO), packet->data_size-sizeof(SERVERBROWSE_INFO)); - - strncpy(info.version, unpacker_get_string(&up), 32); - strncpy(info.name, unpacker_get_string(&up), 64); - strncpy(info.map, unpacker_get_string(&up), 32); - info.game_type = atol(unpacker_get_string(&up)); - info.flags = atol(unpacker_get_string(&up)); - info.progression = atol(unpacker_get_string(&up)); - info.num_players = atol(unpacker_get_string(&up)); - info.max_players = atol(unpacker_get_string(&up)); - sprintf(info.address, "%d.%d.%d.%d:%d", - packet->address.ip[0], packet->address.ip[1], packet->address.ip[2], - packet->address.ip[3], packet->address.port); + int got_info_packet = 0; - for(i = 0; i < info.num_players; i++) + if(client_serverbrowse_lan()) { - strncpy(info.player_names[i], unpacker_get_string(&up), 48); - info.player_scores[i] = atol(unpacker_get_string(&up)); + if(packet->data_size >= (int)sizeof(SERVERBROWSE_INFO_LAN) && + memcmp(packet->data, SERVERBROWSE_INFO_LAN, sizeof(SERVERBROWSE_INFO_LAN)) == 0) + { + got_info_packet = 1; + } + } + else + { + if(packet->data_size >= (int)sizeof(SERVERBROWSE_INFO) && + memcmp(packet->data, SERVERBROWSE_INFO, sizeof(SERVERBROWSE_INFO)) == 0) + { + got_info_packet = 1; + } + } + + if(got_info_packet) + { + /* we got ze info */ + UNPACKER up; + SERVER_INFO info = {0}; + int i; + + unpacker_reset(&up, (unsigned char*)packet->data+sizeof(SERVERBROWSE_INFO), packet->data_size-sizeof(SERVERBROWSE_INFO)); + + strncpy(info.version, unpacker_get_string(&up), 32); + strncpy(info.name, unpacker_get_string(&up), 64); + strncpy(info.map, unpacker_get_string(&up), 32); + info.game_type = atol(unpacker_get_string(&up)); + info.flags = atol(unpacker_get_string(&up)); + info.progression = atol(unpacker_get_string(&up)); + info.num_players = atol(unpacker_get_string(&up)); + info.max_players = atol(unpacker_get_string(&up)); + sprintf(info.address, "%d.%d.%d.%d:%d", + packet->address.ip[0], packet->address.ip[1], packet->address.ip[2], + packet->address.ip[3], packet->address.port); + + for(i = 0; i < info.num_players; i++) + { + strncpy(info.player_names[i], unpacker_get_string(&up), 48); + info.player_scores[i] = atol(unpacker_get_string(&up)); + } + + /* TODO: unpack players aswell */ + client_serverbrowse_set(&packet->address, 0, &info); } - - /* TODO: unpack players aswell */ - client_serverbrowse_set(&packet->address, 0, &info); } } else diff --git a/src/engine/client/ec_gfx.c b/src/engine/client/ec_gfx.c index 505c42f7..101b0279 100644 --- a/src/engine/client/ec_gfx.c +++ b/src/engine/client/ec_gfx.c @@ -537,6 +537,30 @@ void gfx_swap() /*unsigned char *temp_row = pixel_data+w*h*3;*/ glReadPixels(0,0, w, h, GL_RGB, GL_UNSIGNED_BYTE, pixel_data); + + { + IOHANDLE io; + char filename[128]; + char header[18] = {0}; + sprintf(filename, "capture/frame%04d.tga", record); + record++; + + io = io_open(filename, IOFLAG_WRITE); + + header[2] = 2; /* rgb */ + header[12] = w&255; /* width */ + header[13] = w>>8; + header[14] = h&255; /* height */ + header[15] = h>>8; + header[16] = 24; + + io_write(io, header, sizeof(header)); + io_write(io, pixel_data, w*h*3); + + io_close(io); + } + + /* clean up */ mem_free(pixel_data); diff --git a/src/engine/client/ec_srvbrowse.c b/src/engine/client/ec_srvbrowse.c index 7459657f..74d09b8d 100644 --- a/src/engine/client/ec_srvbrowse.c +++ b/src/engine/client/ec_srvbrowse.c @@ -50,6 +50,7 @@ static char filterstring[64] = {0}; static int serverlist_lan = 1; +int client_serverbrowse_lan() { return serverlist_lan; } int client_serverbrowse_num() { return num_servers; } SERVER_INFO *client_serverbrowse_get(int index) @@ -331,8 +332,8 @@ void client_serverbrowse_refresh(int lan) packet.address.ip[3] = 255; packet.address.port = 8303; packet.flags = PACKETFLAG_CONNLESS; - packet.data_size = sizeof(SERVERBROWSE_GETINFO); - packet.data = SERVERBROWSE_GETINFO; + packet.data_size = sizeof(SERVERBROWSE_GETINFO_LAN); + packet.data = SERVERBROWSE_GETINFO_LAN; netclient_send(net, &packet); if(config.debug) diff --git a/src/engine/e_if_client.h b/src/engine/e_if_client.h index ea29a17c..4f6393ce 100644 --- a/src/engine/e_if_client.h +++ b/src/engine/e_if_client.h @@ -256,6 +256,19 @@ int client_serverbrowse_num_requests(); */ void client_serverbrowse_update(); +/* + Function: client_serverbrowse_lan + TODO + + Arguments: + arg1 - desc + + Returns: + + See Also: + <other_func> +*/ +int client_serverbrowse_lan(); /********************************************************************************** Group: Actions diff --git a/src/engine/server/es_server.c b/src/engine/server/es_server.c index 5c1c67fb..d781c8da 100644 --- a/src/engine/server/es_server.c +++ b/src/engine/server/es_server.c @@ -662,7 +662,7 @@ static void server_process_client_packet(NETPACKET *packet) } } -static void server_send_serverinfo(NETADDR4 *addr) +static void server_send_serverinfo(NETADDR4 *addr, int lan) { NETPACKET packet; PACKER p; @@ -678,7 +678,10 @@ static void server_send_serverinfo(NETADDR4 *addr) } packer_reset(&p); - packer_add_raw(&p, SERVERBROWSE_INFO, sizeof(SERVERBROWSE_INFO)); + if(lan) + packer_add_raw(&p, SERVERBROWSE_INFO_LAN, sizeof(SERVERBROWSE_INFO_LAN)); + else + packer_add_raw(&p, SERVERBROWSE_INFO, sizeof(SERVERBROWSE_INFO)); packer_add_string(&p, mods_version(), 32); packer_add_string(&p, config.sv_name, 64); packer_add_string(&p, config.sv_map, 32); @@ -768,7 +771,12 @@ static void server_pump_network() if(packet.data_size == sizeof(SERVERBROWSE_GETINFO) && memcmp(packet.data, SERVERBROWSE_GETINFO, sizeof(SERVERBROWSE_GETINFO)) == 0) { - server_send_serverinfo(&packet.address); + server_send_serverinfo(&packet.address, 0); + } + else if(packet.data_size == sizeof(SERVERBROWSE_GETINFO_LAN) && + memcmp(packet.data, SERVERBROWSE_GETINFO_LAN, sizeof(SERVERBROWSE_GETINFO_LAN)) == 0) + { + server_send_serverinfo(&packet.address, 1); } else if(packet.data_size == sizeof(SERVERBROWSE_FWCHECK) && memcmp(packet.data, SERVERBROWSE_FWCHECK, sizeof(SERVERBROWSE_FWCHECK)) == 0) diff --git a/src/mastersrv/mastersrv.h b/src/mastersrv/mastersrv.h index 9fd074be..1de5b9ef 100644 --- a/src/mastersrv/mastersrv.h +++ b/src/mastersrv/mastersrv.h @@ -13,6 +13,9 @@ static const unsigned char SERVERBROWSE_LIST[] = {255, 255, 255, 255, 'l', 'i', static const unsigned char SERVERBROWSE_GETINFO[] = {255, 255, 255, 255, 'g', 'i', 'e', 'f'}; static const unsigned char SERVERBROWSE_INFO[] = {255, 255, 255, 255, 'i', 'n', 'f', 'o'}; +static const unsigned char SERVERBROWSE_GETINFO_LAN[] = {255, 255, 255, 255, 'g', 'i', 'e', 'L'}; +static const unsigned char SERVERBROWSE_INFO_LAN[] = {255, 255, 255, 255, 'i', 'n', 'f', 'L'}; + static const unsigned char SERVERBROWSE_FWCHECK[] = {255, 255, 255, 255, 'f', 'w', '?', '?'}; static const unsigned char SERVERBROWSE_FWRESPONSE[] = {255, 255, 255, 255, 'f', 'w', '!', '!'}; static const unsigned char SERVERBROWSE_FWOK[] = {255, 255, 255, 255, 'f', 'w', 'o', 'k'}; |