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
00028
00029 #ifndef GWEN_NETLAYER_H
00030 #define GWEN_NETLAYER_H
00031
00032
00033 #include <gwenhywfar/misc.h>
00034 #include <gwenhywfar/list2.h>
00035 #include <gwenhywfar/inherit.h>
00036 #include <gwenhywfar/inetaddr.h>
00037 #include <gwenhywfar/inetsocket.h>
00038 #include <gwenhywfar/buffer.h>
00039 #include <gwenhywfar/bufferedio.h>
00040
00041 #include <time.h>
00042
00043
00044 typedef struct GWEN_NETLAYER GWEN_NETLAYER;
00045
00046 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_NETLAYER, GWEN_NetLayer, GWENHYWFAR_API)
00047 GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_NETLAYER, GWENHYWFAR_API)
00048
00058 #define GWEN_NETLAYER_FLAGS_SPECMASK 0x000000FF
00059
00060 #define GWEN_NETLAYER_FLAGS_EOFMET 0x80000000
00061 #define GWEN_NETLAYER_FLAGS_BROKENPIPE 0x40000000
00062 #define GWEN_NETLAYER_FLAGS_WANTREAD 0x20000000
00063 #define GWEN_NETLAYER_FLAGS_WANTWRITE 0x10000000
00064 #define GWEN_NETLAYER_FLAGS_PASSIVE 0x08000000
00065 #define GWEN_NETLAYER_FLAGS_PKG_BASED 0x04000000
00066 #define GWEN_NETLAYER_FLAGS_INPKG 0x02000000
00067 #define GWEN_NETLAYER_FLAGS_OUTPKG 0x01000000
00068
00071 #define GWEN_NETLAYER_DEF_BACKLOG 10
00072
00073
00074 typedef enum {
00075 GWEN_NetLayerStatus_Unconnected=0,
00076 GWEN_NetLayerStatus_Connecting,
00077 GWEN_NetLayerStatus_Connected,
00078 GWEN_NetLayerStatus_Disconnecting,
00079 GWEN_NetLayerStatus_Disconnected,
00080 GWEN_NetLayerStatus_Listening,
00081 GWEN_NetLayerStatus_Disabled,
00082 GWEN_NetLayerStatus_Unknown=999
00083 } GWEN_NETLAYER_STATUS;
00084
00085 GWENHYWFAR_API
00086 GWEN_NETLAYER_STATUS GWEN_NetLayerStatus_fromString(const char *s);
00087
00088 GWENHYWFAR_API
00089 const char *GWEN_NetLayerStatus_toString(GWEN_NETLAYER_STATUS st);
00090
00091
00092 typedef enum {
00093 GWEN_NetLayerResult_Idle=0,
00094 GWEN_NetLayerResult_Changed,
00095 GWEN_NetLayerResult_WouldBlock,
00096 GWEN_NetLayerResult_Error,
00097 GWEN_NetLayerResult_Unknown=999
00098 } GWEN_NETLAYER_RESULT;
00099
00100 GWENHYWFAR_API
00101 GWEN_NETLAYER_RESULT GWEN_NetLayerResult_fromString(const char *s);
00102
00103 GWENHYWFAR_API
00104 const char *GWEN_NetLayerResult_toString(GWEN_NETLAYER_RESULT res);
00105
00106
00117 typedef int (*GWEN_NETLAYER_GETPASSWD_FN)(GWEN_NETLAYER *nl,
00118 char *buffer, int num,
00119 int rwflag);
00120
00121
00122 typedef GWEN_NETLAYER_RESULT (*GWEN_NETLAYER_WORK_FN)(GWEN_NETLAYER *nl);
00123
00124
00125 typedef int (*GWEN_NETLAYER_READ_FN)(GWEN_NETLAYER *nl,
00126 char *buffer,
00127 int *bsize);
00128
00129 typedef int (*GWEN_NETLAYER_WRITE_FN)(GWEN_NETLAYER *nl,
00130 const char *buffer,
00131 int *bsize);
00132
00133 typedef int (*GWEN_NETLAYER_CONNECT_FN)(GWEN_NETLAYER *nl);
00134
00135 typedef int (*GWEN_NETLAYER_DISCONNECT_FN)(GWEN_NETLAYER *nl);
00136
00137 typedef int (*GWEN_NETLAYER_LISTEN_FN)(GWEN_NETLAYER *nl);
00138
00139 typedef int (*GWEN_NETLAYER_ADDSOCKETS_FN)(GWEN_NETLAYER *nl,
00140 GWEN_SOCKETSET *readSet,
00141 GWEN_SOCKETSET *writeSet,
00142 GWEN_SOCKETSET *exSet);
00143
00144 typedef void (*GWEN_NETLAYER_BASESTATUS_CHG_FN)(GWEN_NETLAYER *nl,
00145 GWEN_NETLAYER_STATUS newst);
00146
00147 typedef void (*GWEN_NETLAYER_STATUS_CHG_FN)(GWEN_NETLAYER *nl,
00148 GWEN_NETLAYER_STATUS newst);
00149
00150 typedef int (*GWEN_NETLAYER_BEGIN_OUT_PACKET_FN)(GWEN_NETLAYER *nl,
00151 int totalSize);
00152
00153 typedef int (*GWEN_NETLAYER_END_OUT_PACKET_FN)(GWEN_NETLAYER *nl);
00154
00155 typedef int (*GWEN_NETLAYER_BEGIN_IN_PACKET_FN)(GWEN_NETLAYER *nl);
00156 typedef int (*GWEN_NETLAYER_CHECK_IN_PACKET_FN)(GWEN_NETLAYER *nl);
00157
00158
00159 GWENHYWFAR_API
00160 GWEN_NETLAYER *GWEN_NetLayer_new(const char *typeName);
00161
00162 GWENHYWFAR_API
00163 void GWEN_NetLayer_free(GWEN_NETLAYER *nl);
00164
00165 GWENHYWFAR_API
00166 void GWEN_NetLayer_Attach(GWEN_NETLAYER *nl);
00167
00168 GWENHYWFAR_API
00169 const char *GWEN_NetLayer_GetTypeName(const GWEN_NETLAYER *nl);
00170
00171 GWENHYWFAR_API
00172 GWEN_NETLAYER_STATUS GWEN_NetLayer_GetStatus(const GWEN_NETLAYER *nl);
00173
00174 GWENHYWFAR_API
00175 void GWEN_NetLayer_SetStatus(GWEN_NETLAYER *nl, GWEN_NETLAYER_STATUS st);
00176
00177 GWENHYWFAR_API
00178 time_t GWEN_NetLayer_GetLastStatusChangeTime(const GWEN_NETLAYER *nl);
00179
00180 GWENHYWFAR_API
00181 GWEN_TYPE_UINT32 GWEN_NetLayer_GetFlags(const GWEN_NETLAYER *nl);
00182
00183 GWENHYWFAR_API
00184 void GWEN_NetLayer_SetFlags(GWEN_NETLAYER *nl, GWEN_TYPE_UINT32 fl);
00185
00186 GWENHYWFAR_API
00187 void GWEN_NetLayer_AddFlags(GWEN_NETLAYER *nl, GWEN_TYPE_UINT32 fl);
00188
00189 GWENHYWFAR_API
00190 void GWEN_NetLayer_SubFlags(GWEN_NETLAYER *nl, GWEN_TYPE_UINT32 fl);
00191
00192 GWENHYWFAR_API
00193 GWEN_NETLAYER *GWEN_NetLayer_GetBaseLayer(const GWEN_NETLAYER *nl);
00194
00195 GWENHYWFAR_API
00196 void GWEN_NetLayer_SetBaseLayer(GWEN_NETLAYER *nl, GWEN_NETLAYER *baseLayer);
00197
00198 GWENHYWFAR_API
00199 GWEN_NETLAYER *GWEN_NetLayer_GetParentLayer(const GWEN_NETLAYER *nl);
00200
00201 GWENHYWFAR_API
00202 void GWEN_NetLayer_SetParentLayer(GWEN_NETLAYER *nl, GWEN_NETLAYER *pLayer);
00203
00204 GWENHYWFAR_API
00205 void GWEN_NetLayer_AddIncomingLayer(GWEN_NETLAYER *nl, GWEN_NETLAYER *newnl);
00206
00207 GWENHYWFAR_API
00208 GWEN_NETLAYER *GWEN_NetLayer_PeekIncomingLayer(const GWEN_NETLAYER *nl);
00209
00210 GWENHYWFAR_API
00211 GWEN_NETLAYER *GWEN_NetLayer_GetIncomingLayer(GWEN_NETLAYER *nl);
00212
00213 GWENHYWFAR_API
00214 GWEN_NETLAYER *GWEN_NetLayer_GetIncomingLayer_Wait(GWEN_NETLAYER *nl,
00215 int timeout);
00216
00217 GWENHYWFAR_API
00218 int GWEN_NetLayer_GetIncomingLayerCount(const GWEN_NETLAYER *nl);
00219
00220 GWENHYWFAR_API
00221 void GWEN_NetLayer_DelIncomingLayers(GWEN_NETLAYER *nl);
00222
00223
00224 GWENHYWFAR_API
00225 const GWEN_INETADDRESS *GWEN_NetLayer_GetLocalAddr(const GWEN_NETLAYER *nl);
00226
00227 GWENHYWFAR_API
00228 void GWEN_NetLayer_SetLocalAddr(GWEN_NETLAYER *nl,
00229 const GWEN_INETADDRESS *addr);
00230
00231 GWENHYWFAR_API
00232 const GWEN_INETADDRESS *GWEN_NetLayer_GetPeerAddr(const GWEN_NETLAYER *nl);
00233
00234 GWENHYWFAR_API
00235 void GWEN_NetLayer_SetPeerAddr(GWEN_NETLAYER *nl,
00236 const GWEN_INETADDRESS *addr);
00237
00238 GWENHYWFAR_API
00239 int GWEN_NetLayer_GetBackLog(const GWEN_NETLAYER *nl);
00240
00241 GWENHYWFAR_API
00242 void GWEN_NetLayer_SetBackLog(GWEN_NETLAYER *nl, int i);
00243
00244 GWENHYWFAR_API
00245 int GWEN_NetLayer_GetInBodySize(const GWEN_NETLAYER *nl);
00246
00247 GWENHYWFAR_API
00248 void GWEN_NetLayer_SetInBodySize(GWEN_NETLAYER *nl, int i);
00249
00250 GWENHYWFAR_API
00251 int GWEN_NetLayer_GetOutBodySize(const GWEN_NETLAYER *nl);
00252
00253 GWENHYWFAR_API
00254 void GWEN_NetLayer_SetOutBodySize(GWEN_NETLAYER *nl, int i);
00255
00256
00257 GWENHYWFAR_API
00258 void GWEN_NetLayer_SetGetPasswordFn(GWEN_NETLAYER *nl,
00259 GWEN_NETLAYER_GETPASSWD_FN f);
00260
00261 GWENHYWFAR_API
00262 void GWEN_NetLayer_SetWorkFn(GWEN_NETLAYER *nl, GWEN_NETLAYER_WORK_FN f);
00263
00264 GWENHYWFAR_API
00265 void GWEN_NetLayer_SetReadFn(GWEN_NETLAYER *nl, GWEN_NETLAYER_READ_FN f);
00266
00267 GWENHYWFAR_API
00268 void GWEN_NetLayer_SetWriteFn(GWEN_NETLAYER *nl, GWEN_NETLAYER_WRITE_FN f);
00269
00270 GWENHYWFAR_API
00271 void GWEN_NetLayer_SetConnectFn(GWEN_NETLAYER *nl,
00272 GWEN_NETLAYER_CONNECT_FN f);
00273
00274 GWENHYWFAR_API
00275 void GWEN_NetLayer_SetDisconnectFn(GWEN_NETLAYER *nl,
00276 GWEN_NETLAYER_DISCONNECT_FN f);
00277
00278 GWENHYWFAR_API
00279 void GWEN_NetLayer_SetListenFn(GWEN_NETLAYER *nl,
00280 GWEN_NETLAYER_LISTEN_FN f);
00281
00282 GWENHYWFAR_API
00283 void GWEN_NetLayer_SetAddSocketsFn(GWEN_NETLAYER *nl,
00284 GWEN_NETLAYER_ADDSOCKETS_FN f);
00285
00286 GWENHYWFAR_API
00287 void GWEN_NetLayer_SetBaseStatusChangeFn(GWEN_NETLAYER *nl,
00288 GWEN_NETLAYER_BASESTATUS_CHG_FN f);
00289
00290 GWENHYWFAR_API
00291 void GWEN_NetLayer_SetStatusChangeFn(GWEN_NETLAYER *nl,
00292 GWEN_NETLAYER_STATUS_CHG_FN f);
00293
00294 GWENHYWFAR_API
00295 void GWEN_NetLayer_SetBeginOutPacketFn(GWEN_NETLAYER *nl,
00296 GWEN_NETLAYER_BEGIN_OUT_PACKET_FN f);
00297
00298 GWENHYWFAR_API
00299 void GWEN_NetLayer_SetEndOutPacketFn(GWEN_NETLAYER *nl,
00300 GWEN_NETLAYER_END_OUT_PACKET_FN f);
00301
00302 GWENHYWFAR_API
00303 void GWEN_NetLayer_SetBeginInPacketFn(GWEN_NETLAYER *nl,
00304 GWEN_NETLAYER_BEGIN_IN_PACKET_FN f);
00305
00306 GWENHYWFAR_API
00307 void GWEN_NetLayer_SetCheckInPacketFn(GWEN_NETLAYER *nl,
00308 GWEN_NETLAYER_CHECK_IN_PACKET_FN f);
00309
00310
00311
00319
00320 GWENHYWFAR_API
00321 int GWEN_NetLayer_GetPassword(GWEN_NETLAYER *nl,
00322 char *buffer, int num,
00323 int rwflag);
00324
00325
00326 GWENHYWFAR_API
00327 GWEN_NETLAYER_RESULT GWEN_NetLayer_Work(GWEN_NETLAYER *nl);
00328
00329 GWENHYWFAR_API
00330 int GWEN_NetLayer_Read(GWEN_NETLAYER *nl,
00331 char *buffer,
00332 int *bsize);
00333
00334 GWENHYWFAR_API
00335 int GWEN_NetLayer_Read_Wait(GWEN_NETLAYER *nl,
00336 char *buffer, int *bsize,
00337 int timeout);
00338
00339 GWENHYWFAR_API
00340 int GWEN_NetLayer_Write(GWEN_NETLAYER *nl,
00341 const char *buffer,
00342 int *bsize);
00343
00344 GWENHYWFAR_API
00345 int GWEN_NetLayer_Write_Wait(GWEN_NETLAYER *nl,
00346 const char *buffer, int *bsize,
00347 int timeout);
00348
00349 GWENHYWFAR_API
00350 int GWEN_NetLayer_WaitForStatus(GWEN_NETLAYER *nl,
00351 GWEN_NETLAYER_STATUS nlst,
00352 int timeout);
00353
00354
00355 GWENHYWFAR_API
00356 int GWEN_NetLayer_Connect(GWEN_NETLAYER *nl);
00357
00358 GWENHYWFAR_API
00359 int GWEN_NetLayer_Connect_Wait(GWEN_NETLAYER *nl, int timeout);
00360
00361 GWENHYWFAR_API
00362 int GWEN_NetLayer_Disconnect(GWEN_NETLAYER *nl);
00363
00364 GWENHYWFAR_API
00365 int GWEN_NetLayer_Disconnect_Wait(GWEN_NETLAYER *nl, int timeout);
00366
00367 GWENHYWFAR_API
00368 int GWEN_NetLayer_Listen(GWEN_NETLAYER *nl);
00369
00370 GWENHYWFAR_API
00371 int GWEN_NetLayer_AddSockets(GWEN_NETLAYER *nl,
00372 GWEN_SOCKETSET *readSet,
00373 GWEN_SOCKETSET *writeSet,
00374 GWEN_SOCKETSET *exSet);
00375
00379 GWENHYWFAR_API
00380 void GWEN_NetLayer_BaseStatusChange(GWEN_NETLAYER *nl,
00381 GWEN_NETLAYER_STATUS newst);
00389
00390 GWENHYWFAR_API
00391 int GWEN_NetLayer_BeginOutPacket(GWEN_NETLAYER *nl, int totalSize);
00392
00393 GWENHYWFAR_API
00394 int GWEN_NetLayer_EndOutPacket(GWEN_NETLAYER *nl);
00395
00396 GWENHYWFAR_API
00397 int GWEN_NetLayer_EndOutPacket_Wait(GWEN_NETLAYER *nl, int timeout);
00398
00399 GWENHYWFAR_API
00400 int GWEN_NetLayer_BeginInPacket(GWEN_NETLAYER *nl);
00404 GWENHYWFAR_API
00405 int GWEN_NetLayer_CheckInPacket(GWEN_NETLAYER *nl);
00409 GWENHYWFAR_API
00410 GWEN_NETLAYER *GWEN_NetLayer_FindBaseLayer(const GWEN_NETLAYER *nl,
00411 const char *tname);
00412
00413
00414 GWENHYWFAR_API
00415 int GWEN_NetLayer_RecvPacket(GWEN_NETLAYER *nl, GWEN_BUFFER *mbuf,
00416 int timeout);
00417
00418 GWENHYWFAR_API
00419 int GWEN_NetLayer_RecvPacketBio(GWEN_NETLAYER *nl,
00420 GWEN_BUFFEREDIO *bio,
00421 int timeout);
00422
00423 GWENHYWFAR_API
00424 int GWEN_NetLayer_SendPacket(GWEN_NETLAYER *nl,
00425 const char *dPtr, int dLen,
00426 int timeout);
00427
00428 GWENHYWFAR_API
00429 int GWEN_NetLayer_SendPacketBio(GWEN_NETLAYER *nl,
00430 GWEN_BUFFEREDIO *bio,
00431 int timeout);
00432
00433
00434 #endif
00435
00436
00437
00438