--- /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
+
+
+
+