Initial commit
This commit is contained in:
209
Torque/SDK/lib/maxsdk40/tcp.h
Normal file
209
Torque/SDK/lib/maxsdk40/tcp.h
Normal file
@@ -0,0 +1,209 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// ----------------
|
||||
// File ....: tcp.h
|
||||
// ----------------
|
||||
// Author...: Gus J Grubba
|
||||
// Date ....: September 1995
|
||||
// O.S. ....: Windows NT 3.51
|
||||
//
|
||||
// Note ....: Copyright 1991, 1995 Gus J Grubba
|
||||
//
|
||||
// History .: Sep, 03 1995 - Ported to C++ / WinNT
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#ifndef _TCPINCLUDE_
|
||||
#define _TCPINCLUDE_
|
||||
|
||||
#include <winsock.h>
|
||||
|
||||
//-- Constants ----------------------------------------------------------------
|
||||
|
||||
#define MAXUDPLEN 512
|
||||
#define LOCALHOSTADDRESSH 0x0100007F //-- (Host Order)
|
||||
#define LOCALHOSTADDRESSN 0x7F000001 //-- (Network Order)
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//-- Error Codes
|
||||
|
||||
#define GCRES_SERVICEERROR 0x1000
|
||||
#define GCRES_GETHOSTERROR 0x1001
|
||||
#define GCRES_CANNOTCREATESOCKET 0x1002
|
||||
#define GCRES_CANNOTCONNECT 0x1003
|
||||
#define GCRES_BINDERROR 0x1004
|
||||
#define GCRES_CANNOTSERVE 0x1005
|
||||
#define GCRES_DISCONNECTED 0x1006
|
||||
#define GCRES_READERROR 0x1007
|
||||
#define GCRES_INVALIDSERVERTHREAD 0x1008
|
||||
#define GCRES_INVALIDPORT 0x1009
|
||||
#define GCRES_NOTINITIALIZED 0x100A
|
||||
#define GCRES_TOOBIG 0x100B
|
||||
#define GCRES_WRITEERROR 0x100C
|
||||
#define GCRES_TIMEOUT 0x100D
|
||||
|
||||
//-- Forward References ------------------------------------------------------
|
||||
|
||||
class ConnectionInfo;
|
||||
class TCPcomm;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//-- Server Thread
|
||||
|
||||
typedef void (WINAPI *SERVER_THREAD)(
|
||||
ConnectionInfo *ci
|
||||
);
|
||||
|
||||
typedef struct tag_tcpSRV {
|
||||
ConnectionInfo *ci;
|
||||
TCPcomm *tcp;
|
||||
} tcpSRV;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//-- Connection data
|
||||
|
||||
class ConnectionInfo {
|
||||
|
||||
//-- All kept in host order
|
||||
|
||||
void *ptr, *param; //-- Generic Pointers
|
||||
|
||||
BOOL blocking,dns;
|
||||
|
||||
SOCKET c_sock; //-- The "client" socket
|
||||
DWORD c_address; //-- The "client" inet address
|
||||
char c_name[MAX_PATH]; //-- The "client" hostname
|
||||
WORD c_port; //-- The "client" port
|
||||
|
||||
SOCKET s_sock; //-- The "server" socket
|
||||
DWORD s_address; //-- The "server" inet address
|
||||
char s_name[MAX_PATH]; //-- The "server" hostname
|
||||
WORD s_port; //-- The "server" port
|
||||
|
||||
DWORD bytes_s, bytes_r;
|
||||
|
||||
public:
|
||||
|
||||
GCOMMEXPORT ConnectionInfo ( ) { Reset(); dns = FALSE;}
|
||||
|
||||
GCOMMEXPORT void Reset( ) {
|
||||
ptr = NULL;
|
||||
param = NULL;
|
||||
bytes_s = 0;
|
||||
bytes_r = 0;
|
||||
ResetClient();
|
||||
ResetServer();
|
||||
}
|
||||
|
||||
GCOMMEXPORT void ResetClient ( ) {
|
||||
c_sock = INVALID_SOCKET;
|
||||
c_address = 0;
|
||||
c_name[0] = 0;
|
||||
}
|
||||
|
||||
GCOMMEXPORT void ResetServer ( ) {
|
||||
s_sock = INVALID_SOCKET;
|
||||
s_address = 0;
|
||||
s_name[0] = 0;
|
||||
}
|
||||
|
||||
GCOMMEXPORT void SetClientSocket ( SOCKET s) { c_sock = s; }
|
||||
GCOMMEXPORT void SetClientAddress ( DWORD a) { c_address = a; }
|
||||
GCOMMEXPORT void SetClientName ( char *n) { strcpy(c_name,n); }
|
||||
GCOMMEXPORT void SetClientPort ( WORD p) { c_port = p; }
|
||||
|
||||
GCOMMEXPORT void SetServerSocket ( SOCKET s) { s_sock = s; }
|
||||
GCOMMEXPORT void SetServerAddress ( DWORD a) { s_address = a; }
|
||||
GCOMMEXPORT void SetServerName ( char *n) { strcpy(s_name,n); }
|
||||
GCOMMEXPORT void SetServerPort ( WORD p) { s_port = p; }
|
||||
|
||||
GCOMMEXPORT SOCKET ClientSocket ( ) { return c_sock; }
|
||||
GCOMMEXPORT DWORD ClientAddress ( ) { return c_address; }
|
||||
GCOMMEXPORT WORD ClientPort ( ) { return c_port; }
|
||||
GCOMMEXPORT char *ClientName ( ) { return c_name; }
|
||||
|
||||
GCOMMEXPORT SOCKET ServerSocket ( ) { return s_sock; }
|
||||
GCOMMEXPORT WORD ServerPort ( ) { return s_port; }
|
||||
GCOMMEXPORT DWORD ServerAddress ( ) { return s_address; }
|
||||
GCOMMEXPORT char *ServerName ( ) { return s_name; }
|
||||
|
||||
GCOMMEXPORT void AddToBytesSent ( DWORD b ) { bytes_s += b; }
|
||||
GCOMMEXPORT void AddToBytesReceived ( DWORD b ) { bytes_r += b; }
|
||||
|
||||
GCOMMEXPORT DWORD BytesSent ( ) { return bytes_s; }
|
||||
GCOMMEXPORT DWORD BytesReceived ( ) { return bytes_r; }
|
||||
|
||||
GCOMMEXPORT void ResetBytesSent ( ) { bytes_s = 0; }
|
||||
GCOMMEXPORT void ResetBytesReceived ( ) { bytes_r = 0; }
|
||||
|
||||
GCOMMEXPORT void *Ptr ( ) { return ptr; }
|
||||
GCOMMEXPORT void SetPtr ( void * p ) { ptr = p; }
|
||||
GCOMMEXPORT void *Param ( ) { return param; }
|
||||
GCOMMEXPORT void SetParam ( void * p ) { param = p; }
|
||||
|
||||
GCOMMEXPORT void SetBlocking ( BOOL b ) { blocking = b; }
|
||||
GCOMMEXPORT BOOL Blocking ( ) { return blocking; }
|
||||
|
||||
GCOMMEXPORT void SetUseDns ( BOOL b ) { dns = b; }
|
||||
GCOMMEXPORT BOOL UseDns ( ) { return dns; }
|
||||
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//-- BSD Socket Class Definition ---------------------------------------------
|
||||
//-----------------------------------------------------------------------------
|
||||
// #> TCPcomm
|
||||
//
|
||||
|
||||
class TCPcomm : public tcCOMM {
|
||||
|
||||
private:
|
||||
|
||||
BOOL initialized;
|
||||
WSADATA WSAData;
|
||||
SOCKET sSocket;
|
||||
|
||||
BOOL HandleStandardErrors ( int err, TCHAR *msg );
|
||||
|
||||
public:
|
||||
|
||||
GCOMMEXPORT TCPcomm ( );
|
||||
GCOMMEXPORT ~TCPcomm ( );
|
||||
|
||||
//-- House Keeping --------------------------------
|
||||
|
||||
GCOMMEXPORT BOOL Init ( HWND hWnd );
|
||||
GCOMMEXPORT BOOL Setup ( void * ) { return TRUE; }
|
||||
GCOMMEXPORT void Close ( );
|
||||
GCOMMEXPORT BOOL SaveSession ( void *ptr ) { return TRUE; }
|
||||
GCOMMEXPORT BOOL LoadSession ( void *ptr ) { return TRUE; }
|
||||
GCOMMEXPORT DWORD EvaluateDataSize ( ) { return 0; }
|
||||
|
||||
//-- Helpers --------------------------------------
|
||||
|
||||
GCOMMEXPORT GCRES GetHostAddress ( DWORD *addr, char *name, char *fullname = NULL );
|
||||
|
||||
//-- TCP Transport --------------------------------
|
||||
|
||||
GCOMMEXPORT GCRES Serve ( WORD port, SERVER_THREAD func, void *param );
|
||||
GCOMMEXPORT void StopServer ( );
|
||||
GCOMMEXPORT GCRES Send ( ConnectionInfo *ci, void *buf, int len, float timeout = 5.0f );
|
||||
GCOMMEXPORT GCRES Receive ( ConnectionInfo *ci, void *buf, int len, float timeout = 5.0f );
|
||||
GCOMMEXPORT GCRES rlogin ( ConnectionInfo *ci );
|
||||
GCOMMEXPORT GCRES Connect ( ConnectionInfo *ci );
|
||||
GCOMMEXPORT void Disconnect ( ConnectionInfo *ci );
|
||||
|
||||
//-- UDP Transport --------------------------------
|
||||
|
||||
#define UDP_BLOCK 1
|
||||
#define UDP_NONBLOCK 0
|
||||
|
||||
GCOMMEXPORT GCRES CreateUDPServer ( ConnectionInfo *ci, BOOL block = UDP_NONBLOCK );
|
||||
GCOMMEXPORT GCRES CloseUDPServer ( ConnectionInfo *ci );
|
||||
GCOMMEXPORT GCRES SendUDP ( ConnectionInfo *ci, void *buf, int len, int *written, float timeout = 5.0f);
|
||||
GCOMMEXPORT GCRES ReceiveUDP ( ConnectionInfo *ci, void *buf, int len, int *read, float timeout = 5.0f);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
//-- EOF: tcp.h ---------------------------------------------------------------
|
||||
Reference in New Issue
Block a user