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 "chameleon/error.h"
00037 #include "chameleon/inetaddr.h"
00038 #include <sys/types.h>
00039 #include <sys/socket.h>
00040 #include <netinet/in.h>
00041 #ifdef HAVE_ARPA_INET_H
00042 # include <arpa/inet.h>
00043 #endif
00044
00045
00046 #ifdef __cplusplus
00047 extern "C" {
00048 #endif
00049
00050
00058 #define SOCKET_ERROR_TYPE "Socket"
00059 #define SOCKET_ERROR_BAD_SOCKETTYPE (-1)
00060 #define SOCKET_ERROR_NOT_OPEN (-2)
00061 #define SOCKET_ERROR_TIMEOUT (-3)
00062 #define SOCKET_ERROR_IN_PROGRESS (-4)
00063 #define SOCKET_ERROR_STARTUP (-5)
00064 #define SOCKET_ERROR_INTERRUPTED (-6)
00065 #define SOCKET_ERROR_UNSUPPORTED (-7)
00066
00067
00071 CHIPCARD_API typedef enum {
00072 SocketTypeTCP=1,
00073 SocketTypeUDP,
00074 SocketTypeRAW,
00075 SocketTypeUnix
00076 } SOCKETTYPE;
00077
00078
00079 CHIPCARD_API struct SOCKETSTRUCT {
00080 int socket;
00081 int type;
00082 };
00083
00084 CHIPCARD_API typedef struct SOCKETSTRUCT* SOCKETPTR;
00085
00086 CHIPCARD_API struct SOCKETSETSTRUCT {
00087 fd_set set;
00088 int highest;
00089 };
00090
00091 CHIPCARD_API typedef struct SOCKETSETSTRUCT SOCKETSET;
00092 CHIPCARD_API typedef SOCKETSET* SOCKETSETPTR;
00093
00094
00098 CHIPCARD_API ERRORCODE Socket_ModuleInit();
00099
00103 CHIPCARD_API ERRORCODE Socket_ModuleFini();
00104
00122 CHIPCARD_API ERRORCODE SocketSet_Create(SOCKETSETPTR ssp);
00123 CHIPCARD_API ERRORCODE SocketSet_Destroy(SOCKETSETPTR ssp);
00124 CHIPCARD_API ERRORCODE SocketSet_Clear(SOCKETSETPTR ssp);
00126
00134 CHIPCARD_API ERRORCODE SocketSet_AddSocket(SOCKETSETPTR ssp,
00135 const struct SOCKETSTRUCT *sp);
00136 CHIPCARD_API ERRORCODE SocketSet_RemoveSocket(SOCKETSETPTR ssp,
00137 const struct SOCKETSTRUCT *sp);
00138 CHIPCARD_API int SocketSet_HasSocket(SOCKETSETPTR ssp,
00139 const struct SOCKETSTRUCT *sp);
00141
00143
00144
00156
00160 CHIPCARD_API SOCKETPTR Socket_new();
00161
00165 CHIPCARD_API void Socket_free(SOCKETPTR sp);
00166
00171 CHIPCARD_API ERRORCODE Socket_Open(SOCKETPTR sp, SOCKETTYPE socketType);
00172
00176 CHIPCARD_API ERRORCODE Socket_Close(SOCKETPTR sp);
00178
00185 CHIPCARD_API ERRORCODE Socket_Connect(SOCKETPTR sp, const INETADDRESS *addr);
00186 CHIPCARD_API ERRORCODE Socket_Bind(SOCKETPTR sp, const INETADDRESS *addr);
00187 CHIPCARD_API ERRORCODE Socket_Listen(SOCKETPTR sp, int backlog);
00188 CHIPCARD_API ERRORCODE Socket_Accept(SOCKETPTR sp, INETADDRESSPTR addr, SOCKETPTR newsock);
00190
00198
00199 CHIPCARD_API SOCKETTYPE Socket_GetSocketType(SOCKETPTR sp);
00200
00201 CHIPCARD_API ERRORCODE Socket_GetPeerAddr(SOCKETPTR sp, INETADDRESSPTR addr);
00202
00211 CHIPCARD_API ERRORCODE Socket_Select(SOCKETSETPTR rs,
00212 SOCKETSETPTR ws,
00213 SOCKETSETPTR xs,
00214 int timeout);
00215
00220 CHIPCARD_API ERRORCODE Socket_WaitForRead(SOCKETPTR sp,int timeout);
00221
00226 CHIPCARD_API ERRORCODE Socket_WaitForWrite(SOCKETPTR sp,int timeout);
00228
00236
00244 CHIPCARD_API ERRORCODE Socket_Read(SOCKETPTR sp,
00245 char *buffer,
00246 int *bsize);
00247
00255 CHIPCARD_API ERRORCODE Socket_Write(SOCKETPTR sp,
00256 const char *buffer,
00257 int *bsize);
00258
00268 CHIPCARD_API ERRORCODE Socket_ReadFrom(SOCKETPTR sp,
00269 INETADDRESSPTR addr,
00270 char *buffer,
00271 int *bsize);
00280 CHIPCARD_API ERRORCODE Socket_WriteTo(SOCKETPTR sp,
00281 const INETADDRESS *addr,
00282 const char *buffer,
00283 int *bsize);
00285
00292 CHIPCARD_API ERRORCODE Socket_SetBlocking(SOCKETPTR sp,
00293 int fl);
00294 CHIPCARD_API ERRORCODE Socket_SetBroadcast(SOCKETPTR sp,
00295 int fl);
00296 CHIPCARD_API ERRORCODE Socket_GetSocketError(SOCKETPTR sp);
00297
00298 CHIPCARD_API ERRORCODE Socket_SetReuseAddress(SOCKETPTR sp, int fl);
00300
00301
00303
00304
00306
00307 #ifdef __cplusplus
00308 }
00309 #endif
00310
00311 #endif // MOD_SOCKET_H
00312
00313
00314