--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/ikeutils/inc/pfkeysocketif.h Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,118 @@
+/*
+* Copyright (c) 2008-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: VPN PFKEY socket interface
+*
+*/
+
+#ifndef C_PFKEYSOCKET_H
+#define C_PFKEYSOCKET_H
+
+#include <es_sock.h>
+#include <in_sock.h>
+#include <lib_pfkey.h>
+#include "pfkeymsg.h"
+
+// FORWARD DECLARATIONS
+class TIpsecSAData;
+class RSocketServ;
+class MIkeDebug;
+
+class MPFKeyMessageListener
+ {
+public:
+ virtual void PfkeyMessageReceived( const TPfkeyMessage& aReq ) = 0;
+ };
+
+
+class TPendingSpiRequest
+ {
+public:
+ TPendingSpiRequest(TUint32& aSpi, TRequestStatus& aClientStatus):
+ iSpi(aSpi), iClientStatus(aClientStatus){}
+
+ TUint32& iSpi;
+ TRequestStatus& iClientStatus;
+ };
+
+//
+// Register for ESP
+// and stay listening the PFKEY socket
+//
+class CPFKeySocketIf : public CActive
+ {
+public:
+ IMPORT_C static CPFKeySocketIf* NewL( MPFKeyMessageListener* aListener,
+ MIkeDebug& aDebug );
+ ~CPFKeySocketIf() ;
+
+ //PFKEY related functions
+ void GetSpi( const TUint8 aType,
+ const TUint32 aSeq,
+ const TInetAddr& aSrc,
+ const TInetAddr& aDst,
+ TUint32& aSpi,
+ TRequestStatus& aClientStatus);
+ void CancelGetSpi(TRequestStatus& aClientStatus);
+
+ IMPORT_C void AcquireSAError( const TIpsecSAData& aSAData,
+ const TInt aError );
+
+ IMPORT_C void UpdateSAL( const TIpsecSAData& aSAData );
+
+ IMPORT_C void AddSAL( const TIpsecSAData& aSAData );
+
+ IMPORT_C void DeleteSA( const TUint32 aSPI,
+ const TInetAddr& aSrc,
+ const TInetAddr& aDst,
+ const TUint8 aProtocol );
+
+ IMPORT_C void FlushSAs();
+
+private:
+ CPFKeySocketIf( MPFKeyMessageListener* aListener,
+ MIkeDebug& aDebug );
+ void ConstructL();
+
+ void AddUpdateSAL( const TUint8 aType,
+ const TIpsecSAData& aSAData );
+
+ TUint32 NewSpi();
+
+#ifdef _DEBUG
+ void ShowMessageL( TPfkeyRecvMsg& aMsg );
+#endif
+
+// from base class CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError( TInt aError );
+
+protected: // data
+ MPFKeyMessageListener* iListener;
+
+private: // data
+
+ RSocketServ iSocketServer;
+ RSADB iSadb;
+
+ TPfkeyRecvMsg iMsg;
+ TUint32 iSeq;
+ TUint32 iSpiBase;
+
+ MIkeDebug& iDebug;
+
+ RArray<TPendingSpiRequest> iPendingSpiRequests;
+ };
+
+#endif // C_PFKEYSOCKET_H