source: golgotha/src/maxtool/sdk_inc/tcp.h @ 80

Last change on this file since 80 was 80, checked in by Sam Hocevar, 11 years ago
  • Adding the Golgotha source code. Not sure what's going to be interesting in there, but since it's all public domain, there's certainly stuff to pick up.
  • Property svn:keywords set to Id
File size: 8.2 KB
Line 
1//-----------------------------------------------------------------------------
2// ----------------
3// File ....: tcp.h
4// ----------------
5// Author...: Gus J Grubba
6// Date ....: September 1995
7// O.S. ....: Windows NT 3.51
8//
9// Note ....: Copyright 1991, 1995 Gus J Grubba
10//
11// History .: Sep, 03 1995 - Ported to C++ / WinNT
12//
13//-----------------------------------------------------------------------------
14
15#ifndef _TCPINCLUDE_
16#define _TCPINCLUDE_
17
18#include <winsock.h>
19
20//-- Constants ----------------------------------------------------------------
21
22#define MAXUDPLEN           512
23#define LOCALHOSTADDRESSH   0x0100007F  //-- (Host Order)
24#define LOCALHOSTADDRESSN   0x7F000001  //-- (Network Order)
25
26//-----------------------------------------------------------------------------
27//-- Error Codes
28
29#define GCRES_SERVICEERROR        0x1000
30#define GCRES_GETHOSTERROR        0x1001
31#define GCRES_CANNOTCREATESOCKET  0x1002
32#define GCRES_CANNOTCONNECT       0x1003
33#define GCRES_BINDERROR           0x1004
34#define GCRES_CANNOTSERVE         0x1005
35#define GCRES_DISCONNECTED        0x1006
36#define GCRES_READERROR           0x1007
37#define GCRES_INVALIDSERVERTHREAD 0x1008
38#define GCRES_INVALIDPORT         0x1009
39#define GCRES_NOTINITIALIZED      0x100A
40#define GCRES_TOOBIG              0x100B
41#define GCRES_WRITEERROR          0x100C
42#define GCRES_TIMEOUT             0x100D
43
44//-- Forward References ------------------------------------------------------
45
46class ConnectionInfo;
47class TCPcomm;
48
49//-----------------------------------------------------------------------------
50//-- Server Thread
51
52typedef void (WINAPI *SERVER_THREAD)(
53     ConnectionInfo *ci
54);
55
56typedef struct tag_tcpSRV {
57     ConnectionInfo *ci;
58     TCPcomm       *tcp;
59} tcpSRV;
60
61//-----------------------------------------------------------------------------
62//-- Connection data
63
64class ConnectionInfo {
65
66        //-- All kept in host order
67
68        void    *ptr, *param;        //-- Generic Pointers
69       
70        BOOL     blocking;
71
72        SOCKET   c_sock;             //-- The "client" socket
73        DWORD    c_address;          //-- The "client" inet address
74        char     c_name[MAX_PATH];   //-- The "client" hostname
75        WORD     c_port;             //-- The "client" port
76
77        SOCKET   s_sock;             //-- The "server" socket
78        DWORD    s_address;          //-- The "server" inet address
79        char     s_name[MAX_PATH];   //-- The "server" hostname
80        WORD     s_port;             //-- The "server" port
81
82        DWORD    bytes_s, bytes_r;
83       
84     public:
85     
86        GCOMMEXPORT          ConnectionInfo ( ) { Reset(); }
87
88        GCOMMEXPORT void     Reset( ) {
89                    ptr     = NULL;
90                    param   = NULL;
91                    bytes_s = 0;
92                    bytes_r = 0;
93                    ResetClient();
94                    ResetServer();
95                 }
96       
97        GCOMMEXPORT void     ResetClient ( ) {
98                    c_sock    = INVALID_SOCKET;
99                    c_address = 0;
100                    c_name[0] = 0;
101                 }
102       
103        GCOMMEXPORT void     ResetServer ( ) {
104                    s_sock    = INVALID_SOCKET;
105                    s_address = 0;
106                    s_name[0] = 0;
107                 }
108       
109        GCOMMEXPORT void     SetClientSocket    ( SOCKET s) { c_sock    = s;    }
110        GCOMMEXPORT void     SetClientAddress   ( DWORD  a) { c_address = a;    }
111        GCOMMEXPORT void     SetClientName      ( char  *n) { strcpy(c_name,n); }
112        GCOMMEXPORT void     SetClientPort      ( WORD p)   { c_port    = p;    }
113     
114        GCOMMEXPORT void     SetServerSocket    ( SOCKET s) { s_sock    = s;    }
115        GCOMMEXPORT void     SetServerAddress   ( DWORD  a) { s_address = a;    }
116        GCOMMEXPORT void     SetServerName      ( char  *n) { strcpy(s_name,n); }
117        GCOMMEXPORT void     SetServerPort      ( WORD p)   { s_port    = p;    }
118     
119        GCOMMEXPORT SOCKET   ClientSocket       ( ) { return c_sock;    }
120        GCOMMEXPORT DWORD    ClientAddress      ( ) { return c_address; }
121        GCOMMEXPORT WORD     ClientPort         ( ) { return c_port;    }
122        GCOMMEXPORT char    *ClientName         ( ) { return c_name;    }
123     
124        GCOMMEXPORT SOCKET   ServerSocket       ( ) { return s_sock;    }
125        GCOMMEXPORT WORD     ServerPort         ( ) { return s_port;    }
126        GCOMMEXPORT DWORD    ServerAddress      ( ) { return s_address; }
127        GCOMMEXPORT char    *ServerName         ( ) { return s_name;    }
128     
129        GCOMMEXPORT void     AddToBytesSent     ( DWORD b ) { bytes_s += b; }
130        GCOMMEXPORT void     AddToBytesReceived ( DWORD b ) { bytes_r += b; }
131
132        GCOMMEXPORT DWORD    BytesSent          ( ) { return bytes_s; }
133        GCOMMEXPORT DWORD    BytesReceived      ( ) { return bytes_r; }
134
135        GCOMMEXPORT void     ResetBytesSent     ( ) { bytes_s = 0; }
136        GCOMMEXPORT void     ResetBytesReceived ( ) { bytes_r = 0; }
137     
138        GCOMMEXPORT void    *Ptr                ( ) { return ptr;         }
139        GCOMMEXPORT void     SetPtr             ( void * p ) { ptr = p;   }
140        GCOMMEXPORT void    *Param              ( ) { return param;       }
141        GCOMMEXPORT void     SetParam           ( void * p ) { param = p; }
142
143        GCOMMEXPORT void     SetBlocking        ( BOOL b ) { blocking = b; }
144        GCOMMEXPORT BOOL     Blocking           ( ) { return blocking; }
145       
146};
147
148//-----------------------------------------------------------------------------
149//--  BSD Socket Class Definition ---------------------------------------------
150//-----------------------------------------------------------------------------
151// #> TCPcomm
152//
153     
154class TCPcomm : public tcCOMM {
155
156     private:
157     
158        BOOL        initialized;
159        WSADATA     WSAData;
160        SOCKET      sSocket;
161       
162        BOOL        HandleStandardErrors    ( int err, TCHAR *msg );
163       
164     public:
165
166        GCOMMEXPORT        TCPcomm          ( );
167        GCOMMEXPORT       ~TCPcomm          ( );
168     
169        //-- House Keeping --------------------------------
170
171        GCOMMEXPORT BOOL   Init             ( HWND hWnd );
172        GCOMMEXPORT BOOL   Setup            ( void * ) { return TRUE; }
173        GCOMMEXPORT void   Close            ( );
174        GCOMMEXPORT BOOL   SaveSession      ( void *ptr ) { return TRUE; }
175        GCOMMEXPORT BOOL   LoadSession      ( void *ptr ) { return TRUE; }
176        GCOMMEXPORT DWORD  EvaluateDataSize ( )           { return 0;    }
177
178        //-- Helpers --------------------------------------
179
180        GCOMMEXPORT GCRES  GetHostAddress   ( DWORD *addr, char *name, char *fullname = NULL );
181                   
182        //-- TCP Transport --------------------------------
183
184        GCOMMEXPORT GCRES  Serve            ( WORD port, SERVER_THREAD func, void *param );
185        GCOMMEXPORT void   StopServer       ( );
186        GCOMMEXPORT GCRES  Send             ( ConnectionInfo *ci, void *buf, int len, float timeout = 5.0f );
187        GCOMMEXPORT GCRES  Receive          ( ConnectionInfo *ci, void *buf, int len, float timeout = 5.0f );
188        GCOMMEXPORT GCRES  rlogin           ( ConnectionInfo *ci );
189        GCOMMEXPORT GCRES  Connect          ( ConnectionInfo *ci );
190        GCOMMEXPORT void   Disconnect       ( ConnectionInfo *ci );
191       
192        //-- UDP Transport --------------------------------
193       
194        #define UDP_BLOCK    1
195        #define UDP_NONBLOCK 0
196
197        GCOMMEXPORT GCRES  CreateUDPServer  ( ConnectionInfo *ci, BOOL block = UDP_NONBLOCK );
198        GCOMMEXPORT GCRES  CloseUDPServer   ( ConnectionInfo *ci );
199        GCOMMEXPORT GCRES  SendUDP          ( ConnectionInfo *ci, void *buf, int len, int *written, float timeout = 5.0f);
200        GCOMMEXPORT GCRES  ReceiveUDP       ( ConnectionInfo *ci, void *buf, int len, int *read,    float timeout = 5.0f);
201
202};
203
204#endif
205
206//-- EOF: tcp.h ---------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.