cryptomgmtlibs/securitytestfw/test/sntpclient/sntpclientengine.cpp
changeset 8 35751d3474b7
parent 0 2c201484c85f
--- a/cryptomgmtlibs/securitytestfw/test/sntpclient/sntpclientengine.cpp	Tue Jul 21 01:04:32 2009 +0100
+++ b/cryptomgmtlibs/securitytestfw/test/sntpclient/sntpclientengine.cpp	Thu Sep 10 14:01:51 2009 +0300
@@ -1,295 +1,295 @@
-/*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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: 
-*
-*/
-
-
-#include "sntpclientengine.h"
-#include "util.h"
-
-// 40 second timeout on operations
-#define SNTP_ENGINE_TIMEOUT 40000000 
-
-// NTP port
-
-#define SNTP_REMOTE_PORT 123
-
-_LIT(KNTPEpochDate,"19000000:");
-
-/* The simplest possible NTP request */
-
-static const TUint8 sntpRequest[48] = {
-	0x23, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00 };
-	
-/* The main engine of the SNTP client */
-
-CSNTPClient* CSNTPClient::NewL(TCommandLineArgs& aArgs)
-	{
-	CSNTPClient* self = CSNTPClient::NewLC(aArgs);
-	CleanupStack::Pop(self);
-	return self;
-	}
-	
-CSNTPClient* CSNTPClient::NewLC(TCommandLineArgs& aArgs)
-	{
-	CSNTPClient* self = new (ELeave) CSNTPClient(aArgs);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	return self;
-	}
-	
-TSNTPClientState CSNTPClient::State()
-	{
-	return iState;
-	}
-	
-void CSNTPClient::Start()
-	{
-	
-	iState = EStateResolve;
-	iResolver.GetByName(*(iArgs.iServers[iServerIndex]), iNameEntry, iStatus);
-	SetActive();
-	iTimer->After(SNTP_ENGINE_TIMEOUT);
-	
-	}
-	
-CSNTPClient::~CSNTPClient()
-	{
-	Cancel();
-	iResolver.Close();
-	iSock.Close();
-	iSockServ.Close();
-	
-	delete iTimer;
-	}
-	
-CSNTPClient::CSNTPClient(TCommandLineArgs& aArgs)
-	: CActive(EPriorityStandard), iArgs(aArgs)
-	{
-	}
-	
-void CSNTPClient::ConstructL()
-	{
-	User::LeaveIfError(iSockServ.Connect());
-	User::LeaveIfError(iSock.Open(iSockServ, KAfInet, KSockDatagram, KProtocolInetUdp));
-	User::LeaveIfError(iResolver.Open(iSockServ, KAfInet, KProtocolInetUdp));
-	
-	iTimer = CTimeOutTimer::NewL(EPriorityHigh, *this);
-	CActiveScheduler::Add(this);
-	}
-	
-void CSNTPClient::RunL()
-	{
-	
-	if (iStatus.Int() < 0)
-		{
-		User::Leave(iStatus.Int());
-		}
-
-	switch (iState)
-		{
-	
-	case EStateResolve:
-		iTimer->Cancel();
-		iBuffer.Zero();
-		iBuffer.Append(sntpRequest, 48);
-	
-		// set the port on the address
-		iNameEntry().iAddr.SetPort(SNTP_REMOTE_PORT);
-	
-		iState = EStateWrite;
-		iSock.SendTo(iBuffer, iNameEntry().iAddr, 0, iStatus);
-		SetActive();
-		iTimer->After(SNTP_ENGINE_TIMEOUT);
-		break;
-	
-	case EStateWrite:
-		iTimer->Cancel();
-		iState = EStateRead;
-		iBuffer.Zero();
-		iSock.RecvFrom(iBuffer, iNameEntry().iAddr, 0, iStatus);
-		SetActive();
-		iTimer->After(SNTP_ENGINE_TIMEOUT);
-		break;
-		
-	case EStateRead:
-		{
-		iTimer->Cancel();
-		SetTimeL();
-		iStatus = KRequestPending;
-		iState = EStateComplete;
-		TRequestStatus* status = &iStatus;
-		SetActive();
-		User::RequestComplete(status, KErrNone);
-		break;
-		}
-		
-	case EStateComplete:
-		CActiveScheduler::Stop();
-		// done
-		break;
-		
-	default:
-		// wuh oh. BC break!
-		User::Leave(KErrArgument);
-		break;
-		
-		}
-	
-	}
-	
-void CSNTPClient::DoCancel()
-	{
-	
-	iTimer->Cancel();
-
-	switch (iState)
-		{
-	case EStateResolve:
-		iResolver.Cancel();
-		break;
-	case EStateWrite:
-		iSock.CancelSend();
-		break;
-	case EStateRead:
-		iSock.CancelRecv();
-		break;
-		}
-		
-	}
-	
-	
-TInt CSNTPClient::RunError(TInt /* aError */)
-	{
-	// The current server didn't work, lets try the next if available.
-	iTimer->Cancel();
-	
-	if (++iServerIndex < iArgs.iServers.Count())
-		{
-		Start();
-		}
-	else
-		{
-		iState = EStateFailed;
-		CActiveScheduler::Stop();
-		}
-	return KErrNone;
-	}
-	
-void CSNTPClient::TimerExpired()
-	{
-	Cancel();
-	
-	// The current server didn't work, lets try the next if available.
-	
-	if (++iServerIndex < iArgs.iServers.Count())
-		{
-		Start();
-		}
-	else
-		{
-		iState = EStateAborted;
-		CActiveScheduler::Stop();
-		}
-	}
-	
-void CSNTPClient::SetTimeL()
-	{
-	
-	TUint32 timestamp(0);
-	
-	/* Use the seconds from the transmit time field 
-	   
-	 */
-	
-	for (TInt i = 40; i < 44; ++i)
-		{
-		timestamp = (timestamp << 8) + iBuffer[i];
-		}
-	
-	// Obtain the time, including the specified timezone offset
-	
-	TTimeIntervalMinutes mins(timestamp / 60);
-	TTimeIntervalSeconds secs(timestamp % 60);
-	
-	TTime ntpTime;
-	User::LeaveIfError(ntpTime.Set(KNTPEpochDate));
-	ntpTime += mins;
-	ntpTime += secs;
-	
-	// Apply offset and (possibly) daylight savings time
-	
-	TTimeIntervalHours hours;
-	
-	if (iArgs.iApplyDaylightSavings && Util::DaylightSavingsAppliesL(ntpTime))
-		{
-		hours = iArgs.iOffset + 1;
-		}
-	else
-		{
-		hours = iArgs.iOffset;
-		}
-		
-	ntpTime += hours;
-	
-	User::LeaveIfError(User::SetHomeTime(ntpTime));
-	
-	}
-	
-	
-/* Timeout handler for read/write operations */
-
-CTimeOutTimer::CTimeOutTimer(const TInt aPriority)
-    : CTimer(aPriority)
-    {
-    }
-
-CTimeOutTimer::~CTimeOutTimer()
-    {
-	Cancel();
-    }
-
-CTimeOutTimer* CTimeOutTimer::NewL(const TInt aPriority, MTimeOutNotify& aTimeOutNotify)
-    {
-    CTimeOutTimer *p = new (ELeave) CTimeOutTimer(aPriority);
-    CleanupStack::PushL(p);
-	p->ConstructL(aTimeOutNotify);
-	CleanupStack::Pop();
-    return p;
-    }
-
-void CTimeOutTimer::ConstructL(MTimeOutNotify &aTimeOutNotify)
-    {
-	iNotify=&aTimeOutNotify;
-	CTimer::ConstructL();
-    CActiveScheduler::Add(this);
-    }
-
-void CTimeOutTimer::RunL()
-// Timer request has completed, so notify the timer's owner
-    {
-	iNotify->TimerExpired();
-	}
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+*
+*/
+
+
+#include "sntpclientengine.h"
+#include "util.h"
+
+// 40 second timeout on operations
+#define SNTP_ENGINE_TIMEOUT 40000000 
+
+// NTP port
+
+#define SNTP_REMOTE_PORT 123
+
+_LIT(KNTPEpochDate,"19000000:");
+
+/* The simplest possible NTP request */
+
+static const TUint8 sntpRequest[48] = {
+	0x23, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00 };
+	
+/* The main engine of the SNTP client */
+
+CSNTPClient* CSNTPClient::NewL(TCommandLineArgs& aArgs)
+	{
+	CSNTPClient* self = CSNTPClient::NewLC(aArgs);
+	CleanupStack::Pop(self);
+	return self;
+	}
+	
+CSNTPClient* CSNTPClient::NewLC(TCommandLineArgs& aArgs)
+	{
+	CSNTPClient* self = new (ELeave) CSNTPClient(aArgs);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+	
+TSNTPClientState CSNTPClient::State()
+	{
+	return iState;
+	}
+	
+void CSNTPClient::Start()
+	{
+	
+	iState = EStateResolve;
+	iResolver.GetByName(*(iArgs.iServers[iServerIndex]), iNameEntry, iStatus);
+	SetActive();
+	iTimer->After(SNTP_ENGINE_TIMEOUT);
+	
+	}
+	
+CSNTPClient::~CSNTPClient()
+	{
+	Cancel();
+	iResolver.Close();
+	iSock.Close();
+	iSockServ.Close();
+	
+	delete iTimer;
+	}
+	
+CSNTPClient::CSNTPClient(TCommandLineArgs& aArgs)
+	: CActive(EPriorityStandard), iArgs(aArgs)
+	{
+	}
+	
+void CSNTPClient::ConstructL()
+	{
+	User::LeaveIfError(iSockServ.Connect());
+	User::LeaveIfError(iSock.Open(iSockServ, KAfInet, KSockDatagram, KProtocolInetUdp));
+	User::LeaveIfError(iResolver.Open(iSockServ, KAfInet, KProtocolInetUdp));
+	
+	iTimer = CTimeOutTimer::NewL(EPriorityHigh, *this);
+	CActiveScheduler::Add(this);
+	}
+	
+void CSNTPClient::RunL()
+	{
+	
+	if (iStatus.Int() < 0)
+		{
+		User::Leave(iStatus.Int());
+		}
+
+	switch (iState)
+		{
+	
+	case EStateResolve:
+		iTimer->Cancel();
+		iBuffer.Zero();
+		iBuffer.Append(sntpRequest, 48);
+	
+		// set the port on the address
+		iNameEntry().iAddr.SetPort(SNTP_REMOTE_PORT);
+	
+		iState = EStateWrite;
+		iSock.SendTo(iBuffer, iNameEntry().iAddr, 0, iStatus);
+		SetActive();
+		iTimer->After(SNTP_ENGINE_TIMEOUT);
+		break;
+	
+	case EStateWrite:
+		iTimer->Cancel();
+		iState = EStateRead;
+		iBuffer.Zero();
+		iSock.RecvFrom(iBuffer, iNameEntry().iAddr, 0, iStatus);
+		SetActive();
+		iTimer->After(SNTP_ENGINE_TIMEOUT);
+		break;
+		
+	case EStateRead:
+		{
+		iTimer->Cancel();
+		SetTimeL();
+		iStatus = KRequestPending;
+		iState = EStateComplete;
+		TRequestStatus* status = &iStatus;
+		SetActive();
+		User::RequestComplete(status, KErrNone);
+		break;
+		}
+		
+	case EStateComplete:
+		CActiveScheduler::Stop();
+		// done
+		break;
+		
+	default:
+		// wuh oh. BC break!
+		User::Leave(KErrArgument);
+		break;
+		
+		}
+	
+	}
+	
+void CSNTPClient::DoCancel()
+	{
+	
+	iTimer->Cancel();
+
+	switch (iState)
+		{
+	case EStateResolve:
+		iResolver.Cancel();
+		break;
+	case EStateWrite:
+		iSock.CancelSend();
+		break;
+	case EStateRead:
+		iSock.CancelRecv();
+		break;
+		}
+		
+	}
+	
+	
+TInt CSNTPClient::RunError(TInt /* aError */)
+	{
+	// The current server didn't work, lets try the next if available.
+	iTimer->Cancel();
+	
+	if (++iServerIndex < iArgs.iServers.Count())
+		{
+		Start();
+		}
+	else
+		{
+		iState = EStateFailed;
+		CActiveScheduler::Stop();
+		}
+	return KErrNone;
+	}
+	
+void CSNTPClient::TimerExpired()
+	{
+	Cancel();
+	
+	// The current server didn't work, lets try the next if available.
+	
+	if (++iServerIndex < iArgs.iServers.Count())
+		{
+		Start();
+		}
+	else
+		{
+		iState = EStateAborted;
+		CActiveScheduler::Stop();
+		}
+	}
+	
+void CSNTPClient::SetTimeL()
+	{
+	
+	TUint32 timestamp(0);
+	
+	/* Use the seconds from the transmit time field 
+	   
+	 */
+	
+	for (TInt i = 40; i < 44; ++i)
+		{
+		timestamp = (timestamp << 8) + iBuffer[i];
+		}
+	
+	// Obtain the time, including the specified timezone offset
+	
+	TTimeIntervalMinutes mins(timestamp / 60);
+	TTimeIntervalSeconds secs(timestamp % 60);
+	
+	TTime ntpTime;
+	User::LeaveIfError(ntpTime.Set(KNTPEpochDate));
+	ntpTime += mins;
+	ntpTime += secs;
+	
+	// Apply offset and (possibly) daylight savings time
+	
+	TTimeIntervalHours hours;
+	
+	if (iArgs.iApplyDaylightSavings && Util::DaylightSavingsAppliesL(ntpTime))
+		{
+		hours = iArgs.iOffset + 1;
+		}
+	else
+		{
+		hours = iArgs.iOffset;
+		}
+		
+	ntpTime += hours;
+	
+	User::LeaveIfError(User::SetHomeTime(ntpTime));
+	
+	}
+	
+	
+/* Timeout handler for read/write operations */
+
+CTimeOutTimer::CTimeOutTimer(const TInt aPriority)
+    : CTimer(aPriority)
+    {
+    }
+
+CTimeOutTimer::~CTimeOutTimer()
+    {
+	Cancel();
+    }
+
+CTimeOutTimer* CTimeOutTimer::NewL(const TInt aPriority, MTimeOutNotify& aTimeOutNotify)
+    {
+    CTimeOutTimer *p = new (ELeave) CTimeOutTimer(aPriority);
+    CleanupStack::PushL(p);
+	p->ConstructL(aTimeOutNotify);
+	CleanupStack::Pop();
+    return p;
+    }
+
+void CTimeOutTimer::ConstructL(MTimeOutNotify &aTimeOutNotify)
+    {
+	iNotify=&aTimeOutNotify;
+	CTimer::ConstructL();
+    CActiveScheduler::Add(this);
+    }
+
+void CTimeOutTimer::RunL()
+// Timer request has completed, so notify the timer's owner
+    {
+	iNotify->TimerExpired();
+	}