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/inherit.h>
00082 #include <gwenhywfar/nettransport.h>
00083 #include <gwenhywfar/netmsg.h>
00084 #include <gwenhywfar/ringbuffer.h>
00085
00086 #define GWEN_NETCONNECTION_CHECK_WANTREAD 0x0001
00087 #define GWEN_NETCONNECTION_CHECK_WANTWRITE 0x0002
00088
00089 #ifdef __cplusplus
00090 extern "C" {
00091 #endif
00092
00093 typedef enum {
00094 GWEN_NetConnectionWorkResult_NoChange=0,
00095 GWEN_NetConnectionWorkResult_Change,
00096 GWEN_NetConnectionWorkResult_Error
00097 } GWEN_NETCONNECTION_WORKRESULT;
00098
00099
00100 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_NETCONNECTION, GWEN_NetConnection, GWENHYWFAR_API)
00101 GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_NETCONNECTION, GWENHYWFAR_API)
00102
00103
00104
00110 typedef GWEN_NETCONNECTION_WORKRESULT
00111 (*GWEN_NETCONNECTION_WORKFN)(GWEN_NETCONNECTION *conn);
00113 typedef void (*GWEN_NETCONNECTION_UPFN)(GWEN_NETCONNECTION *conn);
00115 typedef void (*GWEN_NETCONNECTION_DOWNFN)(GWEN_NETCONNECTION *conn);
00116
00117 typedef GWEN_TYPE_UINT32
00118 (*GWEN_NETCONNECTION_CHECKFN)(GWEN_NETCONNECTION *conn);
00119
00137 GWENHYWFAR_API
00138 GWEN_NETCONNECTION *GWEN_NetConnection_new(GWEN_NETTRANSPORT *tr,
00139 int take,
00140 GWEN_TYPE_UINT32 libId);
00141
00142 GWENHYWFAR_API
00143 void GWEN_NetConnection_free(GWEN_NETCONNECTION *conn);
00144
00145 GWENHYWFAR_API
00146 void GWEN_NetConnection_Attach(GWEN_NETCONNECTION *conn);
00147
00163 GWENHYWFAR_API
00164 int GWEN_NetConnection_Read(GWEN_NETCONNECTION *conn,
00165 char *buffer,
00166 GWEN_TYPE_UINT32 *bsize);
00167
00178 GWENHYWFAR_API
00179 int GWEN_NetConnection_Read_Wait(GWEN_NETCONNECTION *conn,
00180 char *buffer,
00181 GWEN_TYPE_UINT32 *bsize,
00182 int timeout);
00183
00184
00193 GWENHYWFAR_API
00194 int GWEN_NetConnection_Write(GWEN_NETCONNECTION *conn,
00195 const char *buffer,
00196 GWEN_TYPE_UINT32 *bsize);
00197
00211 GWENHYWFAR_API
00212 int GWEN_NetConnection_Write_Wait(GWEN_NETCONNECTION *conn,
00213 const char *buffer,
00214 GWEN_TYPE_UINT32 *bsize,
00215 int timeout);
00216
00225 GWENHYWFAR_API
00226 int GWEN_NetConnection_Flush(GWEN_NETCONNECTION *conn,
00227 int timeout);
00243 GWENHYWFAR_API
00244 int GWEN_NetConnection_StartConnect(GWEN_NETCONNECTION *conn);
00245
00252 GWENHYWFAR_API
00253 int GWEN_NetConnection_Connect_Wait(GWEN_NETCONNECTION *conn,
00254 int timeout);
00255
00265 GWENHYWFAR_API
00266 int GWEN_NetConnection_StartListen(GWEN_NETCONNECTION *conn);
00267
00274 GWENHYWFAR_API
00275 GWEN_NETTRANSPORT*
00276 GWEN_NetConnection_GetNextIncoming(GWEN_NETCONNECTION *conn);
00277
00286 GWENHYWFAR_API
00287 GWEN_NETTRANSPORT*
00288 GWEN_NetConnection_GetNextIncoming_Wait(GWEN_NETCONNECTION *conn,
00289 int timeout);
00290
00298 GWENHYWFAR_API
00299 int GWEN_NetConnection_StartDisconnect(GWEN_NETCONNECTION *conn);
00300
00309 GWENHYWFAR_API
00310 int GWEN_NetConnection_Disconnect_Wait(GWEN_NETCONNECTION *conn,
00311 int timeout);
00328 GWENHYWFAR_API
00329 GWEN_NETCONNECTION_WORKRESULT
00330 GWEN_NetConnection_WorkIO(GWEN_NETCONNECTION *conn);
00331
00341 GWENHYWFAR_API
00342 int GWEN_NetConnection_WaitForStatus(GWEN_NETCONNECTION *conn,
00343 GWEN_NETTRANSPORT_STATUS expStatus,
00344 int timeout);
00345
00353 GWENHYWFAR_API
00354 GWEN_NETCONNECTION_WORKRESULT
00355 GWEN_NetConnection_Walk(GWEN_NETCONNECTION_LIST *connList,
00356 int timeout);
00357
00376 GWENHYWFAR_API
00377 GWEN_NETCONNECTION_WORKRESULT
00378 GWEN_NetConnection_Work(GWEN_NETCONNECTION *conn);
00379
00392 GWENHYWFAR_API
00393 void GWEN_NetConnection_Up(GWEN_NETCONNECTION *conn);
00394
00400 GWENHYWFAR_API
00401 void GWEN_NetConnection_Down(GWEN_NETCONNECTION *conn);
00402
00410 GWENHYWFAR_API
00411 void GWEN_NetConnection_SetWorkFn(GWEN_NETCONNECTION *conn,
00412 GWEN_NETCONNECTION_WORKFN fn);
00413
00414 GWENHYWFAR_API
00415 void GWEN_NetConnection_SetUpFn(GWEN_NETCONNECTION *conn,
00416 GWEN_NETCONNECTION_UPFN fn);
00417
00418 GWENHYWFAR_API
00419 void GWEN_NetConnection_SetDownFn(GWEN_NETCONNECTION *conn,
00420 GWEN_NETCONNECTION_DOWNFN fn);
00421 GWENHYWFAR_API
00422 void GWEN_NetConnection_SetCheckFn(GWEN_NETCONNECTION *conn,
00423 GWEN_NETCONNECTION_CHECKFN fn);
00427 #if (defined(GWEN_EXTEND_NETCONNECTION) || defined(DOXYGEN))
00441
00448 GWENHYWFAR_API
00449 GWEN_RINGBUFFER *GWEN_NetConnection_GetReadBuffer(GWEN_NETCONNECTION *conn);
00450
00457 GWENHYWFAR_API
00458 GWEN_RINGBUFFER *GWEN_NetConnection_GetWriteBuffer(GWEN_NETCONNECTION *conn);
00459
00465 GWENHYWFAR_API
00466 void GWEN_NetConnection_AddInMsg(GWEN_NETCONNECTION *conn,
00467 GWEN_NETMSG *msg);
00468
00474 GWENHYWFAR_API
00475 GWEN_NETMSG *GWEN_NetConnection_GetOutMsg(GWEN_NETCONNECTION *conn);
00476
00482 GWENHYWFAR_API
00483 GWEN_NETMSG *GWEN_NetConnection_PeekOutMsg(const GWEN_NETCONNECTION *conn);
00484
00486 #endif
00487
00488
00498 GWENHYWFAR_API
00499 GWEN_NETMSG *GWEN_NetConnection_GetInMsg(GWEN_NETCONNECTION *conn);
00500
00506 GWENHYWFAR_API
00507 GWEN_NETMSG *GWEN_NetConnection_GetInMsg_Wait(GWEN_NETCONNECTION *conn,
00508 int timeout);
00509
00515 GWENHYWFAR_API
00516 GWEN_NETMSG *GWEN_NetConnection_PeekInMsg(const GWEN_NETCONNECTION *conn);
00517
00522 GWENHYWFAR_API
00523 void GWEN_NetConnection_AddOutMsg(GWEN_NETCONNECTION *conn,
00524 GWEN_NETMSG *msg);
00525
00538 GWENHYWFAR_API
00539 GWEN_NETTRANSPORT*
00540 GWEN_NetConnection_GetTransportLayer(const GWEN_NETCONNECTION *conn);
00541
00542
00546 GWENHYWFAR_API
00547 const GWEN_INETADDRESS*
00548 GWEN_NetConnection_GetPeerAddr(const GWEN_NETCONNECTION *conn);
00549
00554 GWENHYWFAR_API
00555 GWEN_TYPE_UINT32 GWEN_NetConnection_GetFlags(const GWEN_NETCONNECTION *conn);
00556
00557
00562 GWENHYWFAR_API
00563 GWEN_NETTRANSPORT_STATUS
00564 GWEN_NetConnection_GetStatus(const GWEN_NETCONNECTION *conn);
00565
00566 GWENHYWFAR_API
00567 void GWEN_NetConnection_SetStatus(GWEN_NETCONNECTION *conn,
00568 GWEN_NETTRANSPORT_STATUS nst);
00569
00574 GWENHYWFAR_API
00575 void GWEN_NetConnection_SetFlags(GWEN_NETCONNECTION *conn,
00576 GWEN_TYPE_UINT32 fl);
00577
00584 GWENHYWFAR_API
00585 GWEN_TYPE_UINT32
00586 GWEN_NetConnection_GetLibraryMark(const GWEN_NETCONNECTION *conn);
00587
00593 GWENHYWFAR_API
00594 GWEN_TYPE_UINT32
00595 GWEN_NetConnection_GetUserMark(const GWEN_NETCONNECTION *conn);
00596
00602 GWENHYWFAR_API
00603 void GWEN_NetConnection_SetUserMark(GWEN_NETCONNECTION *conn,
00604 GWEN_TYPE_UINT32 m);
00605
00615 GWENHYWFAR_API
00616 double GWEN_NetConnection_GetIdleTime(const GWEN_NETCONNECTION *conn);
00617
00618
00623 GWENHYWFAR_API
00624 void GWEN_NetConnection_SetDownAfterSend(GWEN_NETCONNECTION *conn, int i);
00625
00630 GWENHYWFAR_API
00631 int GWEN_NetConnection_GetDownAfterSend(GWEN_NETCONNECTION *conn);
00632
00633 GWENHYWFAR_API
00634 void GWEN_NetConnection_Reset(GWEN_NETCONNECTION *conn);
00635
00638 GWENHYWFAR_API
00639 void GWEN_NetConnection_Dump(const GWEN_NETCONNECTION *conn);
00640
00642
00643
00644 #ifdef __cplusplus
00645 }
00646 #endif
00647
00648 #endif
00649
00650
00651
00652
00653