about summary refs log tree commit diff
path: root/src/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/client/ec_client.c72
-rw-r--r--src/engine/client/ec_gfx.c24
-rw-r--r--src/engine/client/ec_srvbrowse.c5
-rw-r--r--src/engine/e_if_client.h13
-rw-r--r--src/engine/server/es_server.c14
5 files changed, 97 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)