diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/inc/es_config.h --- /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 + +// 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 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 TConnectionLeaseInfoBuf; + + +template +class TPckgDes +/** + * TPckgDes - dynamic packaging using user allocated buffer + * + * The buffer starts with structure \ 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(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 +/** + * 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(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 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 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 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 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 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 +/** + * 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(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((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 + + + +