Tidied iocli exports, build macro tweaks.
Removed 4 overloads of CCommandBase::RunCommand[L] that are no longer used at all, and changed one more to not be exported as it's only used internally to iocli.dll.
fixed builds on platforms that don't support btrace or any form of tracing.
// Copyright (c) 2000-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:
// pingmodel.h - icmp echo client engine
// This software has been implemented in the 6PACK
// project at the Mobile Networks Laboratory (MNW)
// http://www.research.nokia.com/projects/6pack/
//
#if !defined __PINGMODEL_H
#define __PINGMODEL_H
#include <es_sock.h>
#include <in_sock.h>
#include <nifmbuf.h>
#include "in_icmp.h"
#include <icmp6_hdr.h>
#include "const.h"
#ifdef IAPSETTING
#include <agentclient.h>
#endif
// constants
#define TIMESTAMP_SIZE sizeof(TInt64) //Timestamp Size
#define DEFDATALEN 64 - TIMESTAMP_SIZE //default data length
#define SECOND 1000000 // One second is 1000000 us. (1 us. per tick)
//ICMPv6 codes not defined in .h's
#define KInet6ICMP_HopLimitExceeded 0
#define KInet6ICMP_FragReassExceeded 1
#define KInet6ICMP_NoRoute 0
#define KInet6ICMP_AdminProhibition 1
#define KInet6ICMP_NotNeighbour 2
#define KInet6ICMP_AddrUnreach 3
#define KInet6ICMP_PortUnreach 4
#define KInet6ICMP_ErrHdrField 0
#define KInet6ICMP_NextHdrUnknown 1
#define KInet6ICMP_OptionUnkown 2
#define MAX_PATTERN_LENGTH 16 //Must match the value of the pattern in the RSS file!!!
#ifdef IAPSETTING
#define MAX_IAP_LENGTH 5 //Must match the value of the pattern in the RSS file!!!
#endif
class CPingContainer;
class CPingSender;
const TUint KPingQuiet = 0x01;
const TUint KPingVerbose = 0x02;
const TUint KPingPackLimit = 0x04;
const TUint KPingDebug = 0x08;
//Contains engine's saved preferences
class TPreferences
{
public:
TUint iFlags;
//Contains:
//Bit 0 TBool iQuiet; //No packet info, just statistics
//Bit 1 TBool iVerbose; //Verbose Output. All ICMP packets, not only Echo reply
//Bit 2 TBool iPackLimit; //Indicates if unlimited packet number
//Bit 3 TBool iDebug; //Set the SO_DEBUG flag in the socket
TUint iSecWait; //Time between sent packets (Default 1 second)
TUint iPacketDataSize; //Default Data Size (not including ICMP header)
TUint iTotalPackets; //Number of ICMP Echo Request packets to send
TUint iLastSecWait; //Time to wait for the Last packet. Default 2
TBuf<KHostNameLimit> iHostname;
TBuf<MAX_PATTERN_LENGTH> iPattern; //Pattern to fill the packet.Default 0xFF (Stored as text)
#ifdef IAPSETTING
TUint iIAP;
#endif
//Not used yet
//TUint iHopLimit; //Time-to-live in hops default 255 (0 means not set)
//TBool iNumericOutput; //Resolve adresses by default
};
class CPingSender;
class CPingSingleSender;
//Ping Utility class. Contains All the ping model and create active objects to
// send and receive from the socket
class CPing : public CActive
{
friend class CPingSender;
friend class CPingSingleSender;
public:
CPing();
~CPing();
void ConstructL(TPreferences aPref);
//return the current preferences
void GetPreferences(TPreferences &aPref);
static void DefaultPreferences(TPreferences &aPref);
void SetConsole(CPingContainer *aConsole);
TDes* GetHostName();
void SetHostName(const TDesC& ahostname);
void EndPingL();
TBool IsRunning();
void BeginL();
#ifdef IAPSETTING
void StartConnection();
#endif
protected:
TUint16 in_chksum(TUint16 *data, TUint len);
void ComposeFirstICMPPacket(); //Compose a whole ICMPPacket
void ComposeICMPPacket(); //Only composes timestamp and sequence number
void StampPacket(); // Modify the composed packet with fresh timestamp and checksum
void NextSeq();
void CloseAll(); //Closes all the resources
void PrintICMPData(const TDesC8& adata);
void IssueRequest();
void RunL(); //Segment of code to execute
void DoCancel(); //Stops Execution of Ping
private:
void CreateSocketAOL();
void Statistics();
void WriteLineIfNotQuiet(const TDesC& abuf);
void ErrorL(const TDesC& string,TInt error);
void CLR(TUint16 num);
void SET(TUint16 num);
TBool TEST(TUint16 num);
TPtrC PacketType(ThdrICMP *hdr);
//TPtrC PacketTypev6(TInet6HeaderICMP_Echo *aHdr);
void PacketTypev6(TDes& buf,ThdrICMP *aHdr);
void Stop();
TUint16 RandomNumber();
private:
CPingContainer *iConsole;
RSocketServ iSockServ; // Socket Server
RSocket iSocket; // Socket
RHostResolver iHostResolv; //Resolver
//TRequestStatus status; // To wait for socket operations completion
CPingSender *iPingSender;
TUint32 iDup[8]; //Calculates duplicate packets up to 256 packets, after
//it begins again using modulus (%, MOD)
HBufC8 *iPacketData;
TPtr8 iPacket;
TUint16 iId;
TUint iMaxTime; //Maximum time
TUint iMinTime; //Minimum time
TUint iTimeSum; //all times sum
TBuf<KHostNameLimit> iHostname; // Contains hostname to ping
TUint iDupPackets; //Duplicated packets
TBool iRunning;
TUint iStage; //Stages to use non-blocking resolver in RunL
TNameEntry iEntry; //contains address resolution data
HBufC8 *iReceivedDataBuffer;
TPtr8 iReceivedData;
TUint iType;
TInt64 iSeed; //Used for random iId generation
public:
TBool iNumericOutput; //Resolve adresses by default
TUint iSecWait; //Time between sent packets (Default 1 second)
TUint iPacketDataSize;//Default Data Size (not including ICMP header)
TBool iQuiet; //No packet info, just statistics
TUint iHopLimit; //Time-to-live in hops default 255 (0 means not set)
TBool iVerbose; //Verbose Output. All ICMP packets, not only Echo reply
TBool iPackLimit; //Indicates if unlimited packet number
TUint iSentPackets; //ICMP Echo Request Packets sent til now
TUint iRecvPackets; //ICMP Echo Reply Packets received til now
TUint iTotalPackets; //Number of ICMP Echo Request packets to send
TBuf<MAX_PATTERN_LENGTH> iPattern; //Pattern to fill the packet.Default 0xFF
TBool iDebug; //Set the SO_DEBUG flag in the socket
TUint iLastSecWait; //Time to wait for the Last packet. Default 2
TUint iChksumErrors;
TUint iSockErrors;
TInetAddr iHostAddr; //Address to Ping
#ifdef IAPSETTING
TUint iIAP;
RGenericAgent iGenericAgent; // To establish the connection with the ISP.
#endif
};
// Used by CPing
// Send packets using a CTimer (CActive) object
// Not intended to run alone!!!
class CPingSender : public CTimer
{
public:
//constructor
CPingSender();
//destructor
~CPingSender();
//second phase constructor
void ConstructL(CPing *aPingModel);
void FirstRunL();
protected:
//Issues next RunL execution
void IssueRequest();
//Issues last RunL execution
void IssueLastRequest();
// will send all the packets
void RunL();
//Cancel Packet Sending
void DoCancel();
void SendFirstPacketL();
void SendPacket();
private:
CPing *iPingModel;
CPingSingleSender *iSender;
};
// Used by CPingSender
// Sends packets. Cannot be done directly by CPingSender because there are conflicts with
// diferent TRequestStatus.
class CPingSingleSender : public CActive
{
public:
//constructor
CPingSingleSender(CPing *aPingModel);
//destructor
~CPingSingleSender();
void FirstRunLD();
void NextPacket();
protected:
//Issues next RunL execution
void IssueRequest();
//Issues last RunL execution
void IssueLastRequest();
// will send all the packets
void RunL();
//Cancel Packet Sending
void DoCancel();
private:
CPing *iPingModel;
TUint iUnsent;
};
#endif