vpnengine/ikeutils/inc/pfkeysocketif.h
changeset 0 33413c0669b9
--- /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