--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tcpiputils/dhcp/include/DHCP_Std.h Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,247 @@
+// 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:
+// Provides constants common across DHCP component
+//
+//
+
+/**
+ @file DHCP_Std.h
+*/
+
+#ifndef __DHCP_STD_H__
+#define __DHCP_STD_H__
+
+#include <e32def.h>
+
+#include <es_sock.h>
+#include <es_enum.h>
+#include <in_sock.h>
+#include <cflog.h>
+#include <es_sock_partner.h>
+
+#ifdef _DEBUG
+const TUid KMyPropertyCat = {0x101FD9C5};
+const TUint32 KMyPropertyDestPortv4 = 67;
+const TUint32 KMyPropertyDestPortv6 = 547;
+#endif
+
+__CFLOG_STMT(_LIT8(KLogSubSysDHCP, "DHCP");) // subsystem name
+
+IMPORT_C TInt E32Main();
+
+#ifdef EKA2
+_LIT(KDHCPServerName,"!DHCPServ");
+#else
+_LIT(KDHCPServerName,"DHCPServ");
+#endif
+
+_LIT(KDHCPProcessName,"DhcpServ");
+
+_LIT(KDHCPExeName, "DHCPexe.exe");
+_LIT(KDHCPDLLName,"DHCPServ.dll");
+
+//persistence TIDs for DHCPv4 & DHCPv6 (cooked-up numbers to be able distinguish
+//what's been stored. Doesn't have to be system wide unique
+const TInt KDHCPv6Persinstence = 0x01DFA341;
+const TInt KDHCPv4Persinstence = 0x01DFA342;
+const TInt KDHCPv6PersinstenceId = 1;
+const TInt KDHCPv4PersinstenceId = 1;
+const TInt KDHCPv4MaxRetryCount = 3;
+
+const TInt KDHCPSrvMajorVersionNumber=1;
+const TInt KDHCPSrvMinorVersionNumber=0;
+const TInt KDHCPSrvBuildVersionNumber=0;
+
+const TUint8 KDhcpParameterRequestListLen = 7;
+const TUint16 KDhcpMaxMsgSizeIP4 = 576;
+
+const TUint8 KIp4AddrByteLength = 4;
+const TUint8 KIp4ChAddrMaxLength = 16;
+const TUint8 KHwAddrOffset = 8;
+#ifdef SYMBIAN_NETWORKING_ADDRESS_PROVISION
+const TUint KHwAddrLength = 6;
+#endif //SYMBIAN_NETWORKING_ADDRESS_PROVISION
+
+#ifdef _DEBUG
+const TUint8 KDhcpWrongSrcPort = 34;
+const TUint8 KDhcpWrongDestPort = 33;
+#else
+const TUint8 KDhcpSrcPort = 68;
+const TUint8 KDhcpDestPort = 67;
+#endif
+
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+// now that we are having both dhcp client and server implemantation within
+// DHCPServe.exe, we explicitly mentioned the client and server port to avoid confusion
+const TUint8 KDhcpClientPort = 68;
+const TUint8 KDhcpServerPort = 67;
+
+/** 6 hours, magic number which is set on the rational that
+ anything bigger than this number would not be required as a mobile device might
+ not be used as a DHCP server for more than 6hours continuously
+ anything less than this lease time would mean more DHCP network traffic to reconfigure/renew
+ when the lease time expires
+*/
+const TUint32 KDefaultLeaseTime = 21600;
+
+// Constant used for setting custom lease time for the DHCP server
+// using RProperty::Define and RProperty::Set API's
+// Only on Debug builds
+#ifdef _DEBUG
+const TUint32 KMyDefaultLeaseTime = 21600;
+#endif
+
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+
+
+const TUint KOneSecond = 1;
+const TInt KInfinity = -1;
+const TUint KHalfSecondInMicroSeconds = 500000;
+const TUint KZeroSecond = 0;
+const TUint KFailTimeOut = 10;
+const TUint KWaitForResponseTime = 512; // in seconds
+const TUint KReallyLongLease = 0x7fffffff; // over 68 years - a virtual freehold
+
+const TTimeIntervalSeconds KManualRenewTimeout = 2*KWaitForResponseTime;
+
+//------------------------------------------------------------------------------------
+//-- Debug heap control functions definition for the DHCP daemon.
+//-- Access to these function is provided by RConnection Ioctl functionality.
+//-- Note that this Ioctl level KDhcpMemDbgIoctl is not standard.
+//------------------------------------------------------------------------------------
+
+#ifdef _DEBUG
+#define __DHCP_HEAP_CHECK_CONTROL
+#endif
+
+//-- IOCTL level for heap debug control functions
+const TUint KDhcpMemDbgIoctl = KConnWriteUserDataBit | 0x1000;
+
+//-- debug heap control functions numbers
+
+const TUint KDHCP_DbgMarkHeap = 1; //-- start heap mark.
+const TUint KDHCP_DbgCheckHeap = 2; //-- check heap, required a paremeter - number of expected allocated cells.
+const TUint KDHCP_DbgMarkEnd = 3; //-- mark the end of heap checking, required a paremeter - number of expected allocated cells.
+const TUint KDHCP_DbgFailNext = 4; //-- simulate heap alloc failure. Requires a parameter - failure rate. if param <0 resets.
+const TUint KDHCP_DbgFlags = 5; //-- set debug flags.
+
+//-- debug flags used with KDHCP_DbgFlags
+const TUint KDHCP_FailDiscover = 1; //-- force init task to fail (state machine returns -KErrTimeOut)
+const TUint KDHCP_FailRenew = 2; //-- force renew task to fail (state machine returns -KErrTimeOut)
+const TUint KDHCP_FailRebind = 4; //-- force rebind task to fail (state machine returns -KErrTimeOut)
+const TUint KDHCP_SetShortLease = 8; //-- set short lease as defined in KDHCP_ShortLeaseSec
+const TUint KDHCP_SetShortRetryTimeOut = 16; //-- set short lease as defined in KDHCP_ShortRetryTimeOutSec
+const TUint KDHCP_ForceDiscovery = 32; //-- ignore lease time in commDB.
+const TUint KDHCP_Dad = 64; // simulate a duplicate ip address has been found
+const TUint KDHCP_ShortLeaseRenewTime = 20; //
+const TUint KDHCP_ShortLeaseRebindTime = 70; // must be greater than timeout for test 5_6, so we know that renew worked
+const TUint KDHCP_ShortLeaseLeaseTime = 110; //
+const TUint KDHCP_ShortRetryTimeOut = 7; //
+const TUint KDHCP_RequestIP4BroadcastOffer = 128; //-- override setting unicast bit in offers
+
+
+//-- buffer for storing function number
+typedef TPckgBuf<TInt> TDhcpMemDbgParamBuf;
+
+
+//-- IOCTL level for per-interface debug functions.
+// specific numbers must have KConnWriteUserDataBit/KConnReadUserDataBit set as appropriate
+const TUint KDhcpInterfaceDbgIoctl = 0x2000;
+
+
+
+
+
+
+class TDhcpRnd
+/**
+ * Little random number generator class
+ *
+ * @internalTechnology
+ */
+ {
+public:
+ TDhcpRnd();
+ TInt Rnd(TInt aMin, TInt aMax);
+ TUint32 Xid() const;
+ void SetXid(TUint32 aXid);
+ void Init();
+ void Init6();
+private:
+ TInt64 iSeed;
+ TUint32 iXid;
+ };
+
+inline void TDhcpRnd::SetXid(TUint32 aXid)
+/**
+ * Sets transaction id
+ *
+ * @internalTechnology
+ *
+ */
+ {
+ iXid = aXid;
+ }
+
+inline TUint32 TDhcpRnd::Xid() const
+/**
+ * Returns transaction id
+ *
+ * @internalTechnology
+ *
+ */
+ {
+ return iXid;
+ }
+
+inline void TDhcpRnd::Init6()
+/**
+ * Initialises class to a random value
+ *
+ * @internalTechnology
+ */
+ {
+ SetXid(static_cast<TUint32>(Rnd(0,0xFFFFFF)));
+ }
+
+inline void TDhcpRnd::Init()
+/**
+ * Initialises class to a random value
+ *
+ * @internalTechnology
+ */
+ {
+ SetXid(static_cast<TUint32>(Rnd(0,KMaxTInt)));
+ }
+
+/**
+Byte-to byte copying one object to another. Using Mem::Copy allows to avoid system crash on target platform
+if the destination address isn't aligned to machine word boundary (e.g if it is a middle of some buffer).
+Also performs a kind of type-check.
+
+@param apDst destination address
+@param apSrc pointer to the source object
+@return pointer to the destination object
+*/
+template<class T>
+inline T* ObjectByteCopy(T* apDst, const T* apSrc)
+{
+ return reinterpret_cast<T*>( Mem::Copy(apDst, apSrc ,sizeof(T)));
+}
+
+
+
+
+#endif // __DHCP_STD_H__
+