00001
00042 #ifndef __LIB3195_BEEPFRAME_H_INCLUDED__
00043 #define __LIB3195_BEEPFRAME_H_INCLUDED__ 1
00044
00045 #include "beepmessage.h"
00046 #include "beepchannel.h"
00047 #define sbFramCHECKVALIDOBJECT(x) {assert(x != NULL); assert(x->OID == OIDsbFram);}
00048
00050 enum sbFramState_
00051 {
00052
00053 sbFRAMSTATE_WAITING_HDR1,
00054 sbFRAMSTATE_WAITING_HDR2,
00055 sbFRAMSTATE_WAITING_HDR3,
00056 sbFRAMSTATE_WAITING_SP_CHAN,
00057 sbFRAMSTATE_IN_CHAN,
00058 sbFRAMSTATE_WAITING_SP_MSGNO,
00059 sbFRAMSTATE_IN_MSGNO,
00060 sbFRAMSTATE_WAITING_SP_MORE,
00061 sbFRAMSTATE_IN_MORE,
00062 sbFRAMSTATE_WAITING_SP_SEQNO,
00063 sbFRAMSTATE_IN_SEQNO,
00064 sbFRAMSTATE_WAITING_SP_SIZE,
00065 sbFRAMSTATE_IN_SIZE,
00066 sbFRAMSTATE_WAITING_SP_ANSNO,
00067 sbFRAMSTATE_IN_ANSNO,
00068 sbFRAMSTATE_WAITING_SP_ACKNO,
00069 sbFRAMSTATE_IN_ACKNO,
00070 sbFRAMSTATE_WAITING_SP_WINDOW,
00071 sbFRAMSTATE_IN_WINDOW,
00072 sbFRAMSTATE_WAITING_HDRCR,
00073 sbFRAMSTATE_WAITING_HDRLF,
00074 sbFRAMSTATE_IN_PAYLOAD,
00075 sbFRAMSTATE_WAITING_END1,
00076 sbFRAMSTATE_WAITING_END2,
00077 sbFRAMSTATE_WAITING_END3,
00078 sbFRAMSTATE_WAITING_END4,
00079 sbFRAMSTATE_WAITING_END5,
00080 sbFRAMSTATE_RECEIVED,
00082
00083 sbFRAMSTATE_BEING_BUILD,
00084 sbFRAMSTATE_READY_TO_SEND,
00085 sbFRAMSTATE_SENDING,
00086 sbFRAMSTATE_SENT,
00088 sbFRAMSTATE_UNKNOWN = 0
00089 };
00090 typedef enum sbFramState_ sbFramState;
00091
00092 struct sbFramObject
00096 {
00097 srObjID OID;
00098 struct sMesgObject* pMsg;
00101 sbFramState iState;
00102 char* szRawBuf;
00103 int iFrameLen;
00104 BEEPHdrID idHdr;
00105 SBackno uAckno;
00106 SBwindow uWindow;
00107 SBchannel uChannel;
00108 SBmsgno uMsgno;
00109 SBseqno uSeqno;
00110 SBsize uSize;
00111 char cMore;
00112 SBansno uAnsno;
00113 #if FEATURE_LISTENER == 1
00114 unsigned uBytesSend;
00115 struct sbChanObject *pChan;
00116 struct sbStrBObject *pStrBuf;
00117 unsigned uToReceive;
00118 void (*OnFramDestroy)(struct sbFramObject*);
00119 void* pUsr;
00120 #endif
00121 };
00122 typedef struct sbFramObject sbFramObj;
00123
00124 char* sbFramGetFrame(sbFramObj* pThis);
00125 int sbFramGetFrameLen(sbFramObj* pThis);
00126 BEEPHdrID sbFramGetHdrID(sbFramObj *pThis);
00128 srRetVal sbFramDestroy(sbFramObj *pThis);
00150 sbFramObj* sbFramCreateFramFromMesg(sbChanObj* pChan, sbMesgObj* pMesg, char* pszCmd, SBansno uAnsno);
00151
00171 sbFramObj* sbFramActualRecvFram(sbSessObj *pSess);
00172
00183 sbFramObj* sbFramRecvFram(sbChanObj* pChan);
00184
00197 srRetVal sbFramSendFram(sbFramObj* pThis, sbChanObj*pChan);
00198
00208 BEEPHdrID sbFramHdrID(char* szCmd);
00209
00214 srRetVal sbFramConstruct(sbFramObj **ppThis);
00215
00224 srRetVal sbFramCreateSEQFram(sbFramObj **ppThis, sbChanObj* pChan, SBackno uAckno, SBwindow uWindow);
00225
00234 srRetVal sbFramSetOnDestroyEvent(sbFramObj *pThis, void (*OnFramDestroy)(struct sbFramObject *), void *pUsr);
00235
00236 #endif