00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef GWEN_IOLAYER_H
00015 #define GWEN_IOLAYER_H
00016
00017 #include <gwenhywfar/list2.h>
00018
00019 #ifdef __cplusplus
00020 extern "C" {
00021 #endif
00022
00023
00053
00054
00055 typedef struct GWEN_IO_LAYER GWEN_IO_LAYER;
00056
00057 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_IO_LAYER, GWEN_Io_Layer, GWENHYWFAR_API)
00058
00059
00060 typedef enum {
00061 GWEN_Io_Layer_WorkResultError=-1,
00062 GWEN_Io_Layer_WorkResultOk=0,
00063 GWEN_Io_Layer_WorkResultBlocking
00064 } GWEN_IO_LAYER_WORKRESULT;
00065
00066
00067 typedef enum {
00068 GWEN_Io_Layer_StatusUnknown=-1,
00069 GWEN_Io_Layer_StatusUnconnected=0,
00070 GWEN_Io_Layer_StatusConnecting,
00071 GWEN_Io_Layer_StatusConnected,
00072 GWEN_Io_Layer_StatusDisconnecting,
00073 GWEN_Io_Layer_StatusDisconnected,
00074 GWEN_Io_Layer_StatusListening,
00075 GWEN_Io_Layer_StatusDisabled,
00076 } GWEN_IO_LAYER_STATUS;
00077
00078
00079 #include <gwenhywfar/iorequest.h>
00080 #include <gwenhywfar/buffer.h>
00081
00082
00092 #define GWEN_IO_LAYER_FLAGS_TAKEOVER 0x01000000
00093
00098 #define GWEN_IO_LAYER_FLAGS_PASSIVE 0x10000000
00099
00103 #define GWEN_IO_LAYER_FLAGS_PKG_BASED 0x20000000
00104
00108 #define GWEN_IO_LAYER_FLAGS_DONTCLOSE 0x40000000
00109
00114 #define GWEN_IO_LAYER_FLAGS_REGISTERED 0x80000000
00115
00123 GWENHYWFAR_API void GWEN_Io_Layer_Attach(GWEN_IO_LAYER *io);
00124 GWENHYWFAR_API void GWEN_Io_Layer_free(GWEN_IO_LAYER *io);
00133 GWENHYWFAR_API GWEN_IO_LAYER *GWEN_Io_Layer_GetBaseLayer(GWEN_IO_LAYER *io);
00134
00139 GWENHYWFAR_API GWEN_IO_LAYER *GWEN_Io_Layer_FindBaseLayerByType(GWEN_IO_LAYER *io, const char *tname);
00140
00141 GWENHYWFAR_API uint32_t GWEN_Io_Layer_GetFlags(const GWEN_IO_LAYER *io);
00142 GWENHYWFAR_API void GWEN_Io_Layer_SetFlags(GWEN_IO_LAYER *io, uint32_t f);
00143 GWENHYWFAR_API void GWEN_Io_Layer_AddFlags(GWEN_IO_LAYER *io, uint32_t f);
00144 GWENHYWFAR_API void GWEN_Io_Layer_SubFlags(GWEN_IO_LAYER *io, uint32_t f);
00145
00146
00147 GWENHYWFAR_API GWEN_IO_LAYER_STATUS GWEN_Io_Layer_GetStatus(const GWEN_IO_LAYER *io);
00148
00149 GWENHYWFAR_API GWEN_IO_LAYER *GWEN_Io_Layer_GetNextIncomingLayer(GWEN_IO_LAYER *io);
00150 GWENHYWFAR_API void GWEN_Io_Layer_ClearIncomingLayers(GWEN_IO_LAYER *io);
00151
00175 GWENHYWFAR_API int GWEN_Io_Layer_AddRequest(GWEN_IO_LAYER *io, GWEN_IO_REQUEST *r);
00176
00182 GWENHYWFAR_API int GWEN_Io_Layer_DelRequest(GWEN_IO_LAYER *io, GWEN_IO_REQUEST *r);
00183
00188 GWENHYWFAR_API int GWEN_Io_Layer_HasWaitingRequests(GWEN_IO_LAYER *io);
00200
00204 GWENHYWFAR_API int GWEN_Io_Layer_Connect(GWEN_IO_LAYER *io,
00205 uint32_t flags,
00206 uint32_t guiid, int msecs);
00207
00214 GWENHYWFAR_API int GWEN_Io_Layer_ConnectRecursively(GWEN_IO_LAYER *io,
00215 GWEN_IO_LAYER *stopAtLayer,
00216 uint32_t flags,
00217 uint32_t guiid, int msecs);
00218
00222 GWENHYWFAR_API int GWEN_Io_Layer_Disconnect(GWEN_IO_LAYER *io,
00223 uint32_t flags,
00224 uint32_t guiid, int msecs);
00225
00226
00227 GWENHYWFAR_API int GWEN_Io_Layer_Listen(GWEN_IO_LAYER *io);
00228
00229 GWENHYWFAR_API int GWEN_Io_Layer_ListenRecursively(GWEN_IO_LAYER *io, GWEN_IO_LAYER *stopAtLayer);
00230
00231
00240 GWENHYWFAR_API int GWEN_Io_Layer_DisconnectRecursively(GWEN_IO_LAYER *io,
00241 GWEN_IO_LAYER *stopAtLayer,
00242 uint32_t flags,
00243 uint32_t guiid, int msecs);
00244
00245
00246 GWENHYWFAR_API int GWEN_Io_Layer_ReadBytes(GWEN_IO_LAYER *io,
00247 uint8_t *buffer,
00248 uint32_t size,
00249 uint32_t flags,
00250 uint32_t guiid, int msecs);
00251
00252 GWENHYWFAR_API int GWEN_Io_Layer_ReadToBufferUntilEof(GWEN_IO_LAYER *io,
00253 GWEN_BUFFER *buf,
00254 uint32_t guiid, int msecs);
00255
00256 GWENHYWFAR_API int GWEN_Io_Layer_ReadPacket(GWEN_IO_LAYER *io,
00257 uint8_t *buffer,
00258 uint32_t size,
00259 uint32_t flags,
00260 uint32_t guiid, int msecs);
00261
00262 GWENHYWFAR_API int GWEN_Io_Layer_ReadPacketToBuffer(GWEN_IO_LAYER *io,
00263 GWEN_BUFFER *buf,
00264 uint32_t flags,
00265 uint32_t guiid, int msecs);
00266
00267
00268 GWENHYWFAR_API int GWEN_Io_Layer_WriteBytes(GWEN_IO_LAYER *io,
00269 const uint8_t *buffer,
00270 uint32_t size,
00271 uint32_t flags,
00272 uint32_t guiid, int msecs);
00273
00274 GWENHYWFAR_API int GWEN_Io_Layer_WriteString(GWEN_IO_LAYER *io,
00275 const char *buffer,
00276 uint32_t flags,
00277 uint32_t guiid, int msecs);
00278
00279 GWENHYWFAR_API int GWEN_Io_Layer_WriteChar(GWEN_IO_LAYER *io,
00280 char c,
00281 uint32_t flags,
00282 uint32_t guiid, int msecs);
00283
00284
00289 GWENHYWFAR_API int GWEN_Io_Layer_FlushRecursively(GWEN_IO_LAYER *io, uint32_t guiid, int msecs);
00290
00295
00296 #ifdef __cplusplus
00297 }
00298 #endif
00299
00300
00301 #endif