Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) Microsoft Corp. All rights reserved.
//
// FILE
//
// EAPSession.h
//
// SYNOPSIS
//
// This file declares the class EAPSession.
//
// MODIFICATION HISTORY
//
// 01/15/1998 Original version.
// 05/08/1998 Convert to new EAP interface.
// 08/27/1998 Use new EAPFSM class.
// 10/13/1998 Add maxPacketLength property.
// 11/13/1998 Add event log handles.
// 05/20/1999 Identity is now a Unicode string.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef _EAPSESSION_H_
#define _EAPSESSION_H_
#if _MSC_VER >= 1000
#pragma once
#endif
#include <nocopy.h>
#include <raseapif.h>
#include <iastlutl.h>
#include <vector>
using namespace IASTL;
#include <eapfsm.h>
// Forward references.
class EAPType;
///////////////////////////////////////////////////////////////////////////////
//
// CLASS
//
// EAPStruct<T>
//
// DESCRIPTION
//
// Wraps a raseapif struct to handle initialization.
//
///////////////////////////////////////////////////////////////////////////////
template <class T> class EAPStruct : public T { public: EAPStruct() throw () { clear(); }
void clear() throw () { memset(this, 0, sizeof(T)); dwSizeInBytes = sizeof(T); } };
typedef EAPStruct<PPP_EAP_INPUT> EAPInput; typedef EAPStruct<PPP_EAP_OUTPUT> EAPOutput;
///////////////////////////////////////////////////////////////////////////////
//
// CLASS
//
// EAPSession
//
// DESCRIPTION
//
// This class encapsulates the state of an ongoing EAP session.
//
///////////////////////////////////////////////////////////////////////////////
class EAPSession : NonCopyable { public: EAPSession( const IASAttribute& accountName, std::vector<EAPType*>& eapTypes ); ~EAPSession() throw ();
// Returns the ID for this session.
DWORD getID() const throw () { return id; }
PCWSTR getAccountName() const throw () { return account->Value.String.pszWide; }
// Begin a new session.
IASREQUESTSTATUS begin( IASRequest& request, PPPP_EAP_PACKET recvPacket );
// Continue an existent session.
IASREQUESTSTATUS process( IASRequest& request, PPPP_EAP_PACKET recvPacket );
static HRESULT initialize() throw (); static void finalize() throw ();
protected:
// Performs the last action returned by the EAP DLL. May be called multiple
// times per action due to retransmissions.
IASREQUESTSTATUS doAction(IASRequest& request);
void clearType() throw (); void setType(EAPType* newType);
//////////
// Constant properties of a session.
//////////
const DWORD id; // Unique session ID.
IASAttributeVector all; EAPInput eapInput;
EAPType* currentType; // current EAP type being used.
const IASAttribute account; // NT4-Account-Name of the user.
const IASAttribute state; // State attribute.
//////////
// Current state of a session.
//////////
EAPFSM fsm; // FSM governing the session.
DWORD maxPacketLength; // Max. length of the send packet.
IASAttributeVector profile; // Authorization profile.
IASAttributeVector config; // Configuration for the various EAP types.
PVOID workBuffer; // EAP DLL's context buffer.
EAPOutput eapOutput; // Last output from the EAP DLL.
PPPP_EAP_PACKET sendPacket; // Last packet sent.
// Next available session ID.
static LONG theNextID; // Initialization refCount.
static LONG theRefCount; // Session-Timeout for non-interactive sessions.
static IASAttribute theNormalTimeout; // Session-Timeout for interactive sessions.
static IASAttribute theInteractiveTimeout; // IAS event log handle;
static HANDLE theIASEventLog; // RAS event log handle;
static HANDLE theRASEventLog; };
#endif // _EAPSESSION_H_
|