linklayerprotocols/pppnif/SPPP/PPPAUTH.H
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/linklayerprotocols/pppnif/SPPP/PPPAUTH.H	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,201 @@
+// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#if !defined(__PPPAUTH_H__)
+#define __PPPAUTH_H__
+
+#include "PPPBASE.H"
+#include "PppProg.h"
+
+/**
+   The PPP authentication algorithm number for CHAP with MD5 - RFC
+   1994.
+   @internalComponent
+*/
+const TUint KPppChapMd5AlgorithmNumber = 0x05;
+
+/**
+   The PPP authentication algorithm number for MS-CHAP (version 1) -
+   RFC 2433.
+   @internalComponent
+*/
+const TUint KPppMsChapAlgorithmNumber = 0x80;
+
+/**
+   The PPP authentication algorithm number for MS-CHAP-V2 - RFC 2759.
+   @internalComponent
+*/
+const TUint KPppMsChap2AlgorithmNumber = 0x81;
+
+
+const TUint KPppApIsClient = 0x01;
+const TUint KPppApIsServer = 0x02;
+const TUint KPppApAuthReqDone = 0x04;
+
+
+NONSHARABLE_CLASS(CPppAuthentication) : public CBase, public MPppRecvr
+/**
+@internalTechnology
+Base class for all PPP authentication protocols (PAP, CHAP, etc) 
+*/
+	{
+	friend class CPppAcp;
+
+  public:
+/**
+   Destructor.
+*/
+	virtual ~CPppAuthentication();
+
+/**
+   Second phase initializer.
+   @param aLcp [in] A pointer to the instance of CPppLcp class that
+   will use this object for authentication.
+   @leave Standard Symbian OS error codes. e.g. KErrNoMemory.
+*/
+	virtual void InitL(CPppLcp* aPppLcp);
+
+/**
+   @copydoc MPppRecvr::FrameError()
+   @see MPppRecvr::FrameError()
+*/
+	virtual void FrameError();
+
+/**
+   @copydoc MPppRecvr::KillProtocol()
+   @see MPppRecvr::KillProtocol()
+*/
+	virtual void KillProtocol();
+
+	void AuthenticateRequest();
+	void CallAuthenticateComplete(TInt aRes);
+
+  protected:
+/**
+   Notifies that NifMan has completed the user authentication request.
+   If the authentication request has been successful, the username and
+   the password have been returned to the NIF.
+   @param aStatus [in] Status code of the authentication attempt.
+*/
+	virtual void AuthenticateComplete(TInt aStatus)=0;
+
+	virtual TPppPhase PppPhase() const;
+	
+/**
+   Returns the PPP protocol number for this authentication protocol.
+   @return The PPP protocol number for this authentication protocol.
+*/
+	virtual TUint PppId() const = 0;
+
+	void DoFail(TInt aErrorCode);
+	
+	void DoSucceed();
+
+/* Tests if NifMan has completed the user authentication request.  If
+   the authentication request has been successful, the username and
+   the password have been returned to the NIF.
+   @return ETrue if NifMan has completed the user authentication
+   request, EFalse otherwise.
+*/
+	TBool IsAuthenticateRequestDone() const;
+
+/* Tests if the this receiver is inactive and the data frames being
+   received will not be delivered to it.
+   @return ETrue if the current the receiver is inactive, EFalse is
+   the current receiver is active.
+*/
+	TBool IsInactive() const;
+
+  protected:
+
+	TUint iFlags;
+
+  private:
+/** Flag that indicates if this instance is inactive, i.e. it will
+process the data link frames received. */
+	TBool	iDead;
+	};
+
+
+inline TPppPhase CPppAuthentication::PppPhase() const
+	{
+	return EPppPhaseAuthenticate;
+	}
+
+inline TBool CPppAuthentication::IsAuthenticateRequestDone() const
+	{
+	return iFlags & KPppApAuthReqDone;
+	}
+
+inline void CPppAuthentication::FrameError()
+	{	
+	}
+
+inline void CPppAuthentication::KillProtocol()
+	{
+	iDead = ETrue;
+	}
+
+inline TBool CPppAuthentication::IsInactive() const
+	{
+	return iDead;
+	}
+
+NONSHARABLE_CLASS(CPppAcp) : public CBase, public MPppOptionHandler
+/**
+@internalTechnology
+Option handler for the PPP authentication option. Uses the current 
+authentication mode from CommDb (CHAP, PAP, CHAP with PAP fallback). 
+
+The handler does not initiate the authentication protocol negotiation, 
+it is expected that the server will propose an authentication protocol 
+if required.
+*/
+	{
+  public:
+	CPppAcp(CPppLcp* aLcp);
+	virtual ~CPppAcp();
+	static CPppAcp* NewL(CPppLcp* aLcp);
+	
+  protected:
+	// MPppOptionHandler
+	virtual void OptNegotiationStarted();
+	virtual void OptNegotiationAborted();
+	virtual void OptNegotiationComplete();
+	virtual void OptFillinConfigRequestL(RPppOptionList& aRequestList);
+	virtual TPppOptResponse OptCheckConfigRequest(RPppOption& aOption);
+	virtual void OptApplyConfigRequest(RPppOption& aOption);
+	virtual void OptRecvConfigAck(RPppOption& aOption);
+	virtual void OptRecvConfigNak(RPppOption& aOption, RPppOptionList& aReqList);
+	virtual void OptRecvConfigReject(RPppOption& aOption, RPppOptionList& aReqList);
+
+	void DeleteProtocols();
+	TPppOptResponse ProposeChap(RPppOption& aOption);
+	TPppOptResponse ProposePap(RPppOption& aOption);
+		
+  private:
+	TUint iClientId;
+	TUint iServerId;
+	TUint iClientSubId;
+	TUint iServerSubId;
+	TUint8 iCHAPTypeOffered;
+	TUint8 iProtocolOffered;
+
+	CPppAuthentication* iClientProtocol;
+	CPppAuthentication* iServerProtocol;
+	CPppLcp* iPppLcp;
+	};
+
+#endif