www.pudn.com > PPPOE.rar > channel.h


 
//******************************************************************** 
//	ÈÕÆÚ:	2004/08/25 - 25:8:2004   13:40 
//	Ãûǰ:	tiamo 
//	ÃèÊö:	channel 
//********************************************************************* 
 
#pragma once 
 
#define CHANNEL_SIG									MAKE_SIG('C','H','N','L') 
 
#define CHANNEL_CLOSE								0x00000001						// before create vc 
#define CHANNEL_OPEN								0x00000002						// after create vc 
#define CHANNEL_ACTIVATING							0x00000003						// after make call 
#define CHANNEL_ACTIVATED							0x00000004						// after activate vc 
#define CHANNEL_DEACTIVATING						CHANNEL_ACTIVATING				// after close call 
 
typedef struct __tagBindContext *PBIND_CONTEXT; 
 
// channel 
typedef struct __tagChannel 
{ 
	ULONG											m_ulSig;						// sig 
	LONG											m_lRefCount;					// ref 
	LONG											m_lSapRefCount;					// sap ref count 
	ULONG											m_ulState;						// state 
	NDIS_SPIN_LOCK									m_lockSelf;						// lock 
	 
	ULONG											m_ulLineId;						// line id 
	ULONG											m_ulLinkSpeed;					// speed 
	ULONG											m_ulBearerMode;					// bearer mode 
	ULONG											m_ulMediaMode;					// media mode 
	NDIS_WAN_CO_GET_LINK_INFO						m_wanCoLinkInfo;				// wan link info 
	NDIS_HANDLE										m_hNdisVcHandle;				// ndis vc handle 
	NDIS_HANDLE										m_hNdisSapHandle;				// sap handle 
	CO_AF_TAPI_SAP									m_coTapiSap;					// sap 
	PCO_CALL_PARAMETERS								m_pOutParam;					// call params 
 
	ULONG											m_ulFsmState;					// fsm state 
	PPACKET											m_pLastPacket;					// last packet 
	UCHAR											m_ucService[256];				// service name 
	UCHAR											m_ucAC[256];					// ac name 
	USHORT											m_usServiceLen;					// len 
	USHORT											m_usACLen; 
	UCHAR											m_macPeer[ETH_ADDR_LEN];		// mac address 
	UCHAR											m_macSelf[ETH_ADDR_LEN]; 
	USHORT											m_usSessionId;					// session 
	USHORT											m_usRetryCounts;				// retry counts 
	ULONG											m_bRecvedTimerScheduled;		// timer already scheduled 
	TIMER_ITEM										m_timerItemDiscovery;			// discovery timer 
	TIMER_ITEM										m_timerItemSession;				// session timer 
 
	LONG											m_lSendingPackets;				// sending packets 
	LONG											m_lPendingRecvedPackets;		// count 
	LONG											m_lPendingReturnPackets;		// pending return 
 
	LIST_ENTRY										m_ltRecvedPacketsHead;			// recv packets 
	PBIND_CONTEXT									m_pBindContext;					// bind context 
}CHANNEL,*PCHANNEL; 
 
extern "C" 
{ 
	// create init channel <= DISPATCH_LEVEL 
	PCHANNEL CreateInitializeChannel(ULONG ulLineId); 
 
	// shutdown channel PASSIVE_LEVEL only 
	VOID ShutdownChannel(PCHANNEL pChannel); 
 
	// reference channel <= DISPATCH_LEVEL 
	VOID ReferenceChannel(PCHANNEL pChannel,BOOLEAN bAcquireLook); 
 
	// dereference channel <= DISPATCH_LEVEL 
	VOID DereferenceChannel(PCHANNEL pChannel); 
 
	// reference sap  <= DISPATCH_LEVEL 
	VOID ReferenceSap(PCHANNEL pChannel,BOOLEAN bAcquireLook); 
 
	// dereference sap <= DISPATCH_LEVEL 
	VOID DereferenceSap(PCHANNEL pChannel); 
 
	// add channel to bind <= DISPATCH_LEVEL 
	VOID AddChannel2Bind(PCHANNEL pChannel,PBIND_CONTEXT pBind); 
 
	// remove <= DISPATCH_LEVEL  
	VOID RemoveChannelFromBind(PCHANNEL pChannel,PBIND_CONTEXT pBind); 
 
	// map packet to channel 
	PCHANNEL MapWithoutSessionId2Channel(PPACKET pPacket); 
 
	// map session to channel 
	PCHANNEL MapSessionId2Channel(PPACKET pPacket); 
}