--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/ipsec/lib_pfkey/include/lib_pfkey.h Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,211 @@
+// Copyright (c) 2003-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:
+//
+
+/**
+ @file
+ @publishedPartner
+ @released
+*/
+
+#ifndef __LIB_PFKEY_H__
+#define __LIB_PFKEY_H__
+
+#include <e32std.h>
+#include <in_sock.h>
+
+#include <networking/pfkeyv2.h>
+
+/**
+ * This class is only used directly by the incoming packet processing path.
+ * Here we are only interested in the start position of the extension here.
+ */
+class TPfkeyAnyExt : public TPtrC8
+ {
+public:
+ /**
+ * Create an extension from a ByteStream, checking for basic length
+ */
+ inline TPfkeyAnyExt(const TDesC8& aDes);
+ inline TPfkeyAnyExt();
+ inline TUint16 ExtLen() const;
+ inline TUint16 ExtType() const;
+
+protected:
+ /**
+ * Gets a reference to the extension header
+ */
+ inline const struct sadb_ext& ExtHdr() const;
+ inline struct sadb_ext& ExtHdr();
+ /**
+ * Base class copy constructor will work
+ * Assignment operator is banned in the base class
+ */
+ };
+
+/**
+ * TPfkeyExt is the whole extension including the data in the extension
+ * This is aware of the Size and Start position of the Header, as well
+ */
+// Outgoing messages have access to the type
+// Incoming ones do not
+template <class T>
+class TPfkeyExt : public TBuf8<sizeof(T)>
+ {
+public:
+ /**
+ * Gets a reference to the raw extension
+ */
+ inline const T& Ext() const;
+ inline T& Ext();
+
+protected:
+ /**
+ * Default Constructor
+ */
+ inline TPfkeyExt();
+ };
+
+/**
+ * The base class for all messages to and from the SADB.
+ */
+#ifdef SYMBIAN_NETWORKING_IPSEC_IKE_V2
+#ifdef SYMBIAN_IPSEC_VOIP_SUPPORT
+static const TInt KPfkeyMsgMaxLen = 1600;
+#else
+static const TInt KPfkeyMsgMaxLen = 800;
+#endif // SYMBIAN_IPSEC_VOIP_SUPPORT
+#else
+static const TInt KPfkeyMsgMaxLen = 400;
+#endif
+class TPfkeyMsgBase : public TBuf8<KPfkeyMsgMaxLen>
+ {
+public:
+ /**
+ */
+ inline const struct sadb_msg& MsgHdr() const;
+ inline struct sadb_msg& MsgHdr();
+
+protected:
+ /**
+ * Creates a Pfkey mesage of minimal(sadb_msg) size
+ */
+ inline TPfkeyMsgBase();
+ inline TPfkeyMsgBase(const TDesC8& aOther);
+ };
+
+/**
+ * Concrete class used for sending messages
+ * The class is completely generic and can be used for all messages.
+ * Has convenience functions to build up the message when demanded.
+ */
+class RSADB;
+class TPfkeySendMsgBase : public TPfkeyMsgBase
+ {
+public:
+ /**
+ * This initializes the packet stream and sets the packet header
+ * This can leave
+ */
+ IMPORT_C TPfkeySendMsgBase(TUint8 aType, TUint8 aSatype, TInt aRequestCount, TInt aPid);
+
+ IMPORT_C TPfkeySendMsgBase();
+ /**
+ */
+ IMPORT_C void Reset(TUint8 aType, TUint8 aSaType, TInt aRequestCount, TInt aPid);
+ /**
+ * This adds the extensions in the list to the message,
+ * @param aExtHdr
+ * extension header to be added to the message
+ * @param aExtData
+ * extension data to be added to the message
+ */
+ IMPORT_C TInt AddExt(const TPfkeyAnyExt& aExtHdr, const TDesC8& aExtData = KNullDesC8);
+
+ IMPORT_C void Finalize();
+ };
+
+/**
+ * Concrete class used for receiving messages
+ * Has convenience functions to decode the message when demanded
+ */
+class TPfkeyRecvMsg : public TPfkeyMsgBase
+ {
+public:
+ /**
+ * Read the next extension from the header and put it in the
+ * descriptor passed to it.
+ * @return
+ * KErrNone If this is a valid extension
+ * KErrNotFound If there are no more extensions
+ * KErrGeneral If this extension was invalid
+ * Try our best not to Leave.
+ */
+ IMPORT_C TInt NextExtension(TPfkeyAnyExt& aExt);
+
+ IMPORT_C void Reset();
+ IMPORT_C TInt BytesUnparsed();
+
+ IMPORT_C TPfkeyRecvMsg();
+ IMPORT_C TPfkeyRecvMsg(const TDesC8& aOther);
+
+private:
+ TInt iReadOffset;
+ TInt iRemaining;
+ };
+
+/**
+ * A handle to the stack side Ipsec SADB. All communication to the SADB
+ * takes place through this socket. As this happens using a well defined
+ * interface, PfkeyV2, the client is supposed to be aware of the semantics
+ * of using pfkey.
+ *
+ * This class has to be a singleton in a thread
+ * The implementation of this class is not thread safe.
+ */
+class RSADB
+ {
+public:
+
+ IMPORT_C TInt Open(RSocketServ& aServer);
+
+ IMPORT_C void Close();
+
+ IMPORT_C void SendRequest(const TDesC8& aMsg, TRequestStatus& aStatus);
+
+ IMPORT_C void CancelSend();
+
+ IMPORT_C void ReadRequest(TDes8& aMsg, TRequestStatus& aStatus);
+
+ IMPORT_C void CancelRecv();
+
+ IMPORT_C void FinalizeAndSend(TPfkeySendMsgBase& aMessage, TRequestStatus& aStatus);
+
+ IMPORT_C void SetOpt(TUint aLevel,TUint aName,const TDesC8 &aOption);
+
+ IMPORT_C ~RSADB();
+
+ IMPORT_C RSADB();
+
+private:
+ RSADB(const RSADB&);
+ RSocket iPfkeySocket;
+
+private:
+ TBool iRegistered;
+ };
+
+#include "lib_pfkey.inl"
+
+#endif //__LIB_PFKEY_H__