home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 March / Chip_2002-03_cd2.bin / dmbsck.cab / dumb_socket.h < prev   
C/C++ Source or Header  |  2001-10-22  |  3KB  |  118 lines

  1. #ifndef __DUMB_SOCKET_H
  2. #define __DUMB_SOCKET_H
  3.  
  4. #ifndef __DUMB_SOCKET
  5. #define __DUMB_SOCKET
  6. #endif
  7. // The following ifdef block is the standard way of creating macros which make exporting 
  8. // from a DLL simpler. All files within this DLL are compiled with the DUMB_SOCKET_EXPORTS
  9. // symbol defined on the command line. this symbol should not be defined on any project
  10. // that uses this DLL. This way any other project whose source files include this file see 
  11. // DUMB_SOCKET_API functions as being imported from a DLL, wheras this DLL sees symbols
  12. // defined with this macro as being exported.
  13. #ifndef DUMB_SOCKET_API
  14. #ifdef DUMB_SOCKET_EXPORTS
  15. #define DUMB_SOCKET_API __declspec(dllexport)
  16. #else
  17. #define DUMB_SOCKET_API __declspec(dllimport)
  18. #endif
  19. #endif
  20.  
  21. /*
  22. // This class is exported from the dumb_socket.dll
  23. class DUMB_SOCKET_API CDumb_socket {
  24. public:
  25.     CDumb_socket(void);
  26.     // TODO: add your methods here.
  27. };
  28.  
  29. extern DUMB_SOCKET_API int nDumb_socket;
  30.  
  31. DUMB_SOCKET_API int fnDumb_socket(void);
  32. */
  33.  
  34.  
  35.  
  36.  
  37. #define I_AM_CLIENT 0
  38. #define I_AM_SERVER 1
  39.  
  40. #define BLOCKING 1
  41. #define NONBLOCKING 0
  42.  
  43.  
  44. #ifdef __cplusplus
  45. extern "C" {
  46. #endif
  47.  
  48. typedef struct _dumbs_item  {
  49.     void*    data;
  50.     int    size;
  51.     struct _dumbs_item*    next;
  52.     struct _dumbs_item*    prev;
  53.     int locked;
  54.     CRITICAL_SECTION lock;
  55.             
  56. } dumbs_item;
  57.  
  58. typedef struct _dumb_socket {
  59.     dumbs_item *first;
  60.     dumbs_item *last;
  61.     short blocking;
  62.     HANDLE block_sem;
  63. #if _DEBUG
  64.     int locked;
  65. #endif
  66.     CRITICAL_SECTION lock;
  67.     struct _dumb_socket *next_zombie;
  68. } dumb_socket; 
  69.  
  70. #define NONAME_PIPE /* testik */
  71.  
  72. typedef struct _dumb_pipe {
  73.     struct _dumb_socket* dumb_sock[2];
  74.     short    connected;
  75. #ifndef NONAME_PIPE
  76.     char    *name;
  77. #endif
  78.     short    blocking;
  79.     HANDLE connect_synchro;
  80. //    HANDLE exclusive_synchro;
  81.     struct _dumb_pipe* next;
  82. } dumb_pipe;
  83.  
  84. typedef struct _hdumb_pipe {
  85.     short    server;
  86.     dumb_pipe* pipe;
  87. } hdumb_pipe;
  88.  
  89. void        DUMB_SOCKET_API destroy_dumb_pipe(hdumb_pipe* h);
  90.  
  91.  
  92. //DUMB_SOCKET_API hdumb_pipe*    _create_dumb_pipe(int i_am_server, int blocking, char* name);
  93. DUMB_SOCKET_API hdumb_pipe*    create_client_dumbpipe(char *name);
  94. DUMB_SOCKET_API hdumb_pipe*    create_server_dumbpipe(short blocking, char *name);
  95. DUMB_SOCKET_API int        connect_hdumb_pipe(hdumb_pipe* h);
  96. DUMB_SOCKET_API hdumb_pipe*    duplicate_hdumb_pipe(hdumb_pipe* p);
  97. DUMB_SOCKET_API    int        read_dumb_pipe(hdumb_pipe* h,char* buff,int buf_size);
  98. DUMB_SOCKET_API int        write_dumb_pipe(hdumb_pipe* h,char* buff,int size);
  99. DUMB_SOCKET_API void        destroy_dumb_pipe(hdumb_pipe* p);
  100. DUMB_SOCKET_API int wait_hdumb_pipe(char *name,int timeout);
  101.  
  102.  
  103. #ifdef MYSQL_SERVER
  104. #define WHO_AM_I I_AM_SERVER
  105. //#define BLOCK(x)  x
  106. #else 
  107. #define WHO_AM_I I_AM_CLIENT
  108. //#define BLOCK(x)  NONBLOCKING
  109. #endif
  110.  
  111. //#define create_dumb_pipe(x,name) _create_dumb_pipe(WHO_AM_I,BLOCK(x),name)
  112.  
  113.  
  114. #ifdef __cplusplus
  115.     }
  116. #endif
  117.  
  118. #endif