Initial Source Code commit
Initial commit of original Tiberian Dawn and Red Alert source code converted to build as DLLs, and compatible with the release version of Command & Conquer Remastered.
This commit is contained in:
parent
ea8ecc76fa
commit
03416d24e1
1038 changed files with 629779 additions and 0 deletions
197
REDALERT/TCPIP.H
Normal file
197
REDALERT/TCPIP.H
Normal file
|
@ -0,0 +1,197 @@
|
|||
//
|
||||
// Copyright 2020 Electronic Arts Inc.
|
||||
//
|
||||
// TiberianDawn.DLL and RedAlert.dll and corresponding source code 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 3 of the License, or (at your option) any later version.
|
||||
|
||||
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
|
||||
// in the hope that it will be useful, but with permitted additional restrictions
|
||||
// under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
|
||||
// distributed with this program. You should have received a copy of the
|
||||
// GNU General Public License along with permitted additional restrictions
|
||||
// with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
|
||||
|
||||
/* $Header: /CounterStrike/TCPIP.H 1 3/03/97 10:25a Joe_bostic $ */
|
||||
/***************************************************************************
|
||||
** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S **
|
||||
***************************************************************************
|
||||
* *
|
||||
* Project Name : Command & Conquer *
|
||||
* *
|
||||
* File Name : TCPIP.CPP *
|
||||
* *
|
||||
* Programmer : Steve Tall *
|
||||
* *
|
||||
* Start Date : March 11th, 1996 *
|
||||
* *
|
||||
* Last Update : March 11th, 1996 [ST] *
|
||||
* *
|
||||
*-------------------------------------------------------------------------*
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
*-------------------------------------------------------------------------*
|
||||
* Functions: *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
#ifndef WOLAPI_INTEGRATION
|
||||
extern bool Server;
|
||||
#endif
|
||||
|
||||
#define FORCE_WINSOCK 1
|
||||
|
||||
#define WINSOCK_MINOR_VER 1
|
||||
#define WINSOCK_MAJOR_VER 1
|
||||
#define PORTNUM 0x1000
|
||||
#define UDP_PORT 0x1001
|
||||
#define WS_INTERNET_BUFFER_LEN 1024
|
||||
#define WS_NUM_TX_BUFFERS 16 //Must be a power of 2
|
||||
#define WS_NUM_RX_BUFFERS 16 //MUst be a power of 2
|
||||
#define WS_RECEIVE_BUFFER_LEN 1024
|
||||
//#define WS_IN_BUFFER_LEN 8192
|
||||
//#define WS_OUT_BUFFER_LEN 8192
|
||||
|
||||
#define PLANET_WESTWOOD_HANDLE_MAX 20
|
||||
#define PLANET_WESTWOOD_PASSWORD_MAX 20
|
||||
#define IP_ADDRESS_MAX 40
|
||||
#define PORT_NUMBER_MAX 6
|
||||
|
||||
//...........................................................................
|
||||
// Custom messages: WM_USER + 1 to WM_USER + 100
|
||||
// These will be sent to the dialog procedure, for display only.
|
||||
//...........................................................................
|
||||
#define WM_UPDATE_STATUS (WM_USER + 1) // update status text
|
||||
#define WM_UPDATE_CLIENTS (WM_USER + 2) // update client list box
|
||||
#define WM_UPDATE_MESSAGE (WM_USER + 3) // update received message list
|
||||
|
||||
//...........................................................................
|
||||
// Messages for Async processing.
|
||||
//...........................................................................
|
||||
#define WM_ACCEPT (WM_USER + 101) // client wants to connect
|
||||
#define WM_HOSTBYADDRESS (WM_USER + 102) // async get host by address
|
||||
#define WM_HOSTBYNAME (WM_USER + 103) // async get host by name
|
||||
#define WM_ASYNCEVENT (WM_USER + 104) // other Async event
|
||||
#define WM_UDPASYNCEVENT (WM_USER + 105) // UDP socket Async event
|
||||
|
||||
|
||||
class TcpipManagerClass {
|
||||
|
||||
public:
|
||||
|
||||
TcpipManagerClass(void);
|
||||
~TcpipManagerClass(void);
|
||||
|
||||
BOOL Init(void);
|
||||
void Start_Server(void);
|
||||
void Start_Client(void);
|
||||
void Close_Socket(SOCKET s);
|
||||
void Message_Handler(HWND window, UINT message, UINT wParam, LONG lParam);
|
||||
void Copy_To_In_Buffer(int bytes);
|
||||
int Read(void *buffer, int buffer_len);
|
||||
void Write(void *buffer, int buffer_len);
|
||||
BOOL Add_Client(void);
|
||||
void Close(void);
|
||||
void Set_Host_Address(char *address);
|
||||
void Set_Protocol_UDP(BOOL state);
|
||||
void Clear_Socket_Error(SOCKET socket);
|
||||
|
||||
inline BOOL Get_Connected(void) {return (Connected);}
|
||||
|
||||
typedef enum ConnectStatusEnum {
|
||||
CONNECTED_OK = 0,
|
||||
NOT_CONNECTING,
|
||||
CONNECTING,
|
||||
UNABLE_TO_CONNECT_TO_SERVER,
|
||||
CONTACTING_SERVER,
|
||||
SERVER_ADDRESS_LOOKUP_FAILED,
|
||||
RESOLVING_HOST_ADDRESS,
|
||||
UNABLE_TO_ACCEPT_CLIENT,
|
||||
UNABLE_TO_CONNECT,
|
||||
CONNECTION_LOST
|
||||
} ConnectStatusEnum;
|
||||
|
||||
inline ConnectStatusEnum Get_Connection_Status(void) {return (ConnectStatus);}
|
||||
|
||||
private:
|
||||
|
||||
//...........................................................................
|
||||
// This structure defines all the info we need about a host
|
||||
//...........................................................................
|
||||
typedef struct {
|
||||
struct in_addr Addr; // address
|
||||
char DotAddr[16]; // decimal-dot address string
|
||||
char Name[255]; // character-string name
|
||||
} HostType;
|
||||
|
||||
typedef struct {
|
||||
char Buffer[WS_INTERNET_BUFFER_LEN];
|
||||
int DataLength;
|
||||
bool InUse:1;
|
||||
} InternetBufferType;
|
||||
|
||||
|
||||
BOOL WinsockInitialised;
|
||||
WSADATA WinsockInfo;
|
||||
SOCKET ListenSocket;
|
||||
SOCKET ConnectSocket;
|
||||
SOCKET UDPSocket;
|
||||
IN_ADDR ClientIPAddress;
|
||||
HANDLE Async;
|
||||
char HostBuff[MAXGETHOSTSTRUCT];
|
||||
char ClientName[128];
|
||||
char ReceiveBuffer[WS_RECEIVE_BUFFER_LEN];
|
||||
//char InBuffer[WS_IN_BUFFER_LEN];
|
||||
//int InBufferHead;
|
||||
//int InBufferTail;
|
||||
//char OutBuffer[WS_OUT_BUFFER_LEN];
|
||||
//int OutBufferHead;
|
||||
//int OutBufferTail;
|
||||
BOOL IsServer;
|
||||
BOOL Connected;
|
||||
HostType Server;
|
||||
char HostAddress[IP_ADDRESS_MAX];
|
||||
ConnectStatusEnum ConnectStatus;
|
||||
BOOL UseUDP;
|
||||
IN_ADDR UDPIPAddress;
|
||||
int SocketReceiveBuffer;
|
||||
int SocketSendBuffer;
|
||||
InternetBufferType ReceiveBuffers[WS_NUM_TX_BUFFERS];
|
||||
InternetBufferType TransmitBuffers[WS_NUM_RX_BUFFERS];
|
||||
int TXBufferHead;
|
||||
int TXBufferTail;
|
||||
int RXBufferHead;
|
||||
int RXBufferTail;
|
||||
|
||||
};
|
||||
|
||||
|
||||
extern TcpipManagerClass Winsock;
|
||||
|
||||
extern char PlanetWestwoodIPAddress[IP_ADDRESS_MAX];
|
||||
extern long PlanetWestwoodPortNumber;
|
||||
extern bool PlanetWestwoodIsHost;
|
||||
extern int Read_Game_Options(char *);
|
||||
|
||||
|
||||
#define TXT_WINSOCK_CONNECTING 4567+13
|
||||
#define TXT_WINSOCK_NOT_CONNECTING 4567+14
|
||||
#define TXT_WINSOCK_UNABLE_TO_CONNECT_TO_SERVER 4567+15
|
||||
#define TXT_WINSOCK_CONTACTING_SERVER 4567+16
|
||||
#define TXT_WINSOCK_SERVER_ADDRESS_LOOKUP_FAILED 4567+17
|
||||
#define TXT_WINSOCK_UNABLE_TO_ACCEPT_CLIENT 4567+18
|
||||
#define TXT_WINSOCK_UNABLE_TO_CONNECT 4567+19
|
||||
#define TXT_WINSOCK_CONNECTION_LOST 4567+20
|
||||
#define TXT_WINSOCK_RESOLVING_HOST_ADDRESS 4567+21
|
||||
|
||||
|
||||
|
||||
#endif //WIN32
|
Reference in a new issue