00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00033 #ifndef MOD_SOCKET_H
00034 #define MOD_SOCKET_H
00035
00036 #include <windows.h>
00037 #include "chameleon/error.h"
00038 #include "chameleon/inetaddr.h"
00039
00040 #ifdef __cplusplus
00041 extern "C" {
00042 #endif
00043
00044
00052 #define SOCKET_ERROR_TYPE "Socket"
00053 #define SOCKET_ERROR_BAD_SOCKETTYPE (-1)
00054 #define SOCKET_ERROR_NOT_OPEN (-2)
00055 #define SOCKET_ERROR_TIMEOUT (-3)
00056 #define SOCKET_ERROR_IN_PROGRESS (-4)
00057 #define SOCKET_ERROR_STARTUP (-5)
00058 #define SOCKET_ERROR_INTERRUPTED (-6)
00059 #define SOCKET_ERROR_UNSUPPORTED (-7)
00060
00061
00065 CHIPCARD_API typedef enum {
00066 SocketTypeTCP=1,
00067 SocketTypeUDP,
00068 SocketTypeRAW,
00069 SocketTypeUnix
00070 } SOCKETTYPE;
00071
00072
00073 CHIPCARD_API struct SOCKETSTRUCT {
00074 int socket;
00075 int type;
00076 };
00077
00078 CHIPCARD_API typedef struct SOCKETSTRUCT* SOCKETPTR;
00079
00080 CHIPCARD_API struct SOCKETSETSTRUCT {
00081 fd_set set;
00082 int highest;
00083 };
00084
00085 CHIPCARD_API typedef struct SOCKETSETSTRUCT SOCKETSET;
00086 CHIPCARD_API typedef SOCKETSET* SOCKETSETPTR;
00087
00088
00089 CHIPCARD_API ERRORCODE Socket_ModuleInit();
00090 CHIPCARD_API ERRORCODE Socket_ModuleFini();
00091
00107 CHIPCARD_API ERRORCODE SocketSet_Create(SOCKETSETPTR ssp);
00108 CHIPCARD_API ERRORCODE SocketSet_Destroy(SOCKETSETPTR ssp);
00109 CHIPCARD_API ERRORCODE SocketSet_Clear(SOCKETSETPTR ssp);
00111
00119 CHIPCARD_API ERRORCODE SocketSet_AddSocket(SOCKETSETPTR ssp,
00120 const struct SOCKETSTRUCT *sp);
00121 CHIPCARD_API ERRORCODE SocketSet_RemoveSocket(SOCKETSETPTR ssp,
00122 const struct SOCKETSTRUCT *sp);
00123 CHIPCARD_API int SocketSet_HasSocket(SOCKETSETPTR ssp,
00124 const struct SOCKETSTRUCT *sp);
00126
00128
00129
00141 CHIPCARD_API SOCKETPTR Socket_new();
00142 CHIPCARD_API void Socket_free(SOCKETPTR sp);
00143 CHIPCARD_API ERRORCODE Socket_Open(SOCKETPTR sp, SOCKETTYPE socketType);
00144 CHIPCARD_API ERRORCODE Socket_Close(SOCKETPTR sp);
00146
00153 CHIPCARD_API ERRORCODE Socket_Connect(SOCKETPTR sp, const INETADDRESS *addr);
00154 CHIPCARD_API ERRORCODE Socket_Bind(SOCKETPTR sp, const INETADDRESS *addr);
00155 CHIPCARD_API ERRORCODE Socket_Listen(SOCKETPTR sp, int backlog);
00156 CHIPCARD_API ERRORCODE Socket_Accept(SOCKETPTR sp, INETADDRESSPTR addr, SOCKETPTR newsock);
00158
00166 CHIPCARD_API ERRORCODE Socket_GetPeerAddr(SOCKETPTR sp, INETADDRESSPTR addr);
00167
00168 CHIPCARD_API ERRORCODE Socket_Select( SOCKETSETPTR rs,
00169 SOCKETSETPTR ws,
00170 SOCKETSETPTR xs,
00171 int timeout);
00172 CHIPCARD_API ERRORCODE Socket_WaitForRead(SOCKETPTR sp,int timeout);
00173 CHIPCARD_API ERRORCODE Socket_WaitForWrite(SOCKETPTR sp,int timeout);
00175
00183 CHIPCARD_API ERRORCODE Socket_Read(SOCKETPTR sp,
00184 char *buffer,
00185 int *bsize);
00186 CHIPCARD_API ERRORCODE Socket_Write(SOCKETPTR sp,
00187 const char *buffer,
00188 int *bsize);
00189 CHIPCARD_API ERRORCODE Socket_ReadFrom(SOCKETPTR sp,
00190 INETADDRESSPTR addr,
00191 char *buffer,
00192 int *bsize);
00193 CHIPCARD_API ERRORCODE Socket_WriteTo(SOCKETPTR sp,
00194 const INETADDRESS *addr,
00195 const char *buffer,
00196 int *bsize);
00198
00205 CHIPCARD_API ERRORCODE Socket_SetBlocking(SOCKETPTR sp,
00206 int fl);
00207 CHIPCARD_API ERRORCODE Socket_SetBroadcast(SOCKETPTR sp,
00208 int fl);
00209 CHIPCARD_API ERRORCODE Socket_GetSocketError(SOCKETPTR sp);
00210
00211 CHIPCARD_API ERRORCODE Socket_SetReuseAddress(SOCKETPTR sp, int fl);
00213
00214
00216
00217
00219
00220 #ifdef __cplusplus
00221 }
00222 #endif
00223
00224 #endif // MOD_SOCKET_H
00225
00226
00227