networkingtestandutils/ipv6to4tunnel/inc/6to4_tunnel.h
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingtestandutils/ipv6to4tunnel/inc/6to4_tunnel.h	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,302 @@
+/*
+* Copyright (c) 2004-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:
+* Name        : 6to4_tunnel.h
+* Part of     : 6to4 plugin / 6to4.prt
+* Implements 6to4 automatic and configured tunnels, see
+* RFC 3056 & RFC 2893
+* Version     : 0.2
+*
+*/
+
+
+
+
+/**
+ @internalComponent
+*/
+
+#ifndef __6TO4_TUNNEL_H
+#define __6TO4_TUNNEL_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <in_sock.h>
+
+// CONSTANTS
+// MACROS
+// DATA TYPES
+class CTunnel; // This forward declaration is needed already here.
+typedef TDblQue < CTunnel > TTunnelQueue;
+typedef TDblQueIter < CTunnel > TTunnelQueueIter;
+
+// FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+*  Parser class for configured tunnels initialization file
+*  Parses and generates the tunnels requested in the initialization file.
+*
+*  @lib
+*  @since
+*/
+class TTunnelParser : public TLex
+	{
+	public:  // Constructors and destructor
+	TTunnelParser ();
+
+	 // Destructor
+	~TTunnelParser ();
+
+	public: // New functions
+		
+	/**
+	 * Parse tunnel configuration file
+	 * @since 
+	 * @param 
+	 * @return TInt KErrNone if success
+	 */
+	TInt ParseL (const TDesC & aTunnelData);
+
+	/**
+	 * Private data access
+	 * @since 
+	 * @param 
+	 * @return TTunnelQueue& Queue
+	 */
+	inline TTunnelQueue& TunnelQueue() { return iTunnelQueue; }
+
+	private:
+
+	typedef enum
+		{
+		ETokenTypeString,
+		ETokenTypeInt,
+		ETokenTypeEqual,
+		ETokenTypeComma,
+		ETokenTypeBraceLeft,
+		ETokenTypeBraceRight,
+		ETokenTypeParLeft,
+		ETokenTypeParRight,
+				ETokenTypeComment,
+		ETokenTypeError,
+		ETokenTypeEof
+		}
+	TTokenType;
+
+	/**
+	 * Get next token from the stream
+	 * @since 
+	 * @param 
+	 * @return TTokenType Type of token encountered.
+	 */
+	TTokenType NextToken ();
+
+	private:    // Data
+	
+	// Token value (string)
+	TPtrC iToken;
+
+	// Token value (Integer)
+	TInt iTokenVal;
+
+	// List for tunnels parsed from the configuration file
+	TTunnelQueue iTunnelQueue;         
+	};
+	
+
+// CLASS DECLARATION
+
+/**
+*  TIpAddress.
+*  Raw IPv6 address with zone id.
+*/
+class TIpAddress: public TIp6Addr
+	{
+	public:	// Constructors
+
+	TIpAddress() {}
+
+	TIpAddress(const TIp6Addr &aAddr, const TUint32 aScope) : iScope(aScope) {(TIp6Addr &)*this = aAddr; }
+
+
+	public: // New functions
+
+	/**
+	* Returns the address without the scope.
+	*/
+	inline const TIp6Addr &Address() const { return *this; }
+
+	/**
+	* Returns TRUE, if addresses and scope match.
+	* The ZERO scope id acts as wild card.
+	*/
+	inline TInt operator==(const TIpAddress &aAddr) const
+		{ return IsEqual(aAddr) && (iScope == aAddr.iScope || iScope == 0 || aAddr.iScope == 0); }
+
+	/**
+	* Returns TRUE, if address and scope does not match
+	*/
+	inline TInt operator!=(const TIpAddress &aAddr) const  { return ! (*this == aAddr); }
+	
+	/**
+	* Set address and scope.
+	* @param aAddr The bare address
+	* @param aScope The zone id.
+	*/
+	inline void SetAddress(const TIp6Addr &aAddr, const TUint32 aScope)
+		{
+		(TIp6Addr &)*this = aAddr;
+		iScope = aScope;
+		}
+
+	public:    // Data
+
+	TUint32 iScope;
+	};
+
+
+// CLASS DECLARATION
+
+/**
+*  Configured tunnel
+*  Keeps inside all information needed for a configured tunnel.
+*
+*  @lib
+*  @since
+*/
+class CTunnel : public CBase
+	{
+	public:  // Constructors and destructor
+	
+	CTunnel (); 
+	
+	/**
+	 * Destructor.
+	 */
+	virtual ~CTunnel();
+
+	public: // New functions
+		
+	/**
+	 * Sets a name for a tunnel. Used also as a virtual interface name.
+	 * @since
+	 * @param aName
+	 * @return void
+	 */
+	void SetNameL (const TDesC & aName);
+
+	/**
+	 * Private member access
+	 * @since
+	 * @param
+	 * @return Name
+	 */
+	inline const TDesC &Name() const     { return *iName; } 
+
+	/**
+	 * Private member access
+	 * @since
+	 * @param
+	 * @return Endpoint address 
+	 */
+	inline TIpAddress &EndpointAddr()    { return iEndpointAddr; }
+
+	/**
+	 * Private member access
+	 * @since
+	 * @param
+	 * @return TUint32 Interface index
+	 */
+	inline TUint32 InterfaceIndex()      { return iInterfaceIndex; }
+
+	/**
+	 * Private member access
+	 * @since
+	 * @param
+	 * @return Virtual interface address
+	 */
+	inline TIpAddress& VirtualIfAddr()    { return iVirtualIfAddr; }   
+
+	/**
+	 * Private member access
+	 * @since
+	 * @param
+	 * @return Route address (what is routed to this tunnel)
+	 */
+	inline TIp6Addr& RouteAddr()        { return iRouteAddr; }
+
+	/**
+	 * Private member access
+	 * @since
+	 * @param
+	 * @return TUint Route address prefix length
+	 */
+	inline TUint RoutePrefixLength()     { return iRoutePrefixLength; }   
+
+	/**
+	 * Private member access
+	 * @since
+	 * @param aInterfaceIndex Interface index
+	 * @return void
+	 */
+	inline void SetInterfaceIndex(TUint32 aInterfaceIndex) 
+		  { iInterfaceIndex = aInterfaceIndex; }
+
+	/**
+	 * Private member access
+	 * @since
+	 * @param aRoutePrefixLength
+	 * @return void
+	 */
+	inline void SetRoutePrefixLength(TUint aRoutePrefixLength) 
+	  { iRoutePrefixLength = aRoutePrefixLength; }   
+
+
+	public:     // Data
+	// Link for double linked list
+	TDblQueLink iDLink;    
+
+	private:    // Data
+	
+	// IP header id
+
+
+	// Name of the tunnel
+	HBufC *iName;
+
+	// Endpoint IPv4 address
+	TIpAddress iEndpointAddr;
+
+	// Local IPv4 address
+//	TInetAddr iLocalAddr;
+
+	// Virtual interface index
+	TUint32 iInterfaceIndex;
+
+	// IPv6 address for the tunnel virtual interface
+	TIpAddress iVirtualIfAddr;   
+
+	// IPv6 route address
+	TIp6Addr iRouteAddr;
+
+	// IPv6 route prefix length
+	TUint iRoutePrefixLength;
+	};
+
+#endif      // __6TO4_TUNNEL_H   
+			
+// End of File