--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplstate.cpp Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,403 @@
+/*
+* Copyright (c) 2002-2005 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: Implementation of class COMASUPLState
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include <utf.h>
+
+#include "epos_comasuplsessionid.h"
+
+#include "epos_comasuplstate.h"
+#include "epos_comasupltimeouttimer.h"
+#include "epos_comasupltrace.h"
+
+_LIT(KTraceFileName,"SUPL_OMA_SESSION::EPos_COMASuplState.cpp");
+
+#if defined(_DEBUG)
+
+ _LIT( KPanicMsg, "COMASUPLState");
+
+ enum TOMASuplStatePanicCode
+ {
+ EInvalidStateObserver = -1001,
+ EInvalidMsgProcess = -1002
+
+ };
+
+ void Panic( TOMASuplStatePanicCode aReason )
+ {
+ User::Panic( KPanicMsg, aReason );
+ }
+
+#endif
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+//Default constructor
+COMASuplState::COMASuplState()
+ {
+ iMessageTimeOut = 0;
+ iCurrentState = ESUPL_NONE;
+ }
+
+//Destructor
+COMASuplState::~COMASuplState()
+ {
+ CancelOperation(); //Manish
+ delete iTimer;
+ delete iTrace;
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplState::GenerateMessage
+// Generates message...which message to be generate will be depend on derived class implementation
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt COMASuplState::GenerateMessageL()
+ {
+ //Nothing to do here
+ iTrace->Trace(_L("COMASuplState::GenerateMessage...No use"), KTraceFileName, __LINE__);
+ return KErrNotSupported;
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplState::CancelOperation
+// Cancels Operation...which will be depend on derived class implementation
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplState::CancelOperation()
+ {
+ StopTimer();
+ //Debug mode
+ TBuf<64> msg(_L("COMASuplState::CancelOperation..."));
+ switch(iCurrentState)
+ {
+ case ESUPL_NONE:
+ msg.Append(_L("ESUPL_NONE"));
+ break;
+ case ESUPL_START:
+ msg.Append(_L("ESUPL_START"));
+ break;
+ case ESUPL_RESPONSE:
+ msg.Append(_L("ESUPL_RESPONSE"));
+ break;
+ case ESUPL_POS:
+ msg.Append(_L("ESUPL_POS"));
+ break;
+ case ESUPL_POS_INIT:
+ msg.Append(_L("ESUPL_POS_INIT"));
+ break;
+ case ESUPL_INIT:
+ msg.Append(_L("ESUPL_INIT"));
+ break;
+ case ESUPL_END:
+ msg.Append(_L("ESUPL_END"));
+ break;
+ default:
+ msg.Append(_L("WRONG MESSAGE"));
+ }
+ if(iTrace)
+ iTrace->Trace(msg, KTraceFileName, __LINE__);
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplState::SetMsgStateObserver
+// Sets the message state observer
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplState::SetMsgStateObserver(MOMASuplMsgStateObserver* aMsgStateObserver)
+ {
+ __ASSERT_DEBUG(aMsgStateObserver, Panic(EInvalidStateObserver) );
+ iMsgStateObserver = aMsgStateObserver;
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplState::EncodeMessageL
+// Encodes message...which message to be encode will be depend on derived class implementation
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+HBufC8* COMASuplState::EncodeMessageL(TOMASuplVersion&
+#if defined(PRINT_MESSAGE)
+aSuplVersion
+#endif
+,
+COMASuplSessionID*
+#if defined(PRINT_MESSAGE)
+aSessionId
+#endif
+,
+TInt &aError)
+ {
+#ifdef PRINT_MESSAGE //This is only for logging purpose.
+ TInt major,minor,ServInd;
+ TBuf<128> msg(_L("SUPL Version is : Major :"));
+ TBuf<4> ver;
+
+ aSuplVersion.SuplVersion(major,minor,ServInd);
+
+ ver.AppendNum(major);
+ msg.Append(ver);
+
+ msg.Append(_L(" Minor : "));
+ ver.Zero();
+ ver.AppendNum(minor);
+ msg.Append(ver);
+
+ msg.Append(_L(" ServInd : "));
+ ver.Zero();
+ ver.AppendNum(ServInd);
+ msg.Append(ver);
+
+ iTrace->Trace(msg,KTraceFileName, __LINE__);
+
+ COMASuplSETSessionID* suplSETID = NULL;
+ aSessionId->SETSessionID(suplSETID);
+
+ COMASuplSLPSessionID* suplSLPID = NULL;
+ aSessionId->SLPSessionID(suplSLPID);
+
+ //SET Part
+ if(suplSETID)
+ {
+ msg.Copy(_L("SET Session ID : "));
+ TBuf<4> id;
+ TInt SETSessionID;
+ TBuf8<64> IPvAddress8;
+ TBuf<64> IPvAddress;
+
+ suplSETID->SuplSETSessionID(SETSessionID,IPvAddress8);
+ COMASuplSETSessionID::TSuplSETIDType setIDType = suplSETID->SuplSETIDType();
+ if(setIDType == COMASuplSETSessionID::EIMSI )
+ {
+ iTrace->Trace(_L("SET ID is of type IMSI"),KTraceFileName, __LINE__);
+ iTrace->Trace(_L("IMSI Value :"),KTraceFileName, __LINE__);
+ msg.Copy(IPvAddress8);
+ }
+ else
+ {
+ TLex8 lex(IPvAddress8);
+
+ TChar chr;
+
+ chr = lex.Get();
+ TUint i = chr;
+ IPvAddress.AppendNum(i);
+ IPvAddress.Append(_L("."));
+
+ chr = lex.Get();
+ i = chr;
+ IPvAddress.AppendNum(i);
+ IPvAddress.Append(_L("."));
+
+ chr = lex.Get();
+ i = chr;
+ IPvAddress.AppendNum(i);
+ IPvAddress.Append(_L("."));
+
+ chr = lex.Get();
+ i = chr;
+ IPvAddress.AppendNum(i);
+
+ id.AppendNum(SETSessionID);
+ msg.Append(id);
+ msg.Append(_L(" IPAddress :"));
+ msg.Append(IPvAddress);
+ }
+ }
+ else
+ {
+ msg.Copy(_L("SET Session Id is not set."));
+ }
+
+ //SLP Part
+ if(suplSLPID)
+ {
+ msg.Copy(_L("SLP Session ID : "));
+ TBuf8<4> sessionId8;
+ TBuf<32> sessionId;
+ TBuf8<64> ipAddress8(_L8("No Address field in SLP Session ID"));
+ TBuf<64> ipAddress;
+
+ COMASuplSLPAddress* slpIPAddress = NULL;
+ suplSLPID->SuplSLPSessionID(sessionId8,slpIPAddress);
+
+ if(slpIPAddress)
+ {
+ COMASuplSLPAddress::TSuplSLPAddressType slpAddType = slpIPAddress->SLPAddressType();
+ if(slpAddType == COMASuplSLPAddress::EFqdn)
+ {
+ HBufC8* fqdn = NULL;
+ slpIPAddress->Fqdn(fqdn);
+ iTrace->Trace(_L("SLP Address is FQDN"),KTraceFileName, __LINE__);
+ iTrace->Trace(_L("FQDN Value"),KTraceFileName, __LINE__);
+ if(fqdn)
+ {
+ HBufC* fqdnBuffer = NULL;
+ fqdnBuffer = HBufC::NewL(fqdn->Length());
+ fqdnBuffer->Des().Copy(fqdn->Des());
+ iTrace->Trace(fqdnBuffer->Des(),KTraceFileName, __LINE__);
+ delete fqdnBuffer;
+ fqdnBuffer = NULL;
+ }
+
+ aError = KErrNotSupported;
+ return NULL;
+ }
+ else
+ {
+ TInt err = slpIPAddress->IPvAddress(ipAddress8);
+ if(err != KErrNone)
+ {
+ msg.Copy(_L("SLP Address is not set."));
+ iTrace->Trace(msg,KTraceFileName, __LINE__);
+ return NULL;
+ }
+ }
+ }
+
+ TLex8 lex(ipAddress8);
+ TChar chr;
+
+ chr = lex.Get();
+ TUint i = chr;
+ ipAddress.AppendNum(i);
+ ipAddress.Append(_L("."));
+
+ chr = lex.Get();
+ i = chr;
+ ipAddress.AppendNum(i);
+ ipAddress.Append(_L("."));
+
+ chr = lex.Get();
+ i = chr;
+ ipAddress.AppendNum(i);
+ ipAddress.Append(_L("."));
+
+ chr = lex.Get();
+ i = chr;
+ ipAddress.AppendNum(i);
+
+ TLex8 lex1(sessionId8);
+ for(TInt i = 0; i < 4; i++)
+ {
+ chr = lex1.Get();
+ TUint num = chr;
+ sessionId.AppendNum(num);
+ }
+
+ msg.Append(sessionId);
+ msg.Append(_L(" IPAddress : "));
+ msg.Append(ipAddress);
+ iTrace->Trace(msg,KTraceFileName, __LINE__);
+ }
+ else
+ {
+ msg.Copy(_L("SLP Session Id is not set."));
+ iTrace->Trace(msg,KTraceFileName, __LINE__);
+ }
+ #endif
+
+ aError = KErrNotSupported;
+ return NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplState::EncodeMessageL
+// Encodes message...which message to be encode will be depend on derived class implementation
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt COMASuplState::ProcessMessageL(COMASuplAsnMessageBase* /*aDecodedMessage*/)
+ {
+ iTrace->Trace(_L("COMASuplState::ProcessMessage...No use"), KTraceFileName, __LINE__);
+ return KErrNotSupported;
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplState::BaseConstructL
+// BaseConstructL.... initilization for some of the member var takes place
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplState::BaseConstructL()
+ {
+ iTrace = COMASuplTrace::NewL();
+ iTrace->Trace(_L("COMASuplState::BaseConstructL..."), KTraceFileName, __LINE__);
+ iTimer = COMASuplTimeoutTimer::NewL(*this);
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplState::GetSuplState
+// GetSuplState.... returns type of message
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+COMASuplState::TSuplMessageType COMASuplState::GetSuplState()
+ {
+ return iCurrentState;
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplState::StartTimer
+// StartTimer...starts the timer ... depending on type of message
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplState::StartTimer()
+ {
+ iTrace->Trace(_L("COMASuplState::StartTimer..."), KTraceFileName, __LINE__);
+ iTimer->StartTimer(iMessageTimeOut);
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplState::StopTimer
+// StopTimer...stops the timer .
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplState::StopTimer()
+ {
+ iTimer->StopTimer();
+ iTrace->Trace(_L("COMASuplState::StopTimer..."), KTraceFileName, __LINE__);
+ }
+
+// -----------------------------------------------------------------------------
+// COMASuplState::TimerExpired
+// TimerExpired...Gets called when time out occurs .
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void COMASuplState::TimerExpiredL()
+ {
+ iTrace->Trace(_L("COMASuplState::TimerExpired..."), KTraceFileName, __LINE__);
+ if(iMsgStateObserver)
+ iMsgStateObserver->OperationCompleteL(KErrTimedOut);
+ }
+
+void COMASuplState::SetVersion(TOMASuplVersion& aOMASuplVersion)
+ {
+ iOMASuplVersion = aOMASuplVersion;
+ }
+
+
+