diff -r 000000000000 -r af10295192d8 tcpiputils/dhcp/NetCfgExtnDhcp/inc/NetCfgExtnDhcpMsg.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tcpiputils/dhcp/NetCfgExtnDhcp/inc/NetCfgExtnDhcpMsg.h Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,185 @@ +// 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: +// NetCfgExtDhcpMsg.h +// DHCPv4/v6 specific control & IoCtl commands & structures +// +// + +/** + @internalComponent +*/ + +#if !defined (__NET_CFG_EXTN_DHCP_MSG_H__) +#define __NET_CFG_EXTN_DHCP_MSG_H__ + +#include + +//-- for some DHCPv4 constants and data structures definition +#include +#include + + +/** + Specific options for getting raw DHCP data + @internalComponent +*/ +const TUint KConnGetDhcp4RawOptionData = KConnGetDhcpRawOptionData; //-- DHCPv4 specific alias +const TUint KConnGetDhcp6RawOptionData = KConnGetDhcpRawOptionData; //-- DHCPv6 specific alias + + +/** + Just a DHCPv4 specific alias, actually is defined in es_config.h + @internalComponent +*/ +typedef TDhcpRawOptionDataPckg TDhcp4RawOptionDataPckg; + + +/** + TDhcp6RawOptionDataPckg - provide simple interface for dealing with DHCPv6 raw option data. + IPv4 version is defined in es_config.h + @internalComponent +*/ +class TDhcp6RawOptionDataPckg : public TPckgDes + { +public: + /** @param aDes User buffer to hold data fetched. */ + TDhcp6RawOptionDataPckg(TDes8& aDes) : + TPckgDes(aDes) + { + } + + /** + SetOpCode. Make sure the buffer is at least 8 bytes long. + @param aOpCode Desired DHCP Raw option. + */ + inline void SetOpCode(TUint16 aOpCode) + { + const TUint opCodeSize = sizeof(aOpCode); + TBuf8 buf; + buf.Copy(reinterpret_cast(&aOpCode), opCodeSize); + iDes->Replace(0,opCodeSize,buf); + } + + inline TUint16 OpCode() + { + return *(reinterpret_cast(iDes->Ptr())); + } + }; + +#ifdef SYMBIAN_TCPIPDHCP_UPDATE +class TDhcp6RawOptionMultipleDataPckg : 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: + TDhcp6RawOptionMultipleDataPckg(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); + } + + void AddRawOptionCodeL(const TUint16 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); + } + + TInt GetRawParameterData(const TUint16 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 + */ + { + TUint16 opCodeIterated=0; + TUint16 opCodeIterator= 2; + const TUint16 sizeOfOpcodeAndDataBytes = 3; + const TUint16 sizeOfLengthByte = 2; + + //extracting number of opcodes. First byte of Descriptor will contain number of bytes + TUint16 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(reinterpret_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))+4; + opCodeIterated++; + }//while loop. + return KErrNotFound; + } + + TUint16 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 //SYMBIAN_TCPIPDHCP_UPDATE +#endif