diff -r 000000000000 -r af10295192d8 networkingtestandutils/exampleinternetutilities/INC/PINGENG.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkingtestandutils/exampleinternetutilities/INC/PINGENG.H Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,192 @@ +// Copyright (c) 2001-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: +// Started by MWT, June 1997 +// +// + +#if !defined (__PINGENG_H__) +#define __PINGENG_H__ + +#if !defined(__IN_SOCK_H__) +#include +#endif + +class MPingNotificationHandler + { +public: + virtual void Pinging(const TNameRecord& aRecord, TInt aBytes) const=0; + virtual void Sent() const=0; + virtual void Reply(const TInetAddr& aFrom, TInt aBytes, TInt aSeq, TTimeIntervalMicroSeconds32 aTime) const=0; + virtual void Icmp4Message(const TInetAddr& aFrom, TInt aType, TInt aCode, const TDesC8& aRestOfIt) const=0; + virtual void Icmp6Message(const TInetAddr& aFrom, TInt aType, TInt aCode) const=0; + virtual void Finished(const TNameRecord& aRecord, TInt aNrTransmitted, TInt aNrReceived, TInt aNrDuplicates, TInt aMin, TInt aMax, TInt aSum, TInt aError) =0; + }; + +class TPingOptions + { +public: + IMPORT_C TPingOptions(); +public: + TInt iNumberOfPings; + TTimeIntervalMicroSeconds32 iInterval; + TTimeIntervalMicroSeconds32 iWait; + THostName iDestname; + TInt iPingSize; + TBool iResolveAddress; + TInt iPreload; + TInt iBacklog; + TBool iPrompt; + TInt iConnIap; + TInt iConnSnap; + }; + +class CPingEng; +class TPingRecord + { +friend class CPingEng; + +public: + TPingRecord(TUint aSeqNr); +private: + TTime iSendTime; + TSglQueLink iLink; + TInt iSeqNr; + }; + +class CPingTimer; +class CPingSender; +class CPingReceiver; +class HPingHeader; + + +class CPingEng : public CBase + { +public: + IMPORT_C static CPingEng* NewL(MPingNotificationHandler& aUi); + IMPORT_C ~CPingEng(); + + IMPORT_C void SetPriorities(TInt aTimerPriority, TInt aSenderPriority, TInt aReceiverPriority); + IMPORT_C void StartL(const TPingOptions& aOptions); + IMPORT_C void Cancel(); + IMPORT_C void CancelAndFinished(); + + void TimerComplete(); + void SendCompleteL(); + void SendDoCancel(); + void RecvComplete(); + void RecvDoCancel(); + +private: + void ConstructL(); + CPingEng(MPingNotificationHandler& aUi); + + void NextSend(); + void DoError(TInt aError); + void PurgeQue(); + void EmptyPingRecordQue(); + void DeletePingRecord(TPingRecord* aRecord); + enum TState { EStopped, ELookingUp, ESending }; + + TState iState; + MPingNotificationHandler& iUi; + CPingTimer* iTimer; + CPingSender* iSender; + CPingReceiver* iReceiver; + TPingOptions iOptions; + RSocketServ iSocketServ; + RSocket iSocket; + RHostResolver iResolver; + TNameEntry iNameEntry; + TInetAddr iSrcAddr; + + TInt iNrTransmitted; + TInt iNrReceived; + TInt iNrDuplicates; + TInt iMinTime; + TInt iMaxTime; + TInt iSumTime; + + TInt iSendFlags; + + TSglQue iQue; + TInt iNoInQue; + + RConnection iConnect; + HPingHeader* iRecvData; + HPingHeader* iSendData; + + TInt iId; + + TBool iIsLoopback; + }; + +enum TPingDefaultPriorites + { + EPingTimerPriority=10, + EPingSenderPriority=20, + EPingReceiverPriority=30, + }; + +// ICMP Type and Code values +const TUint KIPv4PingTypeEchoReply = 0; +const TUint KIPv4PingCodeEcho = 0; +const TUint KIPv4PingTypeEchoRequest = 8; +const TUint KIPv4PingTypeUnreachable = 3; +const TUint KIPv4PingCodeUnreachNet = 0; +const TUint KIPv4PingCodeUnreachHost = 1; +const TUint KIPv4PingCodeUnreachProtocol = 2; +const TUint KIPv4PingCodeUnreachPort = 3; +const TUint KIPv4PingCodeUnreachNeedFrag = 4; +const TUint KIPv4PingCodeUnreachSrcRouteFail = 5; +const TUint KIPv4PingCodeUnreachNetUnknown = 6; +const TUint KIPv4PingCodeUnreachHostUnknown = 7; +const TUint KIPv4PingCodeUnreachSrcHostIsolated = 8; +const TUint KIPv4PingCodeUnreachNetProhibited = 9; +const TUint KIPv4PingCodeUnreachHostProhibited = 10; +const TUint KIPv4PingCodeUnreachNetTOS = 11; +const TUint KIPv4PingCodeUnreachHostTOS = 12; +const TUint KIPv4PingCodeUnreachProhibited = 13; +const TUint KIPv4PingCodeUnreachPrecVolation = 14; +const TUint KIPv4PingCodeUnreachPrecCutoff = 15; +const TUint KIPv4PingTypeSourceQuench = 4; +const TUint KIPv4PingTypeRedirect = 5; +const TUint KIPv4PingCodeRedirectNet = 0; +const TUint KIPv4PingCodeRedirectHost = 1; +const TUint KIPv4PingCodeRedirectNetTOS = 2; +const TUint KIPv4PingCodeRedirectHostTOS = 3; +const TUint KIPv4PingTypeTimeExceeded = 11; +const TUint KIPv4PingCodeExceedInTransit = 0; +const TUint KIPv4PingCodeExceedInReasm = 1; +const TUint KIPv4PingTypeBadParameter = 12; + +const TUint KIPv6PingTypeEchoReply = 129; +const TUint KIPv6PingTypeEchoRequest = 128; +const TUint KIPv6PingCodeEcho = 0; +const TUint KIPv6PingTypeUnreachable = 1; +const TUint KIPv6PingCodeNoRoute = 0; +const TUint KIPv6PingCodeAdminProhibited = 1; +const TUint KIPv6PingCodeAddressUnreachable = 3; +const TUint KIPv6PingCodePortUnreachable = 4; +const TUint KIPv6PingTypePacketTooBig = 2; +const TUint KIPv6PingCodePacketTooBig = 0; +const TUint KIPv6PingTypeTimeExeeded = 3; +const TUint KIPv6PingCodeHLExeeded = 0; +const TUint KIPv6PingCodeFragReassemblyExeeded = 1; +const TUint KIPv6PingTypeParamProblem = 4; +const TUint KIPv6PingCodeErroneousHeader = 0; +const TUint KIPv6PingCodeNextHeaderUnrecognised = 1; +const TUint KIPv6PingCodeIPv6OptionUnrecognised = 2; + +#endif +