home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / netds / winsock / globchat / server / globals.h < prev    next >
C/C++ Source or Header  |  1997-10-05  |  11KB  |  299 lines

  1. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  2. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  3. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  4. // PARTICULAR PURPOSE.
  5. //
  6. // Copyright (C) 1993-1997  Microsoft Corporation.  All Rights Reserved.
  7. //
  8. // PURPOSE:
  9. //    Contains declarations for all globally scoped names in the program.
  10. //
  11.  
  12. #include <nspapi.h>
  13. #include <wsipx.h>
  14.  
  15. //-------------------------------------------------------------------------
  16. // Product identifier string defines
  17.  
  18. #define APPNAME       GlobChat
  19.  
  20.  
  21. //-------------------------------------------------------------------------
  22. // Functions for handling main window messages.  The message-dispatching
  23. // mechanism expects all message-handling functions to have the following
  24. // prototype:
  25. //
  26. //     LRESULT FunctionName(HWND, UINT, WPARAM, LPARAM);
  27.  
  28. LRESULT MsgCreate(HWND, UINT, WPARAM, LPARAM);
  29. LRESULT MsgSize(HWND, UINT, WPARAM, LPARAM);
  30. LRESULT MsgTimer(HWND, UINT, WPARAM, LPARAM);
  31. LRESULT MsgCommand(HWND, UINT, WPARAM, LPARAM);
  32. LRESULT MsgDestroy(HWND, UINT, WPARAM, LPARAM);
  33. LRESULT MsgConnected(HWND, UINT, WPARAM, LPARAM);
  34. LRESULT MsgDataready(HWND, UINT, WPARAM, LPARAM);
  35.  
  36.  
  37. //-------------------------------------------------------------------------
  38. // Functions for handling main window commands--ie. functions for
  39. // processing WM_COMMAND messages based on the wParam value.
  40. // The message-dispatching mechanism expects all command-handling
  41. // functions to have the following prototype:
  42. //
  43. //     LRESULT FunctionName(HWND, WORD, WORD, HWND);
  44.  
  45. LRESULT CmdExit(HWND, WORD, WORD, HWND);
  46. LRESULT CmdAbout(HWND, WORD, WORD, HWND);
  47.  
  48. //-------------------------------------------------------------------------
  49. //  Globchat socket message definitions
  50. //
  51. typedef struct _MSGHDR            // Message header
  52. {
  53.     BYTE            signature;    // Identifies start of a message
  54.     WORD            length;       // size of message
  55.     BYTE            command;      // message command
  56. } MSGHDR, *LPMSGHDR;
  57.  
  58.  
  59. typedef struct _DATAMSG            // Message = message header + data
  60. {
  61.     MSGHDR          hdr;
  62.     BYTE            data[0x8000];  // data
  63. } DATAMSG, *LPDATAMSG;
  64.  
  65. DATAMSG xferbuf;
  66.  
  67. #define HDRSIZE      sizeof(MSGHDR)    // Message header size
  68.  
  69. #define REALLEN(x)   lstrlen(x) + 1    // REALLEN will now count terminating NULL of x
  70.  
  71. //-------------------------------------------------------------------------
  72. // My personal SOCKDATA structure for storing info on my sockets
  73.  
  74. typedef struct _SOCKDATA
  75. {
  76.     SOCKET           sock;           // socket handle
  77.     int              status;         // Socket's status
  78.     struct sockaddr  addr;           // Address structure
  79.     char             reserved[10];   // Generic sockaddr struct is not big enough for all
  80.                                      // addresses (namely netbios addresses) so adding some
  81.                                      // space at the end.
  82.     int              addrlen;        // Address length
  83.     int              type;           // Socket type (from socket() call)
  84.     int              protocol;       // protocol (from socket() call)
  85.     int              currconnects;   // Number of current connections on this socket
  86.     LPTSTR           lpProtocolName; // Pointer to protocol name socket is running on
  87.     int              servsockindex;  // Index to array of server sockets
  88.     SOCKET           peer;           // Associated peer socket which this socket is in session with
  89.     char             name[16];       // User name
  90. } SOCKDATA, *LPSOCKDATA;
  91.  
  92. LPSOCKDATA ServerSockets;        // Listening (server) sockets
  93. LPSOCKDATA ConnectedSockets;   // Accepted (client) sockets
  94.  
  95. //  SOCKDATA structure status options
  96. #define SOCKSTAT_INIT        1
  97. #define SOCKSTAT_LISTENING   2
  98. #define SOCKSTAT_ACCEPTING   3
  99. #define SOCKSTAT_CLOSED      4
  100. #define SOCKSTAT_CONNECTED   5
  101. #define SOCKSTAT_AVAILABLE   6
  102. #define SOCKSTAT_INSESSION   7
  103. #define SOCKSTAT_REQSESSION  8
  104.  
  105. //-------------------------------------------------------------------------
  106. // Global function prototypes.
  107.  
  108. BOOL InitApplication(HINSTANCE, int);
  109. BOOL CenterWindow(HWND, HWND);
  110. void AtoH(char *, char *, int);
  111. unsigned char BtoH(char);
  112. void deregistername(char *);
  113. BOOL senddatamessage(SOCKET, LPDATAMSG);
  114. BOOL recvdatamessage (LPSOCKDATA, LPDATAMSG);
  115. void UpdateClientList(char *, int, char *);
  116. BOOL MakeServSock(HWND, LPSOCKDATA, LPPROTOCOL_INFO);
  117. LPTSTR GetStringRes (int id);
  118.  
  119. // Callback functions.  These are called by Windows.
  120.  
  121. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  122.  
  123.  
  124. //-------------------------------------------------------------------------
  125. // Command ID definitions.  These definitions are used to associate menu
  126. // items with commands.
  127.  
  128. // File menu
  129. #define IDM_EXIT    1000
  130.  
  131. // Help menu
  132. #define IDM_ABOUT   1100
  133.  
  134. // Status List boxes
  135. #define ID_PROTOCOLBOX 400
  136. #define ID_CLIENTBOX   401
  137.  
  138. //-------------------------------------------------------------------------
  139. // String Table ID definitions.
  140.  
  141. #define IDS_APPNAME         1
  142. #define IDS_DESCRIPTION     2
  143. #define IDS_AVAILABLE       3
  144. #define IDS_SESSION         4
  145. #define IDS_SESSION_SETUP   5
  146. #define IDS_LANGVERINFO     6
  147.  
  148.  
  149. //-------------------------------------------------------------------------
  150. //  About dialog defines.
  151.  
  152. #define IDD_VERFIRST    100
  153. #define IDD_VERLAST     104
  154.  
  155. //-------------------------------------------------------------------------
  156. // Application Specific Messages.
  157.  
  158. #define MW_CONNECTED    200
  159. #define MW_DATAREADY    201
  160.  
  161. #define SAPTIMER        300
  162.  
  163. //--------------------------------------------------------------------------
  164. //  Other constants
  165.  
  166. #define NWCHATID        0x5607      // 0x0756 (network order) was assigned by Novell
  167.                                     // for this specific application
  168. #define DNSCHATID       0x555       // TCP well known port
  169.  
  170. // Globchat socket message commands
  171. #define REGISTER_NAME             1
  172. #define XFER_DATA                 2
  173. #define REQUEST_SESSION           3
  174. #define SESSION_REQUEST_RESPONSE  4
  175. #define SESSION_CLOSE             5
  176. #define DEREGISTER_NAME           6
  177.  
  178. #define MYSIGNATURE               0xCC   // First byte in every message header
  179.  
  180. //-------------------------------------------------------------------------
  181. // Global variable declarations.
  182.  
  183. extern HINSTANCE hInst;          // The current instance handle
  184. extern char      szAppName[];    // The name of this application
  185. extern char      szTitle[];      // The title bar text
  186. HANDLE ConnectHeap;
  187. LPPROTOCOL_INFO lpProtBuf;
  188. SOCKET SAPSocket;
  189. SOCKADDR_IPX SAPSockAddr, SAPDestSockAddr;
  190. int NextFree, MaxConnects;
  191. char aliasbuf[512];
  192. int sizealiasbuf;
  193. HWND hwndProtocolList;
  194. HWND hwndClientList;
  195.  
  196.  
  197. #define hwndMDIClient NULL
  198.  
  199.  
  200. //-------------------------------------------------------------------------
  201. // Message and command dispatch infrastructure.  The following type
  202. // definitions and functions are used by the message and command dispatching
  203. // mechanism and do not need to be changed.
  204.  
  205.     // Function pointer prototype for message handling functions.
  206. typedef LRESULT (*PFNMSG)(HWND,UINT,WPARAM,LPARAM);
  207.  
  208.     // Function pointer prototype for command handling functions.
  209. typedef LRESULT (*PFNCMD)(HWND,WORD,WORD,HWND);
  210.  
  211.     // Enumerated type used to determine which default window procedure
  212.     // should be called by the message- and command-dispatching mechanism
  213.     // if a message or command is not handled explicitly.
  214. typedef enum
  215. {
  216.    edwpNone,            // Do not call any default procedure.
  217.    edwpWindow,          // Call DefWindowProc.
  218.    edwpDialog,          // Call DefDlgProc (This should be used only for
  219.                         // custom dialogs - standard dialog use edwpNone).
  220.    edwpMDIChild,        // Call DefMDIChildProc.
  221.    edwpMDIFrame         // Call DefFrameProc.
  222. } EDWP;                // Enumeration for Default Window Procedures
  223.  
  224.     // This structure maps messages to message handling functions.
  225. typedef struct _MSD
  226. {
  227.     UINT   uMessage;
  228.     PFNMSG pfnmsg;
  229. } MSD;                 // MeSsage Dispatch structure
  230.  
  231.     // This structure contains all of the information that a window
  232.     // procedure passes to DispMessage in order to define the message
  233.     // dispatching behavior for the window.
  234. typedef struct _MSDI
  235. {
  236.     int  cmsd;          // Number of message dispatch structs in rgmsd
  237.     MSD *rgmsd;         // Table of message dispatch structures
  238.     EDWP edwp;          // Type of default window handler needed.
  239. } MSDI, FAR *LPMSDI;   // MeSsage Dipatch Information
  240.  
  241.     // This structure maps command IDs to command handling functions.
  242. typedef struct _CMD
  243. {
  244.     WORD   wCommand;
  245.     PFNCMD pfncmd;
  246. } CMD;                 // CoMmand Dispatch structure
  247.  
  248.     // This structure contains all of the information that a command
  249.     // message procedure passes to DispCommand in order to define the
  250.     // command dispatching behavior for the window.
  251. typedef struct _CMDI
  252. {
  253.     int  ccmd;          // Number of command dispatch structs in rgcmd
  254.     CMD *rgcmd;         // Table of command dispatch structures
  255.     EDWP edwp;          // Type of default window handler needed.
  256. } CMDI, FAR *LPCMDI;   // CoMmand Dispatch Information
  257.  
  258.     // Message and command dispatching functions.  They look up messages
  259.     // and commands in the dispatch tables and call the appropriate handler
  260.     // function.
  261. LRESULT DispMessage(LPMSDI, HWND, UINT, WPARAM, LPARAM);
  262. LRESULT DispCommand(LPCMDI, HWND, WPARAM, LPARAM);
  263.  
  264.     // Message dispatch information for the main window
  265. extern MSDI msdiMain;
  266.     // Command dispatch information for the main window
  267. extern CMDI cmdiMain;
  268.  
  269.  
  270.  
  271. //-------------------------------------------------------------------------
  272. // Version string definitions--Leave these alone.
  273.  
  274. #define SZRCOMPANYNAME "CompanyName"
  275. #define SZRDESCRIPTION "FileDescription"
  276. #define SZRVERSION     "FileVersion"
  277. #define SZRAPPNAME     "InternalName"
  278. #define SZRCOPYRIGHT   "LegalCopyright"
  279. #define SZRTRADEMARK   "LegalTrademarks"
  280. #define SZRPRODNAME    "ProductName"
  281. #define SZRPRODVER     "ProuctVersion"
  282.  
  283. //-------------------------------------------------------------------------
  284. // SAP structure definition for a single entry SAP packet.
  285.  
  286. typedef struct _SAPHDR
  287. {
  288.     WORD     operation;    // 1 = Req., 2 = Resp., 3 = Get Nearest Req, 4 = Get Nearest Resp.
  289.     WORD     servicetype;  // kind of service
  290.     char     name[48];         // Name of Server
  291.     char     network[4];      // network number
  292.     char     node[6];         // node number
  293.     char     socket[2];       // socket number
  294.     WORD     hops;         // Number of hops to server
  295. } SAPHDR, *LPSAPHDR;  // SAP structure, pointer to SAP structure
  296.  
  297. SAPHDR SAPData;
  298.  
  299.