diff options
Diffstat (limited to 'src/i_net.c')
-rw-r--r-- | src/i_net.c | 364 |
1 files changed, 0 insertions, 364 deletions
diff --git a/src/i_net.c b/src/i_net.c deleted file mode 100644 index a79ec445..00000000 --- a/src/i_net.c +++ /dev/null @@ -1,364 +0,0 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id: i_net.c 58 2005-08-30 22:15:11Z fraggle $ -// -// Copyright(C) 1993-1996 Id Software, Inc. -// Copyright(C) 2005 Simon Howard -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -// 02111-1307, USA. -// -// $Log$ -// Revision 1.7 2005/08/30 22:15:11 fraggle -// More Windows fixes -// -// Revision 1.6 2005/08/30 22:11:10 fraggle -// Windows fixes -// -// Revision 1.5 2005/08/12 16:54:15 fraggle -// Port network code to use SDL_net -// -// Revision 1.4 2005/08/04 18:42:15 fraggle -// Silence compiler warnings -// -// Revision 1.3 2005/07/23 18:56:07 fraggle -// Remove unneccessary pragmas -// -// Revision 1.2 2005/07/23 16:44:55 fraggle -// Update copyright to GNU GPL -// -// Revision 1.1.1.1 2005/07/23 16:20:32 fraggle -// Initial import -// -// -// DESCRIPTION: -// -//----------------------------------------------------------------------------- - -static const char -rcsid[] = "$Id: i_net.c 58 2005-08-30 22:15:11Z fraggle $"; - -#include <stdlib.h> -#include <string.h> -#include <stdio.h> - -#include <SDL_net.h> - -#include "i_system.h" -#include "d_event.h" -#include "d_net.h" -#include "m_argv.h" - -#include "doomstat.h" - -#include "i_net.h" - - - - - -void NetSend (void); -boolean NetListen (void); - - -// -// NETWORKING -// - -int DOOMPORT = 8626; - -#ifndef NO_SDL_NET - -static UDPsocket udpsocket; -static UDPpacket *packet; - -static IPaddress sendaddress[MAXNETNODES]; - -void (*netget) (void); -void (*netsend) (void); - - -unsigned short host_to_net16(unsigned int value) -{ - union - { - unsigned short s; - char b[2]; - } data; - - SDLNet_Write16(value, data.b); - - return data.s; -} - -unsigned short net_to_host16(unsigned int value) -{ - unsigned short s = value; - - return SDLNet_Read16(&s); -} - -unsigned long host_to_net32(unsigned int value) -{ - union - { - unsigned long l; - char b[4]; - } data; - - SDLNet_Write32(value, data.b); - - return data.l; -} - -unsigned long net_to_host32(unsigned int value) -{ - union - { - unsigned long l; - char b[4]; - } data; - - data.l = value; - - return SDLNet_Read32(data.b); -} - - -// -// PacketSend -// -void PacketSend (void) -{ - int c; - doomdata_t *sw; - - sw = (doomdata_t *) packet->data; - - // byte swap - sw->checksum = host_to_net32(netbuffer->checksum); - sw->player = netbuffer->player; - sw->retransmitfrom = netbuffer->retransmitfrom; - sw->starttic = netbuffer->starttic; - sw->numtics = netbuffer->numtics; - - for (c=0 ; c< netbuffer->numtics ; c++) - { - sw->cmds[c].forwardmove = netbuffer->cmds[c].forwardmove; - sw->cmds[c].sidemove = netbuffer->cmds[c].sidemove; - sw->cmds[c].angleturn = host_to_net16(netbuffer->cmds[c].angleturn); - sw->cmds[c].consistancy = host_to_net16(netbuffer->cmds[c].consistancy); - sw->cmds[c].chatchar = netbuffer->cmds[c].chatchar; - sw->cmds[c].buttons = netbuffer->cmds[c].buttons; - } - - packet->len = doomcom->datalength; - packet->address = sendaddress[doomcom->remotenode]; - - if (!SDLNet_UDP_Send(udpsocket, -1, packet)) - { - I_Error("Error sending packet: %s", SDLNet_GetError()); - } -} - - -// -// PacketGet -// -void PacketGet (void) -{ - int i; - int c; - doomdata_t *sw; - int packets_read; - - packets_read = SDLNet_UDP_Recv(udpsocket, packet); - - if (packets_read < 0) - { - I_Error("Error reading packet: %s\n", SDLNet_GetError()); - } - - if (packets_read == 0) - { - doomcom->remotenode = -1; - return; - } - - // find remote node number - for (i=0 ; i<doomcom->numnodes ; i++) - if (packet->address.host == sendaddress[i].host - && packet->address.port == sendaddress[i].port) - break; - - if (i == doomcom->numnodes) - { - // packet is not from one of the players (new game broadcast) - doomcom->remotenode = -1; // no packet - return; - } - - doomcom->remotenode = i; // good packet from a game player - doomcom->datalength = packet->len; - - sw = (doomdata_t *) packet->data; - - // byte swap - netbuffer->checksum = net_to_host32(sw->checksum); - netbuffer->player = sw->player; - netbuffer->retransmitfrom = sw->retransmitfrom; - netbuffer->starttic = sw->starttic; - netbuffer->numtics = sw->numtics; - - for (c=0 ; c< netbuffer->numtics ; c++) - { - netbuffer->cmds[c].forwardmove = sw->cmds[c].forwardmove; - netbuffer->cmds[c].sidemove = sw->cmds[c].sidemove; - netbuffer->cmds[c].angleturn = net_to_host16(sw->cmds[c].angleturn); - netbuffer->cmds[c].consistancy = net_to_host16(sw->cmds[c].consistancy); - netbuffer->cmds[c].chatchar = sw->cmds[c].chatchar; - netbuffer->cmds[c].buttons = sw->cmds[c].buttons; - } -} - - -// -// I_InitNetwork -// -void I_InitNetwork (void) -{ - int i; - int p; - - doomcom = malloc (sizeof (*doomcom) ); - memset (doomcom, 0, sizeof(*doomcom) ); - - // set up for network - i = M_CheckParm ("-dup"); - if (i && i< myargc-1) - { - doomcom->ticdup = myargv[i+1][0]-'0'; - if (doomcom->ticdup < 1) - doomcom->ticdup = 1; - if (doomcom->ticdup > 9) - doomcom->ticdup = 9; - } - else - doomcom-> ticdup = 1; - - if (M_CheckParm ("-extratic")) - doomcom-> extratics = 1; - else - doomcom-> extratics = 0; - - p = M_CheckParm ("-port"); - if (p && p<myargc-1) - { - DOOMPORT = atoi (myargv[p+1]); - printf ("using alternate port %i\n",DOOMPORT); - } - - // parse network game options, - // -net <consoleplayer> <host> <host> ... - i = M_CheckParm ("-net"); - if (!i) - { - // single player game - netgame = false; - doomcom->id = DOOMCOM_ID; - doomcom->numplayers = doomcom->numnodes = 1; - doomcom->deathmatch = false; - doomcom->consoleplayer = 0; - return; - } - - netsend = PacketSend; - netget = PacketGet; - netgame = true; - - // parse player number and host list - doomcom->consoleplayer = myargv[i+1][0]-'1'; - - doomcom->numnodes = 1; // this node for sure - - SDLNet_Init(); - - i++; - while (++i < myargc && myargv[i][0] != '-') - { - if (SDLNet_ResolveHost(&sendaddress[doomcom->numnodes], - myargv[i], DOOMPORT)) - { - I_Error("Unable to resolve %s", myargv[i]); - } - - doomcom->numnodes++; - } - - doomcom->id = DOOMCOM_ID; - doomcom->numplayers = doomcom->numnodes; - - // build message to receive - - udpsocket = SDLNet_UDP_Open(DOOMPORT); - - packet = SDLNet_AllocPacket(5000); -} - - -void I_NetCmd (void) -{ - if (doomcom->command == CMD_SEND) - { - netsend (); - } - else if (doomcom->command == CMD_GET) - { - netget (); - } - else - I_Error ("Bad net cmd: %i\n",doomcom->command); -} - -#else - -void I_NetCmd(void) -{ -} - - -void I_InitNetwork (void) -{ - doomcom = malloc (sizeof (*doomcom) ); - memset (doomcom, 0, sizeof(*doomcom) ); - - doomcom->ticdup = 1; - doomcom->extratics = 0; - - - // single player game - netgame = false; - doomcom->id = DOOMCOM_ID; - doomcom->numplayers = doomcom->numnodes = 1; - doomcom->deathmatch = false; - doomcom->consoleplayer = 0; - return; -} - - -#endif /* #ifndef NO_SDL_NET */ - - |