networkingtestandutils/exampleinternetutilities/INC/PINGENG.H
changeset 0 af10295192d8
--- /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 <in_sock.h>
+#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<TPingRecord> 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
+