datacommsserver/esockserver/inc/es_config.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/inc/es_config.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,374 @@
+// 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:
+//
+
+#if !defined (__ES_CONFIG_H__)
+#define __ES_CONFIG_H__
+
+#include <in_sock.h>
+
+// configuration daemon structures for use with
+// RConnection::Ioctl()
+
+class TConnectionAddress
+/**
+  * TConnectionAddress class
+  *
+  * For use when querying for the configured
+  * address with RConnection::Ioctl() using 
+  * the KConnGetCurrentAddr constant. The client
+  * must provide the IP version the request is meant for
+  *
+  * @publishedPartner
+  * @released
+  */
+	{
+public:
+	TUint32 iAddressFamily;		// KAfInet or KAfInet6
+	TSockAddr iAddr;
+	};
+typedef TPckgBuf<TConnectionAddress> TConnectionAddrBuf;
+
+
+class TConnectionLeaseInfo
+/**
+  * TConnectionLeaseInfo class
+  *
+  * For use when querying for the lease time
+  * remaining with RConnection::Ioctl() using
+  * the KConnGetLeaseTimeRemain constant.  The client
+  * must provide the IP version the request is meant for
+  *
+  * @publishedPartner
+  * @released
+  */
+	{
+public:
+	TUint iAddressFamily;		// KAfInet or KAfInet6	
+	TUint iSecondsRemaining;
+	};
+typedef TPckgBuf<TConnectionLeaseInfo> TConnectionLeaseInfoBuf;
+
+
+template <class T>
+class TPckgDes
+/**
+  * TPckgDes - dynamic packaging using user allocated buffer
+  *
+  * The buffer starts with structure \<T\> followed by an arbitrary buffer starting at iPtr8
+  * the idea is that we can send a structure and dynamically allocated buffer as one continuous
+  * descriptor rather than pack a structure having a pointer to another descriptor.
+  *
+  * @publishedPartner
+  * @released
+  */
+	{
+public:
+	TPckgDes(TDes8& aDes) :
+		iDes(&aDes)
+		/**
+		 * @param aDes User buffer to hold data fetched.
+		 */
+		{
+		}
+		
+	inline T& operator()()
+		{
+	 	return(*((T *)iDes->Ptr()));
+		}
+		
+	inline TPtr8 Buf()
+		{
+	 	return TPtr8(const_cast<TUint8*>(iDes->Ptr()) + sizeof(T), iDes->Length() - sizeof(T), iDes->MaxLength() - sizeof(T));
+		}
+
+	inline void SetBufLengthL(TInt aNewLength)
+		{
+		TInt newLength = aNewLength + sizeof(T);
+		if (newLength > iDes->MaxLength())
+			{
+    		User::Leave(KErrOverflow);
+     		}
+	 	iDes->SetLength(newLength);
+		}
+
+protected:
+   TDes8* iDes; //user allocated descriptor
+   };
+   
+
+class TDhcpRawOptionDataPckg : public TPckgDes<TUint8>
+/**
+  * TDhcpRawOptionDataPckg - provide simple interface for sending the dhcp raw option.
+  *
+  * The data contained in the package is the opcode and the value of the raw option.
+  * The length of the buffer is set with the length of the descriptor containing 'the
+  * opcode + the raw option data' by the DHCP component.
+  *
+  * e.g. The DNS option in DHCP message is represented by opcode 6. On requesting for DNS option using 
+  * RConnection::Ioctl(), if the data received in the buffer is 6 192 168 0 1 192 168 0 2 then  
+  * 6 is the DNS option code and 192 168 0 1 and 192 168 0 2 are the IP addresses of DNS servers.
+  *
+  * @publishedPartner
+  * @released
+  */
+	{
+public:
+ 	TDhcpRawOptionDataPckg(TDes8& aDes)  :
+		TPckgDes<TUint8>(aDes)
+		/**
+		 * @param aDes User buffer to hold data fetched.
+		 */
+		{
+		}	
+
+	inline void SetOpCode(TUint8 aOpCode)
+		/**
+		 * SetOpCode. Make sure the buffer is at least 4 bytes long.
+		 * @param aOpCode Desired DHCP Raw option.
+		 *
+		 */
+		{
+		TBuf8<1> buf;
+		buf.FillZ(1);
+		buf[0]=aOpCode;
+		iDes->Replace(0,1,buf);
+		}
+
+	inline TUint8 OpCode()
+		{
+		return *(iDes->Ptr());
+		} 	
+	};
+
+/**
+  * SSipServerAddr structure
+  *
+  * For use when querying for the SIP server addresses with 
+  * RConnection::Ioctl() using the KConnGetSipServerAddr constant.  
+  * The client must provide the index of the address being
+  * requested.
+  *
+  * @publishedPartner
+  * @released
+  */
+struct SSipServerAddr
+	{
+	TInt index;
+	TInetAddr address;
+	};
+
+typedef TPckgBuf<SSipServerAddr> TSipServerAddrBuf;
+
+/**
+  * SSipServerDomain structure
+  *
+  * For use when querying for the SIP server domains with
+  * RConnection::Ioctl() using the KConnGetSipServerDomain constant.
+  * The client must provide the index of the name being
+  * requested.
+  *
+  * @publishedPartner
+  * @released
+  */
+struct SSipServerDomain
+	{
+	TInt index;
+	THostName domainName;
+	};
+
+typedef TPckgBuf<SSipServerDomain> TSipServerDomainBuf;
+#ifdef SYMBIAN_TCPIPDHCP_UPDATE 
+/**
+  * SDomainSearchList structure
+  *
+  * For use when querying for the list of domain names with
+  * RConnection::Ioctl() using the KConnGetDomainSearchList constant.
+  * The client must provide the index of the name being
+  * requested.
+  *
+  * @publishedPartner
+  * @released
+  */
+struct SDomainSearchList
+	{
+	TInt index;
+	THostName domainname;
+	};
+
+typedef TPckgBuf<SDomainSearchList> TDomainSearchListBuf;
+
+/**
+  * SDNSServerAddr structure
+  *
+  * For use when querying for the list of Recursive DNS Servers with
+  * RConnection::Ioctl() using the KConnGetDNSServerList constant.
+  * The client must provide the index of the name being
+  * requested.
+  *
+  * @publishedPartner
+  * @released
+  */
+struct SDNSServerAddr
+	{
+	TInt index;
+	TInetAddr addres;
+	};
+
+typedef TPckgBuf<SDNSServerAddr> TDNSServerAddrBuf;
+#endif //SYMBIAN_TCPIPDHCP_UPDATE 
+
+struct STftpServerAddr
+/**
+  * STftpServerAddr structure
+  *
+  * For use when querying for the TFTP server addresses with 
+  * RConnection::Ioctl() using the KConnGetTftpServerAddr constant.  
+  * The client must provide the index of the address being
+  * requested.
+  *
+  * @publishedPartner
+  * @released
+  */
+	{
+	TInt index;
+	TInetAddr address;
+	};
+typedef TPckgBuf<STftpServerAddr> TTftpServerAddrBuf;
+
+
+/**
+  * TTftpServerNameBuf structure
+  *
+  * For use when querying for the TFTP server name with 
+  * RConnection::Ioctl() using the KConnGetSipServerName constant.  
+  *
+  * @publishedPartner
+  * @released
+  */
+typedef TBuf<256> TTtfpServNameBuf;
+
+class TDhcpRawOptionMultipleDataPckg : public TPckgDes<TUint8>
+/**
+ * For use when an application wants to access multiple raw parameter options.
+ * The descriptor contains a list of OpCodes. After the RConnection::Ioctl() call has 
+ * completed, the descriptor will contain the number of parameters in the first byte 
+ * followed by parameter opcode, length and data for each parameter option.
+ *	
+ *	@code
+ *     Message	
+ *	     -------------------------------   
+ *		|	|	|	|		|
+ *		|op1|op2|-	|		|
+ *		 -------------------------------
+ *  @endcode
+ * @publishedPartner
+ * @released
+*/
+	{
+public:
+ 	TDhcpRawOptionMultipleDataPckg(TDes8& aDes)  :
+		TPckgDes<TUint8>(aDes)
+	//Constructor for the class. Pushing Buffer containing number
+	//of OpCode in iDes.  
+		{
+		//Setting data length of descriptor as NULL
+		iDes->SetLength(NULL);
+		}
+
+	inline void AddRawOptionCodeL(const TUint8 aOpCode)
+	/**
+	 * Sets parameters one at a time.
+	 * The only thing the application provides is the OpCode.
+	 * @param aOpCode The OpCode supplied by the user.
+	*/
+		{
+		//  ---------------------
+		// |      |		|..........................
+		// |OP1   |	OP2	|
+		// |      |     |.......................
+		// ----------------------
+		//Data will be appended at the end of the buffer. Length of buffer will indicate
+		//number of opcodes as every thing is 1 byte
+		iDes->Append(aOpCode);
+		   
+		}
+		
+   	inline TInt GetRawParameterData(const TUint8 aOpCode ,TPtrC8& aDes)
+   	/**
+   	 * Returns the data portion corresponding to the supplied opcode.  
+	 * It's only meaningful to call this after an Ioctl() call.
+	 *
+   	 * @code
+   	 *  ---------------------------------------------------
+   	 * |No. of |      |Data  |      |       |Data  |       |
+   	 * |opcodes| OP1  |Length| Data |  OP2  |Length| Data  |
+   	 * |       |      |      |      |       |      |       |
+   	 *  --------------------------------------------------- 
+   	 * @endcode
+   	 *
+   	 * @param aOpCode The opcode passed by the user.
+   	 * @param aDes On return, it contains the message opcode data.
+   	 * @return KErrNone if aOpCode is found, else KErrNotFound 
+   	*/
+		{
+		TUint8 opCodeIterated=0;
+		TUint8 opCodeIterator= 1;
+		const TUint8 sizeOfOpcodeAndDataBytes = 2;
+		const TUint8 sizeOfLengthByte = 1;
+	
+		//extracting number of opcodes. First byte of Descriptor will contain number of bytes
+		TUint8 numberOfOpcodes  = *(iDes->Ptr());
+		
+		//taking pointer to base location of aDes.
+		const TUint8* desBasePtr=iDes->Ptr();
+	
+		//While loop true conditions are opCodeFound if Particular opcode is extracted or All opcode in 
+		//descriptor are iterated and OpCode is not found.
+		while( opCodeIterated < numberOfOpcodes)
+			{
+			//If opcode is found then come out of loop and TPtr will be passed in the descriptor. Pointer is returned to the 
+			//start byte of data for that particular Opcode with length of the data.
+ 			if(aOpCode==*(desBasePtr+opCodeIterator))
+				{
+				TInt dataLength = *(desBasePtr+(opCodeIterator+sizeOfLengthByte));
+  				aDes.Set(const_cast<TUint8*>((desBasePtr+opCodeIterator)+sizeOfOpcodeAndDataBytes),dataLength);	
+				return KErrNone;
+				}
+		
+			//Opcode iterator is iterated in such a way that it will always point to opcode location.
+			opCodeIterator += *(desBasePtr+(opCodeIterator+sizeOfLengthByte))+sizeOfOpcodeAndDataBytes;
+			opCodeIterated++;
+			}//while loop.
+		return KErrNotFound;
+		}
+		
+	inline TUint8 NumOfOptionRetrieved()
+	/**
+	 * Gets the number of opcode data buffers.
+	 * It's only meaningful to call this after an Ioctl() call.
+	 * @return The number of opcode data buffers.
+	 */
+		{
+		return *(iDes->Ptr());
+		}
+	};
+
+
+
+#endif
+
+
+
+