supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplstate.cpp
changeset 0 667063e416a2
child 22 4c4ed41530db
--- /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;
+	}
+
+
+