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