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_NETCONNECTION_H
00030 #define GWEN_NETCONNECTION_H
00031
00039
00040
00047 #define GWEN_NETCONNECTION_WAIT_READ 0x0001
00048
00049 #define GWEN_NETCONNECTION_WAIT_WRITE 0x0002
00050
00061 #define GWEN_NETCONNECTION_TIMEOUT_NONE (0)
00062
00063 #define GWEN_NETCONNECTION_TIMEOUT_FOREVER (-1)
00064
00071 #include <gwenhywfar/gwenhywfarapi.h>
00072 #ifdef __cplusplus
00073 extern "C" {
00074 #endif
00075 typedef struct GWEN_NETCONNECTION GWEN_NETCONNECTION;
00076 #ifdef __cplusplus
00077 }
00078 #endif
00079
00080 #include <gwenhywfar/misc.h>
00081 #include <gwenhywfar/list2.h>
00082 #include <gwenhywfar/inherit.h>
00083 #include <gwenhywfar/nettransport.h>
00084 #include <gwenhywfar/netmsg.h>
00085 #include <gwenhywfar/ringbuffer.h>
00086
00087 #define GWEN_NETCONNECTION_CHECK_WANTREAD 0x0001
00088 #define GWEN_NETCONNECTION_CHECK_WANTWRITE 0x0002
00089
00090 #ifdef __cplusplus
00091 extern "C" {
00092 #endif
00093
00094 typedef enum {
00095 GWEN_NetConnectionWorkResult_NoChange=0,
00096 GWEN_NetConnectionWorkResult_Change,
00097 GWEN_NetConnectionWorkResult_Error
00098 } GWEN_NETCONNECTION_WORKRESULT;
00099
00100
00101 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_NETCONNECTION, GWEN_NetConnection, GWENHYWFAR_API)
00102 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_NETCONNECTION, GWEN_NetConnection, GWENHYWFAR_API)
00103 GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_NETCONNECTION, GWENHYWFAR_API)
00104
00105
00106
00112 typedef GWEN_NETCONNECTION_WORKRESULT
00113 (*GWEN_NETCONNECTION_WORKFN)(GWEN_NETCONNECTION *conn);
00115 typedef void (*GWEN_NETCONNECTION_UPFN)(GWEN_NETCONNECTION *conn);
00117 typedef void (*GWEN_NETCONNECTION_DOWNFN)(GWEN_NETCONNECTION *conn);
00118
00119 typedef GWEN_TYPE_UINT32
00120 (*GWEN_NETCONNECTION_CHECKFN)(GWEN_NETCONNECTION *conn);
00121
00139 GWENHYWFAR_API
00140 GWEN_NETCONNECTION *GWEN_NetConnection_new(GWEN_NETTRANSPORT *tr,
00141 int take,
00142 GWEN_TYPE_UINT32 libId);
00143
00144 GWENHYWFAR_API
00145 void GWEN_NetConnection_free(GWEN_NETCONNECTION *conn);
00146
00147 GWENHYWFAR_API
00148 void GWEN_NetConnection_Attach(GWEN_NETCONNECTION *conn);
00149
00165 GWENHYWFAR_API
00166 int GWEN_NetConnection_Read(GWEN_NETCONNECTION *conn,
00167 char *buffer,
00168 GWEN_TYPE_UINT32 *bsize);
00169
00180 GWENHYWFAR_API
00181 int GWEN_NetConnection_Read_Wait(GWEN_NETCONNECTION *conn,
00182 char *buffer,
00183 GWEN_TYPE_UINT32 *bsize,
00184 int timeout);
00185
00186
00195 GWENHYWFAR_API
00196 int GWEN_NetConnection_Write(GWEN_NETCONNECTION *conn,
00197 const char *buffer,
00198 GWEN_TYPE_UINT32 *bsize);
00199
00213 GWENHYWFAR_API
00214 int GWEN_NetConnection_Write_Wait(GWEN_NETCONNECTION *conn,
00215 const char *buffer,
00216 GWEN_TYPE_UINT32 *bsize,
00217 int timeout);
00218
00227 GWENHYWFAR_API
00228 int GWEN_NetConnection_Flush(GWEN_NETCONNECTION *conn,
00229 int timeout);
00245 GWENHYWFAR_API
00246 int GWEN_NetConnection_StartConnect(GWEN_NETCONNECTION *conn);
00247
00254 GWENHYWFAR_API
00255 int GWEN_NetConnection_Connect_Wait(GWEN_NETCONNECTION *conn,
00256 int timeout);
00257
00267 GWENHYWFAR_API
00268 int GWEN_NetConnection_StartListen(GWEN_NETCONNECTION *conn);
00269
00276 GWENHYWFAR_API
00277 GWEN_NETTRANSPORT*
00278 GWEN_NetConnection_GetNextIncoming(GWEN_NETCONNECTION *conn);
00279
00288 GWENHYWFAR_API
00289 GWEN_NETTRANSPORT*
00290 GWEN_NetConnection_GetNextIncoming_Wait(GWEN_NETCONNECTION *conn,
00291 int timeout);
00292
00300 GWENHYWFAR_API
00301 int GWEN_NetConnection_StartDisconnect(GWEN_NETCONNECTION *conn);
00302
00311 GWENHYWFAR_API
00312 int GWEN_NetConnection_Disconnect_Wait(GWEN_NETCONNECTION *conn,
00313 int timeout);
00330 GWENHYWFAR_API
00331 GWEN_NETCONNECTION_WORKRESULT
00332 GWEN_NetConnection_WorkIO(GWEN_NETCONNECTION *conn);
00333
00343 GWENHYWFAR_API
00344 int GWEN_NetConnection_WaitForStatus(GWEN_NETCONNECTION *conn,
00345 GWEN_NETTRANSPORT_STATUS expStatus,
00346 int timeout);
00347
00355 GWENHYWFAR_API
00356 GWEN_NETCONNECTION_WORKRESULT
00357 GWEN_NetConnection_Walk(GWEN_NETCONNECTION_LIST *connList,
00358 int timeout);
00359
00378 GWENHYWFAR_API
00379 GWEN_NETCONNECTION_WORKRESULT
00380 GWEN_NetConnection_Work(GWEN_NETCONNECTION *conn);
00381
00394 GWENHYWFAR_API
00395 void GWEN_NetConnection_Up(GWEN_NETCONNECTION *conn);
00396
00402 GWENHYWFAR_API
00403 void GWEN_NetConnection_Down(GWEN_NETCONNECTION *conn);
00404
00412 GWENHYWFAR_API
00413 void GWEN_NetConnection_SetWorkFn(GWEN_NETCONNECTION *conn,
00414 GWEN_NETCONNECTION_WORKFN fn);
00415
00416 GWENHYWFAR_API
00417 void GWEN_NetConnection_SetUpFn(GWEN_NETCONNECTION *conn,
00418 GWEN_NETCONNECTION_UPFN fn);
00419
00420 GWENHYWFAR_API
00421 void GWEN_NetConnection_SetDownFn(GWEN_NETCONNECTION *conn,
00422 GWEN_NETCONNECTION_DOWNFN fn);
00423 GWENHYWFAR_API
00424 void GWEN_NetConnection_SetCheckFn(GWEN_NETCONNECTION *conn,
00425 GWEN_NETCONNECTION_CHECKFN fn);
00429 #if (defined(GWEN_EXTEND_NETCONNECTION) || defined(DOXYGEN))
00430
00443
00450 GWENHYWFAR_API
00451 GWEN_RINGBUFFER *GWEN_NetConnection_GetReadBuffer(GWEN_NETCONNECTION *conn);
00452
00459 GWENHYWFAR_API
00460 GWEN_RINGBUFFER *GWEN_NetConnection_GetWriteBuffer(GWEN_NETCONNECTION *conn);
00461
00467 GWENHYWFAR_API
00468 void GWEN_NetConnection_AddInMsg(GWEN_NETCONNECTION *conn,
00469 GWEN_NETMSG *msg);
00470
00476 GWENHYWFAR_API
00477 GWEN_NETMSG *GWEN_NetConnection_GetOutMsg(GWEN_NETCONNECTION *conn);
00478
00484 GWENHYWFAR_API
00485 GWEN_NETMSG *GWEN_NetConnection_PeekOutMsg(const GWEN_NETCONNECTION *conn);
00486
00488 #endif
00489
00490
00500 GWENHYWFAR_API
00501 GWEN_NETMSG *GWEN_NetConnection_GetInMsg(GWEN_NETCONNECTION *conn);
00502
00508 GWENHYWFAR_API
00509 GWEN_NETMSG *GWEN_NetConnection_GetInMsg_Wait(GWEN_NETCONNECTION *conn,
00510 int timeout);
00511
00517 GWENHYWFAR_API
00518 GWEN_NETMSG *GWEN_NetConnection_PeekInMsg(const GWEN_NETCONNECTION *conn);
00519
00524 GWENHYWFAR_API
00525 void GWEN_NetConnection_AddOutMsg(GWEN_NETCONNECTION *conn,
00526 GWEN_NETMSG *msg);
00527
00540 GWENHYWFAR_API
00541 GWEN_NETTRANSPORT*
00542 GWEN_NetConnection_GetTransportLayer(const GWEN_NETCONNECTION *conn);
00543
00544
00548 GWENHYWFAR_API
00549 const GWEN_INETADDRESS*
00550 GWEN_NetConnection_GetPeerAddr(const GWEN_NETCONNECTION *conn);
00551
00556 GWENHYWFAR_API
00557 GWEN_TYPE_UINT32 GWEN_NetConnection_GetFlags(const GWEN_NETCONNECTION *conn);
00558
00559
00564 GWENHYWFAR_API
00565 GWEN_NETTRANSPORT_STATUS
00566 GWEN_NetConnection_GetStatus(const GWEN_NETCONNECTION *conn);
00567
00568 GWENHYWFAR_API
00569 void GWEN_NetConnection_SetStatus(GWEN_NETCONNECTION *conn,
00570 GWEN_NETTRANSPORT_STATUS nst);
00571
00576 GWENHYWFAR_API
00577 void GWEN_NetConnection_SetFlags(GWEN_NETCONNECTION *conn,
00578 GWEN_TYPE_UINT32 fl);
00579
00586 GWENHYWFAR_API
00587 GWEN_TYPE_UINT32
00588 GWEN_NetConnection_GetLibraryMark(const GWEN_NETCONNECTION *conn);
00589
00595 GWENHYWFAR_API
00596 GWEN_TYPE_UINT32
00597 GWEN_NetConnection_GetUserMark(const GWEN_NETCONNECTION *conn);
00598
00604 GWENHYWFAR_API
00605 void GWEN_NetConnection_SetUserMark(GWEN_NETCONNECTION *conn,
00606 GWEN_TYPE_UINT32 m);
00607
00617 GWENHYWFAR_API
00618 double GWEN_NetConnection_GetIdleTime(const GWEN_NETCONNECTION *conn);
00619
00620
00625 GWENHYWFAR_API
00626 void GWEN_NetConnection_SetDownAfterSend(GWEN_NETCONNECTION *conn, int i);
00627
00632 GWENHYWFAR_API
00633 int GWEN_NetConnection_GetDownAfterSend(GWEN_NETCONNECTION *conn);
00634
00635 GWENHYWFAR_API
00636 void GWEN_NetConnection_Reset(GWEN_NETCONNECTION *conn);
00637
00640 GWENHYWFAR_API
00641 void GWEN_NetConnection_Dump(const GWEN_NETCONNECTION *conn);
00642
00644
00645
00646 #ifdef __cplusplus
00647 }
00648 #endif
00649
00650 #endif
00651
00652
00653
00654
00655