1/* 2 File: IrLAPConn.h 3 4 Contains: Methods for implementing IrLAPConn 5 6 7*/ 8 9 10#ifndef __IRLAPCONN_H 11#define __IRLAPCONN_H 12 13#include "IrDATypes.h" 14#include "IrStream.h" 15#include "IrEvent.h" 16 17 18// Forward reference 19class TIrGlue; 20class TIrLAP; 21class TLSAPConn; 22class TLMPDUHeader; 23class CBufferSegment; 24 25 26 27// Constants 28 29enum IrLAPConnStates 30{ 31 kIrLAPConnStandby, 32 kIrLAPConnConnectOrListen, 33 kIrLAPConnActive 34}; 35 36 37// -------------------------------------------------------------------------------------------------------------------- 38// TIrLAPConn 39// -------------------------------------------------------------------------------------------------------------------- 40 41class TIrLAPConn : public TIrStream 42{ 43 OSDeclareDefaultStructors(TIrLAPConn); 44 45 public: 46 static TIrLAPConn *tIrLAPConn(TIrGlue* irda); 47 void free(void); 48 49 Boolean Init(TIrGlue* irda); 50 void Reset(); 51 void DoIdleDisconnect(); // disconnect now if idle 52 53 54 void Demultiplexor(CBufferSegment* inputBuffer); 55 ULong FillInLMPDUHeader(TIrPutRequest* putRequest, UByte* buffer); 56 57 void TimerComplete(ULong refCon); 58 59 private: 60 61 // TIrStream override 62 void NextState(ULong event); 63 64 void HandleStandbyStateEvent(ULong event); 65 void HandleConnectOrListenStateEvent(ULong event); 66 void HandleActiveStateEvent(ULong event); 67 68 void HandleGetDataRequest(); 69 void CleanupPendingGetRequestsAndReplies(TLSAPConn* lsapConn, IrDAErr returnCode); 70 void CancelPendingGetRequests(TLSAPConn* lsapConn, IrDAErr returnCode); 71 void ReplyToInvalidFrame(TLMPDUHeader& header, UByte replyOpCode, UByte replyInfo); 72 Boolean ExtractHeader(CBufferSegment* inputBuffer, TLMPDUHeader& header, ULong& length); 73 Boolean DataDelivered(TIrGetRequest* getRequest, TLMPDUHeader& header, ULong headerLength, CBufferSegment* dataBuffer); 74 75 void StartIdleDisconnectTimer(void); 76 void StopIdleDisconnectTimer(void); 77 78 // Fields� 79 80 UByte fState; 81 Boolean fConnected; 82 ULong fPeerDevAddr; 83 CList* fLSAPConnList; 84 85 CList* fPendingGetRequests; 86 CList* fUnmatchedGetReplys; 87 CList* fPendingRequests; // requests on hold until disconnect done 88 Boolean fDisconnectPending; // if a lap disconnect is pending 89}; 90 91#endif // __IRLAPCONN_H 92