supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplprotocolmanager1.cpp
changeset 0 667063e416a2
child 4 42de37ce7ce4
equal deleted inserted replaced
-1:000000000000 0:667063e416a2
       
     1 /*
       
     2 * Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:   SUPL protocol manager implementation.i.e. OMA SUPL implementation 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #include <centralrepository.h>
       
    21 #include <commdb.h>
       
    22 #include <etelmm.h> 
       
    23 #include <ecom/ecom.h> 
       
    24 #include <in_sock.h> 
       
    25 #include <bautils.h>
       
    26 #include <flogger.h>
       
    27 #include <CoreApplicationUIsSDKCRKeys.h>
       
    28 
       
    29 #include "epos_comasuplasnmessagebase.h"
       
    30 #include "epos_comasuplsessionid.h"
       
    31 #include "lbs/epos_comasuplposhandlerbase.h"
       
    32 #include "epos_suplconstants.h"
       
    33 #include "epos_csuplsettings.h"
       
    34 #include "epos_comasupletelnotifier.h"
       
    35 #include "epos_csuplsettingsinternal.h"
       
    36 #include "epos_suplterminalconstants.h"
       
    37 	
       
    38 #include "epos_comasuplprotocolmanager1.h"
       
    39 #include "epos_csuplcommunicationmanager.h"
       
    40 #include "epos_comasuplcompleteselfrequestor.h"
       
    41 #include "epos_comasuplecomeventwatcher.h"
       
    42 #include "epos_comasuplsettings.h"
       
    43 #include "epos_omasuplconstants.h"
       
    44 #include "epos_omasuplconfigurationkeys.h"
       
    45 #include "epos_comasupltrace.h"
       
    46 #include "epos_comasupltimeouttimer.h"
       
    47 #include "epos_omasuplconstants.h"
       
    48 #include "epos_comasuplcommonconfig.h"
       
    49 
       
    50 _LIT(KTraceFileName,"SUPL_OMA_PH::EPos_COMASUPLProtocolManager1.cpp");
       
    51 
       
    52 const TInt KMaxIMSILen = 20;
       
    53 const TInt KMaxDelay = 128;
       
    54 const TInt KDefaultHorizontalAccuracy = 0;
       
    55 const TInt KQueuedBufferTimeout = 11;
       
    56 
       
    57 
       
    58 // -----------------------------------------------------------------------------
       
    59 // ResetAndDestroy()
       
    60 // Resets & destroys array if leave occurs
       
    61 // -----------------------------------------------------------------------------
       
    62 void ResetAndDestroy(TAny* aArray)
       
    63 	{
       
    64 	((RImplInfoPtrArray*)aArray)->ResetAndDestroy();
       
    65 	}
       
    66 
       
    67 // -----------------------------------------------------------------------------
       
    68 // FindNearestN
       
    69 // -----------------------------------------------------------------------------
       
    70 TInt FindNearestN(TInt n)    
       
    71 	{
       
    72 	TInt count = 0;
       
    73 	TInt originalNumber = n;
       
    74 	while(n)
       
    75 		{
       
    76 			n = n >> 1;
       
    77 			count++;
       
    78 		}
       
    79 		
       
    80 	TInt previousNumber = count - 1;	
       
    81 	TReal min,max;
       
    82 	Math::Pow(min,2,previousNumber);
       
    83 	Math::Pow(max,2,count);
       
    84 	TInt avg = (min + max ) / 2;
       
    85 	if (avg < originalNumber)
       
    86 		return  max;
       
    87 	else
       
    88 		return min;
       
    89 	}
       
    90 	
       
    91 // ============================ MEMBER FUNCTIONS ===============================    
       
    92 // Create instance of concrete ECOM interface implementation
       
    93 EXPORT_C COMASUPLProtocolManager1* COMASUPLProtocolManager1::NewL()
       
    94 	{
       
    95 	COMASUPLProtocolManager1* self = new(ELeave) COMASUPLProtocolManager1();
       
    96 	CleanupStack::PushL(self);
       
    97 	self->ConstructL();
       
    98 	CleanupStack::Pop(self);
       
    99 	return self;
       
   100 	} 
       
   101  
       
   102 // Destructor.
       
   103 EXPORT_C COMASUPLProtocolManager1::~COMASUPLProtocolManager1()
       
   104 	{
       
   105 	if(iSettingsLauncher)		
       
   106 		{
       
   107 			iSettingsLauncher->CancelLaunch();
       
   108 		}
       
   109 	iSuplSettings->SetUIActive( EFalse );
       
   110 
       
   111 	DeleteAllSessions();
       
   112 	iSuplSessions.Reset();
       
   113 	iSuplSessions.Close();
       
   114 
       
   115     iTelServer.UnloadPhoneModule(iTsyName);
       
   116 
       
   117 	
       
   118 	iQueuedPacket.Close();
       
   119 	
       
   120 	delete iTimer;
       
   121 	
       
   122 	if(iSuplStorageSettings)
       
   123 		iSuplStorageSettings->RemoveObserver();
       
   124 	
       
   125 	delete iSuplStorageSettings;
       
   126 			
       
   127 	
       
   128 	delete iSuplEcomEventWatcher;
       
   129 	
       
   130     delete iSettingsLauncher;
       
   131     delete iNotifier;
       
   132 	iMobilePhone.Close(); 
       
   133 	iTelServer.Close();
       
   134 	iIMSI.Close();
       
   135 	iTrace->Trace(_L("At the End of COMASUPLProtocolManager1::~COMASUPLProtocolManager1"), 
       
   136 									KTraceFileName, __LINE__);		
       
   137 	iUIRequestArray.Close();	
       
   138 	
       
   139 	delete iOMASuplAsnHandlerBaseImpl;
       
   140 	delete iTrace;	
       
   141 	}
       
   142 
       
   143 // Constructor
       
   144 COMASUPLProtocolManager1::COMASUPLProtocolManager1() : iRunningSessionCount(0),
       
   145 													 iSessnUIObserver(NULL),
       
   146                                                      iDeInitDone(EFalse),
       
   147                                                      iNotifyStarted(EFalse),
       
   148                                                      iTimeOutDialogPresent(EFalse)
       
   149 	{
       
   150 	// no implementation required
       
   151 	}
       
   152 
       
   153 // Second phase construction.
       
   154 void COMASUPLProtocolManager1::ConstructL()
       
   155 	{
       
   156 	iTrace = COMASuplTrace::NewL();		    
       
   157 	iTrace->Trace(_L("COMASUPLProtocolManager1::ConstructL"), KTraceFileName, __LINE__); 
       
   158 	
       
   159     TRAPD(err,iOMASuplAsnHandlerBaseImpl = COMASuplAsnHandlerBase::NewL(1);) 
       
   160     TBuf<64> buf(_L("ASN Plugin 1.0 loaded with error : "));                
       
   161     buf.AppendNum(err);
       
   162     iTrace->Trace(buf,KTraceFileName, __LINE__);        
       
   163     User::LeaveIfError(err);
       
   164 
       
   165 	iSuplStorageSettings = CSuplSettingsInternal::NewL();
       
   166 	iSuplStorageSettings->SetObserverL(*this);
       
   167 
       
   168    	iSettingsLauncher = COMASuplSettingsLauncher::NewL( *this );
       
   169 	
       
   170    	iIMSI.CreateL( KMaxIMSILen );
       
   171 	iIsPreviouslyDecodingFailed = EFalse;
       
   172 	iTimer = COMASuplTimeoutTimer::NewL(*this);	
       
   173 	}
       
   174     
       
   175 // -----------------------------------------------------------------------------
       
   176 // COMASUPLProtocolManager1::CreateNewSessionL, 
       
   177 // Creates new session 
       
   178 // it transfers ownership to callee
       
   179 // 
       
   180 // -----------------------------------------------------------------------------
       
   181 //    
       
   182 EXPORT_C CSuplSessionBase* COMASUPLProtocolManager1::CreateNewSessionL(
       
   183 										CSUPLProtocolManagerBase::TSuplReqType aRequestType, 
       
   184 										TInt aIpcSessionId, 
       
   185 										RSuplTerminalSubSession::TSuplServiceType aSuplService)
       
   186 	{
       
   187 	
       
   188 	// Map the type before creating the session object
       
   189 	COMASuplSession::TOMASuplReqType requestType = COMASuplSession::ESUPL_TERMINAL;
       
   190 	switch(aRequestType)
       
   191 		{
       
   192 		case CSUPLProtocolManagerBase::ENetwork:
       
   193 			requestType = COMASuplSession::ESUPL_NETWORK;
       
   194 			break;
       
   195 		case CSUPLProtocolManagerBase::ETerminal:
       
   196 			requestType = COMASuplSession::ESUPL_TERMINAL;
       
   197 			break;
       
   198 		default:
       
   199 			requestType = COMASuplSession::ESUPL_TERMINAL;	
       
   200 			break;
       
   201 		}	
       
   202 	return CreateNewSessionL(requestType, aIpcSessionId,aSuplService);
       
   203 	}
       
   204 
       
   205 // -----------------------------------------------------------------------------
       
   206 // COMASUPLProtocolManager1::CreateNewSessionL
       
   207 // An overloaded CreateNewSession to take care of Invalid session ID
       
   208 // 
       
   209 // -----------------------------------------------------------------------------
       
   210 //    
       
   211 
       
   212 CSuplSessionBase* COMASUPLProtocolManager1::CreateNewSessionL(
       
   213 										COMASuplSession::TOMASuplReqType aRequestType, 
       
   214 										TInt aIpcSessionId,
       
   215 										RSuplTerminalSubSession::TSuplServiceType /*aSuplService*/)
       
   216 	{  
       
   217 	
       
   218 	iTrace->Trace(_L("Creating New OMA SUPL Session"), KTraceFileName, __LINE__); 
       
   219 	CSuplSessionBase* SuplSession = COMASuplSession::NewL(*iCommManager, iMobilePhone, iSuplSettings,
       
   220 															iSuplStorageSettings, aRequestType, *this, iPosHandler, iIMSI,
       
   221                                                             *this, aIpcSessionId,iOMASuplAsnHandlerBaseImpl);
       
   222 	User::LeaveIfError(iSuplSessions.Append(SuplSession));
       
   223   	return SuplSession;
       
   224 	}
       
   225 
       
   226 // -----------------------------------------------------------------------------
       
   227 // COMASUPLProtocolManager1::InitializeL 
       
   228 // Does the connect to ETel. 
       
   229 // Intilize POS if present 
       
   230 // 
       
   231 // -----------------------------------------------------------------------------
       
   232 //    
       
   233 EXPORT_C  void COMASUPLProtocolManager1::InitializeL(
       
   234 			CSuplCommunicationManager* aCommManager,
       
   235 			TRequestStatus& /*aInitilizationRequestStatus*/	)
       
   236 	{
       
   237 	iTrace->Trace(_L("COMASUPLProtocolManager1::InitializeL"), KTraceFileName, __LINE__);
       
   238 
       
   239 	iCommManager = aCommManager;			
       
   240 	   
       
   241 	//Connect to ETel
       
   242 	User::LeaveIfError(ConnectToETelL());
       
   243   
       
   244     ReadSuplUsage();    
       
   245 	 
       
   246 	if(iSuplEcomEventWatcher)
       
   247 		{
       
   248 	    iTrace->Trace(_L("NotifyOnPlugInUnInstallation starting"), KTraceFileName, __LINE__);	
       
   249 		iSuplEcomEventWatcher->NotifyOnPlugInUnInstallation();	
       
   250 		}
       
   251     iNotifier = COMASuplETelNotifier::NewL(*this,iMobilePhone);
       
   252 	iTrace->Trace(_L("ETEL Notifier created"), KTraceFileName, __LINE__);	
       
   253 	iTrace->Trace(_L("InitializeL completed"), KTraceFileName, __LINE__);	
       
   254 	}
       
   255 
       
   256 // -----------------------------------------------------------------------------
       
   257 // COMASUPLProtocolManager1::InitializeL 
       
   258 // Cancel Initilization of Protocol manager
       
   259 // 
       
   260 // -----------------------------------------------------------------------------
       
   261 //
       
   262 EXPORT_C  void COMASUPLProtocolManager1::CancelInitialize() 
       
   263 	{		
       
   264 	}
       
   265    
       
   266 // -----------------------------------------------------------------------------
       
   267 // COMASUPLProtocolManager1::RunSessionL
       
   268 // Starts the SUPL Sesssion for Terminal Initiated Location Request
       
   269 // 
       
   270 // -----------------------------------------------------------------------------
       
   271 //
       
   272 EXPORT_C void COMASUPLProtocolManager1::RunSessionL(CSuplSessionBase *const  aSuplSession,
       
   273 												   TRequestStatus& aStatus,
       
   274 												   const TDesC& aHslpAddress, 
       
   275 												   TBool aFallBack,
       
   276 												   TBool aFirstReq,
       
   277 												   TInt aAllowedCapabilities,
       
   278 												   TInt aRequestID)
       
   279 	{
       
   280 	iTrace->Trace(_L("COMASUPLProtocolManager1::RunSessionL"), KTraceFileName, __LINE__);
       
   281     TBuf<255> tempBuf;
       
   282     tempBuf.Append(_L("Server name in Protocol Handler is : "));
       
   283     tempBuf.Append(aHslpAddress);
       
   284 
       
   285     iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
       
   286     if (aFallBack)
       
   287 	    {
       
   288     	tempBuf.Copy(_L("Fallback is set as TRUE."));    
       
   289     	}
       
   290     else
       
   291     	{
       
   292     	tempBuf.Copy(_L("Fallback is set as False"));
       
   293     	}
       
   294     iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
       
   295 	
       
   296 	
       
   297     
       
   298 	iTrace->Trace(_L("COMASUPLProtocolManager1::RunSessionL"), KTraceFileName, __LINE__); 
       
   299 
       
   300 	if ( iSuplSessions.Find(aSuplSession) == KErrNotFound )
       
   301 		{
       
   302 		TRequestStatus *status = &aStatus; 
       
   303 		User::RequestComplete(status,KErrNotFound ); 
       
   304 		return;
       
   305 		}
       
   306 		
       
   307 	CheckForSessionCount();
       
   308 	iRunningSessionCount++;
       
   309 	
       
   310 	COMASuplSession* OMASession =  static_cast<COMASuplSession*>(aSuplSession);
       
   311 	OMASession->SetConfigurationParameters(iUT1_StartTimer,iUT2_PosInitTimer, iUT3_PosTimer,iPrivacyTimer,iSETMode,
       
   312         iSuplUsage, iPersistFailTimer,iSuplInitTimeOut);
       
   313 	OMASession->RunSuplSessionL(aStatus,aFirstReq, aHslpAddress, aFallBack, aAllowedCapabilities,iRunningSessionCount,aRequestID);
       
   314 	}
       
   315 
       
   316 
       
   317 // -----------------------------------------------------------------------------
       
   318 // COMASUPLProtocolManager1::RunSessionL
       
   319 // Starts the SUPL Sesssion for Terminal Initiated Location Request,with QoP support
       
   320 // 
       
   321 // -----------------------------------------------------------------------------
       
   322 //
       
   323 EXPORT_C void COMASUPLProtocolManager1::RunSessionL(
       
   324                             CSuplSessionBase *const aSuplSession,
       
   325                             TRequestStatus& aStatus,
       
   326                             const TDesC& aHslpAddress, 
       
   327                             TBool aFallBack,
       
   328                             TBool aFirstReq,
       
   329   							TInt aAllowedCapabilities,
       
   330   							TSuplTerminalQop& aQop, 
       
   331   							TInt aRequestID)
       
   332 	{
       
   333 	iTrace->Trace(_L("COMASUPLProtocolManager1::RunSessionL"), KTraceFileName, __LINE__);
       
   334     TBuf<255> tempBuf;
       
   335     tempBuf.Append(_L("Server name in Protocol Handler is : "));
       
   336     tempBuf.Append(aHslpAddress);
       
   337 
       
   338     iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
       
   339     if (aFallBack)
       
   340     	{
       
   341     	tempBuf.Copy(_L("Fallback is set as TRUE."));
       
   342     	}
       
   343     else
       
   344     	{
       
   345     	tempBuf.Copy(_L("Fallback is set as False"));
       
   346     	}
       
   347     iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
       
   348     
       
   349 	
       
   350     
       
   351 	iTrace->Trace(_L("COMASUPLProtocolManager1::RunSessionL"), KTraceFileName, __LINE__); 
       
   352 
       
   353 	if ( iSuplSessions.Find(aSuplSession) == KErrNotFound )
       
   354 		{
       
   355 		TRequestStatus *status = &aStatus; 
       
   356 		User::RequestComplete(status,KErrNotFound ); 
       
   357 		return;
       
   358 		}
       
   359 	
       
   360 	TReal32 horizonatalAccuracy;
       
   361 	if(aQop.GetHorizontalAccuracy(horizonatalAccuracy) == KErrNotFound)
       
   362 		{
       
   363 		aQop.SetHorizontalAccuracy(KDefaultHorizontalAccuracy);
       
   364 		}
       
   365 
       
   366 	TReal32 verticalAccuracy;
       
   367 	if(aQop.GetVerticalAccuracy(verticalAccuracy) == KErrNone)
       
   368 		{
       
   369         if (verticalAccuracy > KOMAMaxVerticalAccuracy)            
       
   370 		    aQop.SetVerticalAccuracy(KOMAMaxVerticalAccuracy);
       
   371 		}
       
   372 
       
   373 	TInt delay;
       
   374 	
       
   375 	if(aQop.GetDelay(delay) != KErrNotFound)
       
   376 		{
       
   377 		if(delay < 1 )
       
   378 			{
       
   379 			TRequestStatus *status = &aStatus; 
       
   380 			User::RequestComplete(status,KErrArgument); 
       
   381 			return;
       
   382 			}
       
   383 		
       
   384 		if( delay >  128 )
       
   385 			{
       
   386 			aQop.SetDelay(KMaxDelay);
       
   387 			}
       
   388 		else
       
   389 			{
       
   390 			switch(delay)	
       
   391 				{
       
   392 				case 1:
       
   393 				case 2:
       
   394 				case 4:
       
   395 				case 8:
       
   396 				case 16:
       
   397 				case 32:
       
   398 				case 64:
       
   399 				case 128:
       
   400 					  break;	
       
   401 				default:
       
   402 					{
       
   403 					aQop.SetDelay(FindNearestN(delay));
       
   404 					}
       
   405 				}
       
   406 			}
       
   407 		}
       
   408 		
       
   409 	CheckForSessionCount();
       
   410 	iRunningSessionCount++;
       
   411 	
       
   412 	COMASuplSession* OMASession =  static_cast<COMASuplSession*>(aSuplSession);
       
   413 	OMASession->SetConfigurationParameters(iUT1_StartTimer,iUT2_PosInitTimer, iUT3_PosTimer,iPrivacyTimer,iSETMode,
       
   414                     iSuplUsage, iPersistFailTimer,iSuplInitTimeOut);
       
   415 	OMASession->RunSuplSessionL(aStatus,aFirstReq, aHslpAddress, aFallBack, aAllowedCapabilities,iRunningSessionCount,aQop,aRequestID);
       
   416 	}
       
   417 
       
   418 // -----------------------------------------------------------------------------
       
   419 // COMASUPLProtocolManager1::CheckForSessionCount
       
   420 // Check for MAximum session count..if it reaches to MAX,it resets to zero
       
   421 // -----------------------------------------------------------------------------
       
   422 //
       
   423 void COMASUPLProtocolManager1::CheckForSessionCount()
       
   424 	{
       
   425 	if (iRunningSessionCount == KMaxSessionCount)
       
   426 		iRunningSessionCount = 0;
       
   427 	}
       
   428 
       
   429 
       
   430 // -----------------------------------------------------------------------------
       
   431 // COMASUPLProtocolManager1::ConnectToETelL
       
   432 // Connects to Telephony server & RMobilePhone
       
   433 // Returns System wide error,if any occurs
       
   434 // -----------------------------------------------------------------------------
       
   435 //
       
   436 TInt COMASUPLProtocolManager1::ConnectToETelL()
       
   437 	{
       
   438 	iTrace->Trace(_L("Start of COMASUPLProtocolManager1::ConnectToETelL"), KTraceFileName, __LINE__);
       
   439 	TInt err = iTelServer.Connect(); 
       
   440 	if(err != KErrNone)
       
   441 		{
       
   442 		TBuf<8> errrorCode;
       
   443 		errrorCode.AppendNum(err);
       
   444 		TBuf<64> msg(_L("Failed to Connect ETel with Reason Code "));
       
   445 		msg.Append(errrorCode);
       
   446 		iTrace->Trace(msg,KTraceFileName, __LINE__);
       
   447 		return err;
       
   448 		}
       
   449 
       
   450 	iTrace->Trace(_L("Opening CommsDatabase..."), KTraceFileName, __LINE__);		
       
   451 	CCommsDatabase* const db = CCommsDatabase::NewL(EDatabaseTypeUnspecified); 
       
   452 	CleanupStack::PushL(db); 
       
   453 
       
   454 	TUint32 modemId = 0; 
       
   455 	db->GetGlobalSettingL(TPtrC(MODEM_PHONE_SERVICES_SMS), modemId); 
       
   456 	iTrace->Trace(_L("Retriving TSY Name..."), KTraceFileName, __LINE__);		
       
   457 	CCommsDbTableView* const view = db->OpenViewMatchingUintLC(TPtrC(MODEM), TPtrC(COMMDB_ID), 
       
   458 																modemId); 
       
   459 	err = view->GotoFirstRecord(); 
       
   460 	if(err != KErrNone)
       
   461 		{
       
   462 		CleanupStack::PopAndDestroy(2,db);			
       
   463 		return err;	
       
   464 		}
       
   465 		
       
   466 	
       
   467 	view->ReadTextL(TPtrC(MODEM_TSY_NAME), iTsyName); 
       
   468 	err = iTelServer.LoadPhoneModule(iTsyName);
       
   469 	
       
   470 	if(err != KErrNone)
       
   471 		{
       
   472 		CleanupStack::PopAndDestroy(2,db);		
       
   473 		return err;
       
   474 		}
       
   475 		
       
   476 
       
   477 	// For the phone information
       
   478 	RTelServer::TPhoneInfo info;
       
   479 
       
   480 	iTelServer.GetPhoneInfo(0, info); 
       
   481 	iTrace->Trace(_L("Opening RMobilePhone..."), KTraceFileName, __LINE__);		
       
   482 	err = iMobilePhone.Open(iTelServer, info.iName);
       
   483 	
       
   484 	CleanupStack::PopAndDestroy(2,db);					
       
   485 	if(err != KErrNone)
       
   486 		{
       
   487 		return err;	
       
   488 		}
       
   489 	
       
   490 	iTrace->Trace(_L("End of COMASUPLProtocolManager1::ConnectToETelL"), KTraceFileName, __LINE__);		
       
   491 	return err;
       
   492 	}
       
   493 	
       
   494 // -----------------------------------------------------------------------------
       
   495 // COMASUPLProtocolManager1::DestroySession
       
   496 // Deletes specified session & removes from array.
       
   497 // Returns System wide error,if any occurs
       
   498 // -----------------------------------------------------------------------------
       
   499 //
       
   500 EXPORT_C TInt COMASUPLProtocolManager1::DestroySession(CSuplSessionBase* aSuplSession)	
       
   501 	{
       
   502 	// Log
       
   503 	iTrace->Trace(_L("COMASUPLProtocolManager1::DestroySession"), KTraceFileName, __LINE__);
       
   504 
       
   505 	// Check if the Session is valid
       
   506 	TInt index = iSuplSessions.Find(aSuplSession);
       
   507 
       
   508 	if(KErrNotFound == index)
       
   509 		{
       
   510 		iTrace->Trace(_L("Cannot found Supl session."), KTraceFileName, __LINE__);
       
   511 		return KErrArgument;
       
   512 		}
       
   513 
       
   514 	// Remove from Array
       
   515 	iTrace->Trace(_L("COMASUPLProtocolManager1::DestroySession Remove Session"), KTraceFileName, __LINE__);
       
   516 	iSuplSessions.Remove(index);
       
   517 
       
   518 	//Last Session invoking Destroy
       
   519 	iTrace->Trace(_L("COMASUPLProtocolManager1::DestroySession Destroy Session"), KTraceFileName, __LINE__);
       
   520 
       
   521 	COMASuplSession* OMASession =  static_cast<COMASuplSession*>(aSuplSession);
       
   522     if (OMASession->GetSessionUIFlag())
       
   523     	{
       
   524 	    OMASession->DestroySession();
       
   525         iSessnUIObserver = NULL;
       
   526     	}            
       
   527     else
       
   528 	    OMASession->DestroySession();
       
   529 
       
   530 	return KErrNone;
       
   531 	}
       
   532 	
       
   533 // -----------------------------------------------------------------------------
       
   534 // COMASUPLProtocolManager1::DeleteAllSessions
       
   535 // Delets all session & removes from array.
       
   536 // 
       
   537 // -----------------------------------------------------------------------------
       
   538 //
       
   539 void COMASUPLProtocolManager1::DeleteAllSessions()	
       
   540 	{
       
   541 	iTrace->Trace(_L("COMASUPLProtocolManager1::DeleteAllSessions"), KTraceFileName, __LINE__);
       
   542 	while(iSuplSessions.Count() > 0)
       
   543 		{
       
   544 		DestroySession(iSuplSessions[0]);
       
   545 		}
       
   546 	} 
       
   547 
       
   548 // -----------------------------------------------------------------------------
       
   549 // COMASUPLProtocolManager1::HandlePacket
       
   550 // Handles Supl packets ,  received from SLP
       
   551 // 
       
   552 // -----------------------------------------------------------------------------
       
   553 //
       
   554 EXPORT_C void COMASUPLProtocolManager1::HandlePacket(const TDesC8& aPacket, TUint aPortNum)
       
   555 	{
       
   556 	iTrace->Trace(_L("Start of COMASUPLProtocolManager1::HandlePacket"), KTraceFileName, __LINE__);
       
   557 
       
   558 	TRAPD(err,HandleOMASuplPacketsL(aPacket, aPortNum));
       
   559 	
       
   560 	if(err!= KErrNone)
       
   561 		{
       
   562 		ResetBufferingParameters();
       
   563 		TBuf<64> msg(_L("HandleOMASuplPacketsL Leaved with error code : "));
       
   564 		msg.AppendNum(err);
       
   565 		iTrace->Trace(msg, KTraceFileName, __LINE__); 
       
   566 		}
       
   567 	}
       
   568 
       
   569 // -----------------------------------------------------------------------------
       
   570 // COMASUPLProtocolManager1::HandlePacketError
       
   571 // Handles Supl packet receiving errors
       
   572 // 
       
   573 // -----------------------------------------------------------------------------
       
   574 //
       
   575 EXPORT_C void COMASUPLProtocolManager1::HandlePacketError(TInt /*aError*/)
       
   576 	{
       
   577 	// Do nothing for now
       
   578 	}
       
   579 
       
   580 // -----------------------------------------------------------------------------
       
   581 // COMASUPLProtocolManager1::TerminateSession
       
   582 // Terminate the session specified by the parameter
       
   583 // 
       
   584 // -----------------------------------------------------------------------------
       
   585 //
       
   586 void COMASUPLProtocolManager1::TerminateSession(CSuplSessionBase *aSession, TInt aError)
       
   587 	{
       
   588 	// Check if the Session is valid
       
   589 	TInt index = iSuplSessions.Find(aSession);
       
   590 	
       
   591 	if(KErrNotFound == index)
       
   592 		{
       
   593 		return;
       
   594 		}
       
   595 	
       
   596 	COMASuplSession *omaSuplSession = static_cast <COMASuplSession *> (aSession);
       
   597 			
       
   598 	// Check the type of Session
       
   599 	if(omaSuplSession->RequestType() == COMASuplSession::ESUPL_TERMINAL)
       
   600 		{
       
   601 		// For Terminal initiated session, do not delete the session
       
   602 		omaSuplSession->SessionEnd();
       
   603 		
       
   604 		// Complete the client request
       
   605 		omaSuplSession->CompleteSession(aError);
       
   606 		}
       
   607 	else
       
   608 		{
       
   609 		// For Network Initiated session and invalid session, delete the session
       
   610 		omaSuplSession->SessionEnd();
       
   611 		// Complete the client request
       
   612 		omaSuplSession->CompleteSession(aError);
       
   613 		DestroySession(omaSuplSession);
       
   614 		}
       
   615 	}
       
   616 	
       
   617 // -----------------------------------------------------------------------------
       
   618 // COMASUPLProtocolManager1::HandleOMASuplPacketsL
       
   619 // Handles Supl packets ,  received from SLP
       
   620 // 
       
   621 // -----------------------------------------------------------------------------
       
   622 //
       
   623 void COMASUPLProtocolManager1::HandleOMASuplPacketsL(const TDesC8& aPacket, TUint aPortNum)
       
   624 	{
       
   625 	RBuf8 Packet;
       
   626 	TBool isDecodingRequired = ETrue;
       
   627 	TInt errorCode = KErrNone;
       
   628 	TInt unConsumedBytes = aPacket.Length();
       
   629  	TBuf<64> msg(_L("Length of Received message is  : "));
       
   630 	msg.AppendNum(unConsumedBytes);
       
   631 	iTrace->Trace(msg, KTraceFileName, __LINE__); 
       
   632 	COMASuplAsnMessageBase* decodedAsn = NULL;
       
   633 	CleanupClosePushL(Packet);
       
   634 	
       
   635 	iTimer->StopTimer();	 
       
   636 				
       
   637 	if(iIsPreviouslyDecodingFailed) //Previous decoding Failed...
       
   638 		{
       
   639 		User::LeaveIfError(iQueuedPacket.ReAlloc(unConsumedBytes + iQueuedPacket.Length()));
       
   640 		iQueuedPacket.Append(aPacket);
       
   641 		if( iQueuedPacket.Length() >= iPreviousMessageLength ) // Message length is enough to decode
       
   642 			{
       
   643 			isDecodingRequired = ETrue;
       
   644 			User::LeaveIfError(Packet.ReAlloc(iQueuedPacket.Length()));
       
   645 			Packet.Append(iQueuedPacket);
       
   646 			unConsumedBytes  =  iQueuedPacket.Length(); 
       
   647 			
       
   648 			msg.Copy(_L("Length of Combined buffer is  : "));
       
   649 			msg.AppendNum(unConsumedBytes);
       
   650 			iTrace->Trace(msg, KTraceFileName, __LINE__); 
       
   651 			}
       
   652 		else
       
   653 			{
       
   654 			isDecodingRequired = EFalse;
       
   655 			}	
       
   656 		}
       
   657 	else
       
   658 		{
       
   659 		User::LeaveIfError(Packet.ReAlloc(unConsumedBytes));
       
   660 		Packet.Append(aPacket);
       
   661 		}	
       
   662 		
       
   663 	while(unConsumedBytes != 0 && errorCode == KErrNone && isDecodingRequired)		
       
   664 		{
       
   665 		msg.Copy(_L("Unconsumed bytes are : "));
       
   666 		msg.AppendNum(unConsumedBytes);
       
   667 		iTrace->Trace(msg, KTraceFileName, __LINE__); 
       
   668 								
       
   669 		TRAPD(trapErr,decodedAsn = iOMASuplAsnHandlerBaseImpl->DecodeL(Packet.Right(unConsumedBytes),errorCode,unConsumedBytes));						
       
   670 		LogPacket(aPacket,decodedAsn);
       
   671 		
       
   672 		if(trapErr!= KErrNone ) //Decoding leaved...clear everything.
       
   673 			{
       
   674 			TBuf<64> msg(_L("COMASuplAsnDecoder::DecodeL() Leaved with error code : "));
       
   675 			msg.AppendNum(trapErr);
       
   676 			iTrace->Trace(msg, KTraceFileName, __LINE__); 
       
   677 			ResetBufferingParameters();
       
   678 			CleanupStack::PopAndDestroy();	//Packet
       
   679 			return;
       
   680 			}
       
   681 		
       
   682 		if(!decodedAsn) 
       
   683 			{
       
   684 			CleanupStack::PopAndDestroy();	//Packet
       
   685 			return;
       
   686 			}
       
   687 			
       
   688 		if(errorCode == KErrOMASuplDecodeSessionFailed) //Decoding failed...drop packet
       
   689 			{
       
   690 			ResetBufferingParameters();
       
   691 			delete decodedAsn;
       
   692 			CleanupStack::PopAndDestroy();	//Packet
       
   693 			iTrace->Trace(_L("Decoding failed..."), KTraceFileName, __LINE__);
       
   694 			return;			
       
   695 			}
       
   696 			
       
   697 		iPreviousMessageLength = decodedAsn->MessageLength();
       
   698 		msg.Copy(_L("Message Length of Received SUPL message is  : "));
       
   699 		msg.AppendNum(iPreviousMessageLength );
       
   700 		iTrace->Trace(msg, KTraceFileName, __LINE__); 
       
   701 	  
       
   702 		if(iPreviousMessageLength <= 0) //Could not found message length...
       
   703 			{
       
   704 			ResetBufferingParameters();
       
   705 			delete decodedAsn;
       
   706 			CleanupStack::PopAndDestroy();	//Packet
       
   707 			iTrace->Trace(_L("Negative/Zero message length..."), KTraceFileName, __LINE__);
       
   708 			return;			
       
   709 			}
       
   710 	  
       
   711 		CleanupStack::PushL(decodedAsn); 
       
   712 		COMASuplSessionID* retrivedSessionID = NULL;
       
   713 		decodedAsn->SessionId(retrivedSessionID);
       
   714 		LogReceivedSessionIdL(retrivedSessionID);
       
   715 		TBool isInvalidSLPID;
       
   716 		TBool isInvalidSETID;
       
   717 		COMASuplSession* suplSession = FindSession(retrivedSessionID,isInvalidSLPID, isInvalidSETID); 
       
   718 		if((isInvalidSETID && suplSession) || (isInvalidSLPID && suplSession))
       
   719 			{
       
   720 
       
   721 			iTrace->Trace(_L("Running invalid session"), KTraceFileName, __LINE__); 
       
   722 			suplSession->RunInvalidSessionL(decodedAsn);
       
   723 			ResetBufferingParameters();
       
   724 			CleanupStack::PopAndDestroy(decodedAsn); // decodedAsn
       
   725 			CleanupStack::PopAndDestroy();	//Packet
       
   726 			return;
       
   727 			}
       
   728 			
       
   729 		if(errorCode == KErrOMASuplShortFrame )	// Newly added code for Short Frame...			
       
   730 			{
       
   731 			if(suplSession)
       
   732 				{
       
   733 				if(suplSession->CheckProtocolVersionL(decodedAsn)) //Check for version & will send SUPL_END if mismatch
       
   734 					{
       
   735 					msg.Copy(_L("ASN returned Short Frame error."));
       
   736 					iTrace->Trace(msg, KTraceFileName, __LINE__); 
       
   737 					User::LeaveIfError(iQueuedPacket.ReAlloc(iQueuedPacket.Length() +  aPacket.Length()));
       
   738 					iQueuedPacket.Append(aPacket);
       
   739 					iIsPreviouslyDecodingFailed = ETrue;
       
   740 					iTimer->StartTimer(KQueuedBufferTimeout * KSecond); 	
       
   741 					}
       
   742 				else
       
   743 					{
       
   744 					ResetBufferingParameters(); //After sending SUPL_END ....clearing all variables needed for TCP Buffering.
       
   745 					}
       
   746 					
       
   747 				CleanupStack::PopAndDestroy(decodedAsn); // decodedAsn
       
   748 				CleanupStack::PopAndDestroy();	//Packet
       
   749 				return;
       
   750 				}
       
   751 			}
       
   752 								
       
   753 		if(suplSession) //Session Found
       
   754 			{
       
   755 			if(errorCode == KErrOMASuplMessageLengthMismatch) //Added after Confirmance test cases (invalid message) 
       
   756 				{
       
   757 				iTrace->Trace(_L("Received Message with wrong message length..."), KTraceFileName, __LINE__); 
       
   758 				ResetBufferingParameters();
       
   759 				suplSession->HandleInvalidMessageLengthL();
       
   760 				}
       
   761 			if(errorCode == KErrOMASuplInvalidMessage)	//Checks for invalid message
       
   762 				{
       
   763 				iTrace->Trace(_L("Received Invalid Message..."), KTraceFileName, __LINE__); 
       
   764 				ResetBufferingParameters();
       
   765 				suplSession->HandleInvalidMessageL(decodedAsn);
       
   766 				}
       
   767 				
       
   768 			if(errorCode == KErrNone)	//Successful decoding of message
       
   769 				{
       
   770 				ResetBufferingParameters();
       
   771 				iTrace->Trace(_L("Message decoded successfully...passing to appropriate session..."), KTraceFileName, __LINE__);
       
   772 				suplSession->HandleOMASuplMessageL(decodedAsn);
       
   773 				}
       
   774 				
       
   775 			if(errorCode == KErrCompletion)	//Only session id retrived from message,Send error code
       
   776 				{
       
   777 				iTrace->Trace(_L("Retrived sessionid.Decoding failed.Handling Invalid Parameter."), KTraceFileName, __LINE__); 
       
   778 				suplSession->HandleInvalidParameterErrorL(decodedAsn);
       
   779 				unConsumedBytes = 0; //Drop packet									
       
   780 				}	
       
   781 			}
       
   782 		else  //Session Not Found....Sending SUPL_END with invalidsession
       
   783 			{
       
   784                                 //Check if session can be found based on port number
       
   785                                 suplSession = FindSessionOnPortNum(aPortNum);
       
   786 
       
   787                                 if (suplSession)
       
   788                                     {                                        
       
   789 						            iTrace->Trace(_L("Running invalid session"), KTraceFileName, __LINE__); 
       
   790 						            suplSession->RunInvalidSessionL(decodedAsn);
       
   791 						            ResetBufferingParameters();
       
   792 						            CleanupStack::PopAndDestroy(decodedAsn); // decodedAsn
       
   793 						            CleanupStack::PopAndDestroy();	//Packet
       
   794 						            return;
       
   795                                     }
       
   796                                 else                                        
       
   797                                     {                                        
       
   798 								    ResetBufferingParameters();
       
   799 								    iTrace->Trace(_L("Received Invalid Session."), KTraceFileName, __LINE__); 
       
   800 								    ProcessInvalidSessionL(decodedAsn); 
       
   801 								    unConsumedBytes = 0; //Drop packet									
       
   802                                     }
       
   803 					}
       
   804 					
       
   805 				CleanupStack::PopAndDestroy(decodedAsn);
       
   806 			}
       
   807 		
       
   808 		CleanupStack::PopAndDestroy();	//Packet
       
   809 	}
       
   810 	
       
   811 // -----------------------------------------------------------------------------
       
   812 // COMASUPLProtocolManager1::FindSession
       
   813 // Finds perticuler session from session array.
       
   814 // 
       
   815 // -----------------------------------------------------------------------------
       
   816 //
       
   817 COMASuplSession* COMASUPLProtocolManager1::FindSession(COMASuplSessionID* aRetrivedSessionID,TBool& aInvalidSLPId, TBool& aInvalidSETId) const
       
   818 	{	
       
   819 	/* 	
       
   820 	Algorithm for matching session ID 
       
   821 	For each session we are going to follow, following preocedure...
       
   822 	if  session in array haves SET id then we are going to compare SET id  and at the same time if  SLP id 
       
   823 	also present in session then we will also compare SLP id.
       
   824 	If both matches then we are going to return session id.
       
   825 	& if SLP Id does not matches then comparasion will be done for next session.
       
   826 	If SLP id does not present in session id, in this case we will compare only SET id.
       
   827 	*/
       
   828 
       
   829 	aInvalidSLPId = EFalse;
       
   830 	aInvalidSETId = EFalse;
       
   831 	COMASuplSession* OMAsuplSession = NULL;
       
   832 	COMASuplSessionID*  suplSessionID  = NULL;
       
   833 	
       
   834 	TInt TotalSession = iSuplSessions.Count();
       
   835 	 
       
   836 	COMASuplSETSessionID* retrivedSuplSETID = GetSETSessionID(aRetrivedSessionID);
       
   837 	COMASuplSLPSessionID* retrivedSuplSLPID = GetSLPSessionID(aRetrivedSessionID);
       
   838 	iTrace->Trace(_L("COMASUPLProtocolManager1::FindSession Searching in availble Sessions...  "), KTraceFileName, __LINE__);
       
   839 	for(TInt cnt = 0; cnt < TotalSession; ++cnt)
       
   840 		{
       
   841 		OMAsuplSession = static_cast<COMASuplSession*>(iSuplSessions[cnt]);
       
   842 		suplSessionID = OMAsuplSession->SuplSessionID();
       
   843 		COMASuplSETSessionID* suplSETID = GetSETSessionID(suplSessionID);
       
   844 		LogAvailableSessions(suplSETID,GetSLPSessionID(suplSessionID),cnt);
       
   845 		
       
   846 		if(suplSETID)
       
   847 			{
       
   848             iTrace->Trace(_L("FindSession, SET ID Present ...  "), KTraceFileName, __LINE__);
       
   849 			if(CompareSETSessionID(suplSETID, retrivedSuplSETID))  
       
   850 				{
       
   851 				COMASuplSLPSessionID* suplSLPID = GetSLPSessionID(suplSessionID);
       
   852 					if(suplSLPID)
       
   853 						{
       
   854 						if(CompareSLPSessionID(suplSLPID, retrivedSuplSLPID))  											
       
   855 							{
       
   856 							iTrace->Trace(_L("COMASUPLProtocolManager1::FindSession Searching Done...Session Found"), KTraceFileName, __LINE__);		
       
   857 							return OMAsuplSession;
       
   858 							}
       
   859 						else
       
   860 							{
       
   861 							aInvalidSLPId = ETrue;//means we have received message with incorrect SLP session id.
       
   862 							//continue; changed after Confirmance test....
       
   863 							return OMAsuplSession;
       
   864 							}	
       
   865 						}
       
   866 						
       
   867 				iTrace->Trace(_L("COMASUPLProtocolManager1::FindSession Searching Done...Session Found"), KTraceFileName, __LINE__);				
       
   868 				return OMAsuplSession;																						
       
   869 				}
       
   870             else 
       
   871                 {
       
   872                 iTrace->Trace(_L("FindSession, SET ID comp failed ...  "), KTraceFileName, __LINE__);
       
   873 				COMASuplSLPSessionID* suplSLPID = GetSLPSessionID(suplSessionID);
       
   874 				if(suplSLPID)
       
   875 				    {
       
   876                     iTrace->Trace(_L("FindSession, SLP ID present...  "), KTraceFileName, __LINE__);
       
   877                     if (CompareSLPSessionID(suplSLPID, retrivedSuplSLPID))
       
   878                         {                                    
       
   879                         iTrace->Trace(_L("FindSession, SLP ID comp succeeded...  "), KTraceFileName, __LINE__);
       
   880 				        aInvalidSETId = ETrue;//means we have received message with incorrect SET session id.
       
   881 				                      //continue; changed after Confirmance test....
       
   882 				        return OMAsuplSession;
       
   883                         }                                
       
   884                     }                                
       
   885 				}
       
   886 			}
       
   887 		}
       
   888 		
       
   889 	iTrace->Trace(_L("COMASUPLProtocolManager1::FindSession Searching Done...Session Not Found."), KTraceFileName, __LINE__);		
       
   890 	return NULL;
       
   891 	}
       
   892 
       
   893 // -----------------------------------------------------------------------------
       
   894 // COMASUPLProtocolManager::FindSessionOnPortNum
       
   895 // Finds perticuler session from session array.
       
   896 // 
       
   897 // -----------------------------------------------------------------------------
       
   898 //
       
   899 COMASuplSession* COMASUPLProtocolManager1::FindSessionOnPortNum(TUint aPortNum) const
       
   900 	{
       
   901 		iTrace->Trace(_L("COMASUPLProtocolManager1::FindSessionOnPortNum start"), KTraceFileName, __LINE__);		
       
   902 
       
   903         COMASuplSession* OMAsuplSession = NULL;
       
   904 		TInt TotalSession = iSuplSessions.Count();
       
   905         TUint portNum=0;
       
   906 		 
       
   907 		iTrace->Trace(_L("COMASUPLProtocolManager1::FindSessionOnPortNum Searching in availble Sessions"), KTraceFileName, __LINE__);
       
   908 		for(TInt cnt = 0; cnt < TotalSession; ++cnt)
       
   909 			{
       
   910 				OMAsuplSession = static_cast<COMASuplSession*>(iSuplSessions[cnt]);
       
   911 				portNum = OMAsuplSession->GetPortNumUsed();
       
   912                 if (portNum != 0 && portNum == aPortNum)
       
   913                     {                 
       
   914                     iTrace->Trace(_L("COMASUPLProtocolManager1::FindSessionOnPortNum Searching Done...Session Found"), KTraceFileName, __LINE__);		
       
   915 					return OMAsuplSession;
       
   916                     }
       
   917 			}
       
   918 			
       
   919 		iTrace->Trace(_L("COMASUPLProtocolManager1::FindSessionOnPortNum Searching Done...Session Not Found."), KTraceFileName, __LINE__);		
       
   920 		return NULL;
       
   921 	}
       
   922 // -----------------------------------------------------------------------------
       
   923 // COMASUPLProtocolManager::GetSETSession
       
   924 // Retrives COMASuplSETSessionID from COMASuplSessionID.
       
   925 // 
       
   926 // -----------------------------------------------------------------------------
       
   927 //
       
   928 COMASuplSETSessionID* COMASUPLProtocolManager1::GetSETSessionID(COMASuplSessionID* 
       
   929 																aOMAsuplSessionID) const
       
   930 	{
       
   931 	if(aOMAsuplSessionID)
       
   932 		{
       
   933 		COMASuplSETSessionID* suplSETID = NULL;
       
   934 		aOMAsuplSessionID->SETSessionID(suplSETID);
       
   935 		return suplSETID;
       
   936 		}
       
   937 	else
       
   938 		return NULL;	
       
   939 	}
       
   940 	
       
   941 // -----------------------------------------------------------------------------
       
   942 // COMASUPLProtocolManager1::GetSLPSession
       
   943 // Retrives COMASuplSLPSessionID from COMASuplSessionID.
       
   944 // 
       
   945 // -----------------------------------------------------------------------------
       
   946 //
       
   947 COMASuplSLPSessionID* COMASUPLProtocolManager1::GetSLPSessionID(COMASuplSessionID* 
       
   948 																aOMAsuplSessionID) const
       
   949 	{
       
   950 	if(aOMAsuplSessionID)
       
   951 		{
       
   952 		COMASuplSLPSessionID* suplSLPID = NULL;
       
   953 		aOMAsuplSessionID->SLPSessionID(suplSLPID);
       
   954 		return suplSLPID;
       
   955 		}
       
   956 	else
       
   957 		return NULL;	
       
   958 	}
       
   959 	
       
   960 // -----------------------------------------------------------------------------
       
   961 // COMASUPLProtocolManager1::CompareSETSessionID
       
   962 // Compares two SET session IDs
       
   963 // 
       
   964 // -----------------------------------------------------------------------------
       
   965 //
       
   966 TBool COMASUPLProtocolManager1::CompareSETSessionID(COMASuplSETSessionID* aSuplSETID,
       
   967 												COMASuplSETSessionID* aRetrivedSuplSETID) const
       
   968 	{	
       
   969 	if ( aRetrivedSuplSETID && aSuplSETID)
       
   970 		return *aRetrivedSuplSETID == *aSuplSETID;
       
   971 	else
       
   972 		return EFalse;
       
   973 	}
       
   974 	 
       
   975 // -----------------------------------------------------------------------------
       
   976 // COMASUPLProtocolManager1::CompareSLPSessionID
       
   977 // Compares two SLP session IDs
       
   978 // 
       
   979 // -----------------------------------------------------------------------------
       
   980 //
       
   981 TBool COMASUPLProtocolManager1::CompareSLPSessionID(COMASuplSLPSessionID* aSuplSLPID,
       
   982 												COMASuplSLPSessionID* aRetrivedSuplSLPID) const
       
   983 	{
       
   984 	if ( aRetrivedSuplSLPID && aSuplSLPID)
       
   985 		return *aRetrivedSuplSLPID == *aSuplSLPID;
       
   986 	else
       
   987 		return EFalse;
       
   988 	}
       
   989 
       
   990 // -----------------------------------------------------------------------------
       
   991 // COMASUPLProtocolManager1::ProcessInvalidSessionL
       
   992 // Processes invalid session .. creates new session & sends SUPL_END
       
   993 // 
       
   994 // -----------------------------------------------------------------------------
       
   995 //
       
   996 void COMASUPLProtocolManager1::ProcessInvalidSessionL(COMASuplAsnMessageBase* aDecodedMsg)
       
   997 	{
       
   998 	// 1. Create a new session for handling the invalid session case
       
   999 	CSuplSessionBase* suplSession = NULL;
       
  1000 			
       
  1001 	TRAPD(err, suplSession = CreateNewSessionL(COMASuplSession::ESUPL_INVALID_SESSION, 0, RSuplTerminalSubSession::ESUPL_1_0))
       
  1002 	
       
  1003 	COMASuplSession* invalidSession = static_cast<COMASuplSession*>(suplSession);
       
  1004 	
       
  1005 	if(KErrNone == err)
       
  1006 		{
       
  1007 		invalidSession->RunInvalidSessionL(aDecodedMsg);
       
  1008 		}
       
  1009 	}
       
  1010 	
       
  1011 
       
  1012 
       
  1013 // -----------------------------------------------------------------------------
       
  1014 // COMASUPLProtocolManager1::CancelRunSession
       
  1015 // Cancels run session operation if its going on.
       
  1016 // 
       
  1017 // -----------------------------------------------------------------------------
       
  1018 //
       
  1019 EXPORT_C void COMASUPLProtocolManager1::CancelRunSession(CSuplSessionBase* aSuplSession)
       
  1020 	{
       
  1021 	// Log
       
  1022 	iTrace->Trace(_L("COMASUPLProtocolManager1::CancelRunSession"), KTraceFileName, __LINE__);
       
  1023 		
       
  1024 	// Check if the Session is valid
       
  1025 	TInt index = iSuplSessions.Find(aSuplSession);
       
  1026 
       
  1027 	if(KErrNotFound == index)
       
  1028 		{
       
  1029 		iTrace->Trace(_L("Cannot found Supl session."), KTraceFileName, __LINE__);
       
  1030 		return;
       
  1031 		}
       
  1032 		aSuplSession->CancelRunSession();	
       
  1033 		return ;
       
  1034 	}
       
  1035 
       
  1036 
       
  1037 // -----------------------------------------------------------------------------
       
  1038 // COMASUPLProtocolManager1::HandleSuplMessageL
       
  1039 // Informs to client about Initilization of POS ,thro' active object
       
  1040 // 
       
  1041 // -----------------------------------------------------------------------------
       
  1042 //	
       
  1043 EXPORT_C  void  COMASUPLProtocolManager1::HandleSuplMessageL(CSuplSessionBase *const aSuplSession,TRequestStatus& aStatus,HBufC8* aMessage)
       
  1044 	{
       
  1045 	iTrace->Trace(_L("COMASUPLProtocolManager1::HandleSuplMessageL"), KTraceFileName, __LINE__);
       
  1046 	TInt index = iSuplSessions.Find(aSuplSession);
       
  1047 	TRequestStatus* status =  &aStatus;
       
  1048 
       
  1049 	if(KErrNotFound == index)
       
  1050 		{
       
  1051 		iTrace->Trace(_L("Cannot found Supl session."), KTraceFileName, __LINE__);
       
  1052 		if(status)
       
  1053 			User::RequestComplete(status,KErrNotFound);
       
  1054 		return;
       
  1055 		}
       
  1056 	
       
  1057 	if(!aMessage)
       
  1058 		{
       
  1059 		iTrace->Trace(_L("Received packet is Empty."), KTraceFileName, __LINE__);
       
  1060 		if(status)
       
  1061 			User::RequestComplete(status,KErrBadDescriptor);
       
  1062 		return;
       
  1063 		}
       
  1064 
       
  1065 #ifdef PRINT_MESSAGE
       
  1066     RFile file;
       
  1067 	RFs   fs;
       
  1068 	TInt cErr=fs.Connect();
       
  1069 	TInt fErr = file.Open(fs,_L("c:\\logs\\epos\\packet.txt"),EFileWrite|EFileShareAny);
       
  1070 	if (fErr == KErrNotFound || fErr == KErrPathNotFound)
       
  1071 		{                             
       
  1072 		TBool ret = BaflUtils::FolderExists(fs,_L("c:\\logs\\epos\\"));
       
  1073 		if(!ret)
       
  1074 			{
       
  1075 			fs.MkDirAll(_L("c:\\logs\\epos\\"));
       
  1076 			}
       
  1077 		file.Create(fs, _L("c:\\logs\\epos\\packet.txt"), EFileWrite|EFileShareAny);
       
  1078 		fErr = file.Open(fs,_L("c:\\logs\\epos\\packet.txt"),EFileWrite|EFileShareAny);
       
  1079 		}
       
  1080 
       
  1081     _LIT8(KMsgType, "SUPL INIT");
       
  1082     file.Write(KMsgType);
       
  1083     file.Write(_L8("\r \n"));
       
  1084 	file.Write(*aMessage);
       
  1085     file.Write(_L8("\r \n"));
       
  1086 	file.Close();
       
  1087 	fs.Close();
       
  1088 #endif
       
  1089 
       
  1090 	TInt unConsumedBytes = aMessage->Length();
       
  1091 	COMASuplAsnMessageBase* decodedAsn = NULL;
       
  1092 	TInt errorCode;
       
  1093 							
       
  1094 	TRAP_IGNORE(decodedAsn = iOMASuplAsnHandlerBaseImpl->DecodeL(aMessage->Right(unConsumedBytes),errorCode,unConsumedBytes));						
       
  1095 	
       
  1096 	if(errorCode == KErrOMASuplDecodeSessionFailed || errorCode == KErrCompletion) //Decoding failed...drop packet
       
  1097 		{
       
  1098 		delete decodedAsn;
       
  1099 		iTrace->Trace(_L("COMASUPLProtocolManager1::HandleSuplMessageL::Decoding failed..."), KTraceFileName, __LINE__);
       
  1100 		if(status)
       
  1101 			User::RequestComplete(status,KErrGeneral);
       
  1102 		return;			
       
  1103 		}
       
  1104 
       
  1105 	if(errorCode == KErrNone 	|| errorCode == KErrOMASuplOutOfRangeParameter 
       
  1106 								|| errorCode == KErrOMASuplMessageLengthMismatch
       
  1107 								|| errorCode == KErrOMASuplShortFrame)		
       
  1108 							 	// Successful decoding of message
       
  1109 							 	// KErrOMASuplOutOfRangeParameter added this for supporting 
       
  1110 		 	 					// handling of out of range parameters.
       
  1111 		{
       
  1112 		if(!decodedAsn)
       
  1113 			{
       
  1114 			if(status)
       
  1115 				User::RequestComplete(status,KErrGeneral);
       
  1116 				return;			
       
  1117 			} 
       
  1118 	
       
  1119 		COMASuplAsnMessageBase::TSuplMessageType messageType = decodedAsn->MessageType();
       
  1120 		if(messageType == COMASuplAsnMessageBase::ESUPL_END )
       
  1121 			{
       
  1122 			delete decodedAsn;
       
  1123 			iTrace->Trace(_L("Received SUPL_END thro' Netinitiated Lib...."), KTraceFileName, __LINE__);
       
  1124 			if(status)
       
  1125 				User::RequestComplete(status,KErrGeneral);
       
  1126 			return;			
       
  1127 			}
       
  1128 			
       
  1129 		CleanupStack::PushL(decodedAsn); 
       
  1130 		COMASuplSession* suplSession = static_cast<COMASuplSession*>(aSuplSession);
       
  1131 		if(suplSession)
       
  1132 			{
       
  1133 			CheckForSessionCount();
       
  1134 			iRunningSessionCount++;
       
  1135 			suplSession->SetEncodedSuplInitL(aMessage);
       
  1136 			suplSession->SetConfigurationParameters(iUT1_StartTimer,iUT2_PosInitTimer, iUT3_PosTimer,iPrivacyTimer,iSETMode,
       
  1137 	                        iSuplUsage, iPersistFailTimer,iSuplInitTimeOut);
       
  1138 			suplSession->HandleOMASuplMessageL(decodedAsn,aStatus,iRunningSessionCount,errorCode);
       
  1139 			}
       
  1140 		CleanupStack::PopAndDestroy(decodedAsn);
       
  1141 		}
       
  1142 	else
       
  1143 		{
       
  1144 		delete decodedAsn;
       
  1145 		iTrace->Trace(_L("COMASUPLProtocolManager1::HandleSuplMessageL::Error occured after decoding..."), KTraceFileName, __LINE__);
       
  1146 		if(status)
       
  1147 			User::RequestComplete(status,KErrGeneral);
       
  1148 		}
       
  1149 	}
       
  1150 
       
  1151 // -----------------------------------------------------------------------------
       
  1152 // COMASUPLProtocolManager1::PlugInUninstalled
       
  1153 // Handles Pos handler unload event
       
  1154 // -----------------------------------------------------------------------------
       
  1155 void COMASUPLProtocolManager1::PlugInUninstalled() // change here --- Subhra
       
  1156 	{
       
  1157 	iTrace->Trace(_L("COMASUPLProtocolManager1::PlugInUninstalled"), KTraceFileName, __LINE__);
       
  1158 	
       
  1159 	TInt suplSessionCount = iSuplSessions.Count();
       
  1160 	
       
  1161 	for(TInt loop = 0; loop < suplSessionCount;loop++)
       
  1162 		{
       
  1163 		iTrace->Trace(_L("COMASUPLProtocolManager1::PlugInUninstalled Session retrieved"), KTraceFileName, __LINE__);		
       
  1164 		
       
  1165 		COMASuplSession* suplSession = REINTERPRET_CAST(COMASuplSession*, iSuplSessions[loop]);
       
  1166 		suplSession->PosPlugInUnloaded();
       
  1167 		}
       
  1168 		
       
  1169 	iTrace->Trace(_L("COMASUPLProtocolManager1::PlugInUninstalled PosH removed"), KTraceFileName, __LINE__);		
       
  1170 	}
       
  1171 	
       
  1172 // -----------------------------------------------------------------------------
       
  1173 // COMASUPLProtocolManager1::HandleSuplSettingsChangeL
       
  1174 // notifier for settings changes.
       
  1175 // -----------------------------------------------------------------------------
       
  1176 void COMASUPLProtocolManager1::HandleSuplSettingsChangeL(TSuplSettingsEventType aEvent,TInt /*aSlpId*/)
       
  1177 	{
       
  1178     if( aEvent == MSuplSettingsObserver::ESuplSettingsEventSuplUsageChange)
       
  1179         {
       
  1180         iTrace->Trace(_L("Setting Changed.SUPL Usage changed.. Reeading once again..."), KTraceFileName, __LINE__);
       
  1181         ReadSuplUsage();
       
  1182 		}
       
  1183 	else if( aEvent == MSuplSettingsObserver::ESuplSettingsEventCommParameterChange)
       
  1184 		{
       
  1185 		iTrace->Trace(_L("Setting Changed.Communication Parameters changed.. Reeading once again..."), KTraceFileName, __LINE__);
       
  1186 			
       
  1187 		}
       
  1188 	}
       
  1189 
       
  1190 
       
  1191 void COMASUPLProtocolManager1::LogPacket(const TDesC8& 
       
  1192 #if defined(PRINT_MESSAGE)
       
  1193 	aPacket
       
  1194 #endif
       
  1195 	,COMASuplAsnMessageBase* 
       
  1196 #if defined(PRINT_MESSAGE)
       
  1197 	decodedAsn
       
  1198 #endif
       
  1199 	)
       
  1200 	{
       
  1201 	
       
  1202 #ifdef PRINT_MESSAGE
       
  1203 	RFileLogger  iLogger;
       
  1204 	
       
  1205 	TInt err = iLogger.Connect();
       
  1206 		if(err != KErrNone) 
       
  1207 			return;
       
  1208 		
       
  1209 	const TText* hdr1 = _S("Header");
       
  1210 	const TText* mrg1 = _S("End");
       
  1211     if(decodedAsn)	
       
  1212 		{
       
  1213         COMASuplAsnMessageBase::TSuplMessageType messageType = decodedAsn->MessageType();
       
  1214 
       
  1215     	switch(messageType)
       
  1216 	        {
       
  1217 	        case COMASuplAsnMessageBase::ESUPL_RESPONSE:
       
  1218 		        {
       
  1219 				_LIT(KMsgType1, "SUPL_RESPONSE.txt");
       
  1220 				iLogger.CreateLog(_L("epos"),KMsgType1,EFileLoggingModeAppend);
       
  1221 				iLogger.HexDump(hdr1, mrg1, aPacket.Ptr(), aPacket.Length() );
       
  1222 				break;
       
  1223 				}	
       
  1224 			case COMASuplAsnMessageBase::ESUPL_POS:
       
  1225 				{
       
  1226 				_LIT(KMsgType2, "SUPL_POS.txt");
       
  1227 				iLogger.CreateLog(_L("epos"),KMsgType2,EFileLoggingModeAppend);
       
  1228 				iLogger.HexDump(hdr1, mrg1, aPacket.Ptr(), aPacket.Length() );
       
  1229 				break;
       
  1230 				}      
       
  1231 			case COMASuplAsnMessageBase::ESUPL_END:
       
  1232 				{
       
  1233 				_LIT(KMsgType3, "SUPL_END.txt");
       
  1234 				iLogger.CreateLog(_L("epos"),KMsgType3,EFileLoggingModeAppend);
       
  1235 				iLogger.HexDump(hdr1, mrg1, aPacket.Ptr(), aPacket.Length() );
       
  1236 				break;
       
  1237 				}          
       
  1238 			case COMASuplAsnMessageBase::ESUPL_AUTH_RESP:
       
  1239 				{
       
  1240 				_LIT(KMsgType4, "SUPL_AUTH_RESPONSE.txt");
       
  1241 				iLogger.CreateLog(_L("epos"),KMsgType4,EFileLoggingModeAppend);
       
  1242 				iLogger.HexDump(hdr1, mrg1, aPacket.Ptr(), aPacket.Length() );
       
  1243 				break;
       
  1244 				}        
       
  1245 	        default:
       
  1246 		        break;	
       
  1247 	        }
       
  1248 		}
       
  1249 	else
       
  1250 		{
       
  1251 		_LIT(KMsgTypeUnknown, "Decode_Failed.txt");
       
  1252 		iLogger.CreateLog(_L("epos"),KMsgTypeUnknown,EFileLoggingModeAppend);
       
  1253 		iLogger.HexDump(hdr1, mrg1, aPacket.Ptr(), aPacket.Length() );
       
  1254 		}
       
  1255 	iLogger.Close();
       
  1256 #endif           
       
  1257 	}
       
  1258 	
       
  1259 // -----------------------------------------------------------------------------
       
  1260 // COMASUPLProtocolManager1::LogAvailableSessions
       
  1261 // Logs
       
  1262 // -----------------------------------------------------------------------------
       
  1263 void COMASUPLProtocolManager1::LogAvailableSessions( COMASuplSETSessionID* 
       
  1264 #if defined(PRINT_MESSAGE)
       
  1265 	aSuplSETID
       
  1266 #endif
       
  1267 	,COMASuplSLPSessionID* 
       
  1268 #if defined(PRINT_MESSAGE)
       
  1269 	aSuplSLPID
       
  1270 #endif
       
  1271 	,TInt 
       
  1272 #if defined(PRINT_MESSAGE)
       
  1273 	aCount
       
  1274 #endif
       
  1275 	) const
       
  1276 
       
  1277 	{
       
  1278 #ifdef PRINT_MESSAGE		//This is only for logging purpose.
       
  1279 	
       
  1280 	TBuf<128> msg(_L("Session Ids For Session No : "));
       
  1281 	msg.AppendNum(aCount);
       
  1282 	iTrace->Trace(msg,KTraceFileName, __LINE__); 
       
  1283 	
       
  1284 	if(!aSuplSETID) 
       
  1285 		{
       
  1286 	 	iTrace->Trace(_L("No SET Session ID present..."),KTraceFileName, __LINE__);
       
  1287 		}
       
  1288 	else
       
  1289 		{
       
  1290 	    msg.Copy(_L("Comparing with Session ID : "));
       
  1291 		TBuf<4> id;	
       
  1292 		TInt    SETSessionID;
       
  1293 		TBuf8<64> IPvAddress8;
       
  1294 		TBuf<64>  IPvAddress;
       
  1295 		
       
  1296 		aSuplSETID->SuplSETSessionID(SETSessionID,IPvAddress8);	
       
  1297 		COMASuplSETSessionID::TSuplSETIDType setIDType = aSuplSETID->SuplSETIDType();
       
  1298 		if(setIDType == COMASuplSETSessionID::EIMSI )
       
  1299 			{
       
  1300 			iTrace->Trace(_L("SET ID is of type IMSI"),KTraceFileName, __LINE__);
       
  1301 			iTrace->Trace(_L("IMSI Value :"),KTraceFileName, __LINE__);
       
  1302 			msg.Copy(IPvAddress8);
       
  1303 			}
       
  1304 		else
       
  1305 			{
       
  1306 		    TLex8 lex(IPvAddress8);
       
  1307 
       
  1308 		    TChar chr;	
       
  1309 		
       
  1310 		    chr = lex.Get();
       
  1311 		    TUint i = chr;
       
  1312 		    IPvAddress.AppendNum(i);
       
  1313 		    IPvAddress.Append(_L("."));
       
  1314 		
       
  1315 		    chr = lex.Get();
       
  1316 		    i = chr;
       
  1317 		    IPvAddress.AppendNum(i);
       
  1318 		    IPvAddress.Append(_L("."));
       
  1319 
       
  1320 		    chr = lex.Get();
       
  1321 		    i = chr;
       
  1322 		    IPvAddress.AppendNum(i);
       
  1323 		    IPvAddress.Append(_L("."));
       
  1324 
       
  1325 		    chr = lex.Get();
       
  1326 		    i = chr;
       
  1327 		    IPvAddress.AppendNum(i);
       
  1328 		
       
  1329 		    id.AppendNum(SETSessionID);
       
  1330 		    msg.Append(id);
       
  1331 		    msg.Append(_L("  IPAddress :"));
       
  1332 		    msg.Append(IPvAddress);
       
  1333 			}				
       
  1334 		}
       
  1335 #endif                          
       
  1336   
       
  1337 #ifdef PRINT_MESSAGE		//This is only for logging purpose.
       
  1338 	if(!aSuplSLPID) 
       
  1339 		{
       
  1340 		iTrace->Trace(_L("No SLP Session ID present..."),KTraceFileName, __LINE__);
       
  1341 		}
       
  1342 	else
       
  1343 		{
       
  1344 		TBuf8<4> sessionId8;
       
  1345 		TBuf<32> sessionId;
       
  1346 		TBuf8<64> ipAddress8(_L8("No Address field in SLP Session ID"));				
       
  1347 		TBuf<64> ipAddress;
       
  1348 
       
  1349 		COMASuplSLPAddress* slpIPAddress = NULL;
       
  1350 		aSuplSLPID->SuplSLPSessionID(sessionId8,slpIPAddress);
       
  1351 
       
  1352 		if(slpIPAddress)
       
  1353 		    {
       
  1354 		    COMASuplSLPAddress::TSuplSLPAddressType slpAddType = slpIPAddress->SLPAddressType();
       
  1355 		    if(slpAddType == COMASuplSLPAddress::EFqdn)
       
  1356 		        {
       
  1357 		        TBuf<128> msg(_L("Comparing with SLP Session ID : "));
       
  1358 		        HBufC8* fqdn = NULL;
       
  1359 		        slpIPAddress->Fqdn(fqdn);
       
  1360 		        TLex8 lex1(sessionId8);
       
  1361 		        TChar chr;	
       
  1362 		        for(TInt i = 0; i < 4; i++)	
       
  1363 		            {
       
  1364 		            chr = lex1.Get();
       
  1365 		            TUint num = chr;
       
  1366 		            sessionId.AppendNum(num);
       
  1367 		            }
       
  1368 		        msg.Append(sessionId);
       
  1369 		        iTrace->Trace(msg,KTraceFileName, __LINE__); 
       
  1370 		        iTrace->Trace(_L("SLP Address is FQDN"),KTraceFileName, __LINE__); 
       
  1371 		        iTrace->Trace(_L("FQDN Value"),KTraceFileName, __LINE__); 
       
  1372 		        if(fqdn)
       
  1373 		            {	
       
  1374 		            HBufC* fqdnBuffer = NULL; 
       
  1375 		            TInt err;
       
  1376 		            TRAP(err,fqdnBuffer = HBufC::NewL(fqdn->Length()));
       
  1377 		            err = 0;
       
  1378 		            fqdnBuffer->Des().Copy(fqdn->Des());
       
  1379 		            iTrace->Trace(fqdnBuffer->Des(),KTraceFileName, __LINE__);
       
  1380 		            delete fqdnBuffer;
       
  1381 		            fqdnBuffer = NULL; 
       
  1382 		            }
       
  1383 		        }
       
  1384 		    else
       
  1385 		        {
       
  1386 		        TBuf<128> msg(_L("Comparing with SLP Session ID : "));
       
  1387 		        TInt err = slpIPAddress->IPvAddress(ipAddress8);	
       
  1388 		        if(err != KErrNone)
       
  1389 		            {
       
  1390 	                msg.Copy(_L("SLP Address is not set."));
       
  1391 	                iTrace->Trace(msg,KTraceFileName, __LINE__);
       
  1392 		            }	
       
  1393 		        else
       
  1394 		            {                                                        
       
  1395 		            TLex8 lex(ipAddress8);
       
  1396 		            TChar chr;	
       
  1397 
       
  1398 		            chr = lex.Get();
       
  1399 		            TUint i = chr;
       
  1400 		            ipAddress.AppendNum(i);
       
  1401 		            ipAddress.Append(_L("."));
       
  1402 
       
  1403 		            chr = lex.Get();
       
  1404 		            i = chr;
       
  1405 		            ipAddress.AppendNum(i);
       
  1406 		            ipAddress.Append(_L("."));
       
  1407 
       
  1408 		            chr = lex.Get();
       
  1409 		            i = chr;
       
  1410 		            ipAddress.AppendNum(i);
       
  1411 		            ipAddress.Append(_L("."));
       
  1412 
       
  1413 		            chr = lex.Get();
       
  1414 		            i = chr;
       
  1415 		            ipAddress.AppendNum(i);
       
  1416 
       
  1417 		            TLex8 lex1(sessionId8);
       
  1418 		            for(TInt i = 0; i < 4; i++)	
       
  1419 		                {
       
  1420 		                chr = lex1.Get();
       
  1421 		                TUint num = chr;
       
  1422 		                sessionId.AppendNum(num);
       
  1423 		                }
       
  1424 		            msg.Append(sessionId);
       
  1425 		            msg.Append(_L("  IPAddress : "));
       
  1426 		            msg.Append(ipAddress);
       
  1427 		            iTrace->Trace(msg,KTraceFileName, __LINE__);
       
  1428 		            }							
       
  1429 		        }							
       
  1430 		    }
       
  1431 		}
       
  1432 #endif                   
       
  1433 	}
       
  1434 	
       
  1435 void COMASUPLProtocolManager1::LogReceivedSessionIdL(COMASuplSessionID* 
       
  1436 #if defined(PRINT_MESSAGE)
       
  1437 	aRetrivedSessionID
       
  1438 #endif
       
  1439 	)
       
  1440 	{
       
  1441 	
       
  1442 #ifdef PRINT_MESSAGE		//This is only for logging purpose.                 
       
  1443 	if(! aRetrivedSessionID) 
       
  1444 	return;
       
  1445 	
       
  1446 	TBuf<128> msg(_L("Received Session Id is..."));			
       
  1447 	iTrace->Trace(msg,KTraceFileName, __LINE__); 							
       
  1448 	
       
  1449     COMASuplSETSessionID* suplSETID = NULL;
       
  1450     aRetrivedSessionID->SETSessionID(suplSETID);
       
  1451 	
       
  1452 	COMASuplSLPSessionID* suplSLPID = NULL;
       
  1453 	aRetrivedSessionID->SLPSessionID(suplSLPID);
       
  1454 	
       
  1455 	//SET Part			
       
  1456 	if(suplSETID)
       
  1457 		{
       
  1458 		msg.Copy(_L("SET Session ID : "));
       
  1459 		TBuf<8> id;	
       
  1460 		TInt    SETSessionID;
       
  1461 		TBuf8<64> IPvAddress8;
       
  1462 		TBuf<64>  IPvAddress;
       
  1463 		
       
  1464 		suplSETID->SuplSETSessionID(SETSessionID,IPvAddress8);	
       
  1465 		COMASuplSETSessionID::TSuplSETIDType setIDType = suplSETID->SuplSETIDType();
       
  1466 		if(setIDType == COMASuplSETSessionID::EIMSI )
       
  1467 			{
       
  1468 			iTrace->Trace(_L("SET ID is of type IMSI"),KTraceFileName, __LINE__);
       
  1469 			iTrace->Trace(_L("IMSI Value :"),KTraceFileName, __LINE__);
       
  1470 			msg.Copy(IPvAddress8);
       
  1471 			}
       
  1472 		else
       
  1473 			{
       
  1474 			TLex8 lex(IPvAddress8);
       
  1475 		
       
  1476 			TChar chr;	
       
  1477 			
       
  1478 			chr = lex.Get();
       
  1479 			TUint i = chr;
       
  1480 			IPvAddress.AppendNum(i);
       
  1481 			IPvAddress.Append(_L("."));
       
  1482 			
       
  1483 			chr = lex.Get();
       
  1484 			i = chr;
       
  1485 			IPvAddress.AppendNum(i);
       
  1486 			IPvAddress.Append(_L("."));
       
  1487 
       
  1488 			chr = lex.Get();
       
  1489 			i = chr;
       
  1490 			IPvAddress.AppendNum(i);
       
  1491 			IPvAddress.Append(_L("."));
       
  1492 
       
  1493 			chr = lex.Get();
       
  1494 			i = chr;
       
  1495 			IPvAddress.AppendNum(i);
       
  1496 			
       
  1497 			id.AppendNum(SETSessionID);
       
  1498 			msg.Append(id);
       
  1499 			msg.Append(_L("  IPAddress :"));
       
  1500 			msg.Append(IPvAddress);
       
  1501 			}				
       
  1502 		}
       
  1503 	else
       
  1504 		{
       
  1505 		msg.Copy(_L("SET Session Id is not set."));
       
  1506 		}
       
  1507 					
       
  1508 	
       
  1509 	//SLP Part			
       
  1510 	if(suplSLPID)
       
  1511 		{
       
  1512 		msg.Copy(_L("SLP Session ID : "));
       
  1513 		TBuf8<4> sessionId8;
       
  1514 		TBuf<32> sessionId;
       
  1515 		TBuf8<64> ipAddress8(_L8("No Address field in SLP Session ID"));				
       
  1516 		TBuf<64> ipAddress;
       
  1517 
       
  1518 		COMASuplSLPAddress* slpIPAddress = NULL;
       
  1519 		suplSLPID->SuplSLPSessionID(sessionId8,slpIPAddress);
       
  1520 		
       
  1521 		if(slpIPAddress)
       
  1522 			{
       
  1523 			COMASuplSLPAddress::TSuplSLPAddressType slpAddType = slpIPAddress->SLPAddressType();
       
  1524 			if(slpAddType == COMASuplSLPAddress::EFqdn)
       
  1525 				{
       
  1526 				HBufC8* fqdn = NULL;
       
  1527 				slpIPAddress->Fqdn(fqdn);
       
  1528 				iTrace->Trace(_L("SLP Address is FQDN"),KTraceFileName, __LINE__); 
       
  1529 				iTrace->Trace(_L("FQDN Value"),KTraceFileName, __LINE__); 
       
  1530 				if(fqdn)
       
  1531 					{	
       
  1532 					HBufC* fqdnBuffer = NULL; 
       
  1533 					fqdnBuffer = HBufC::NewL(fqdn->Length());
       
  1534 					fqdnBuffer->Des().Copy(fqdn->Des());
       
  1535 					iTrace->Trace(fqdnBuffer->Des(),KTraceFileName, __LINE__);
       
  1536 					delete fqdnBuffer;
       
  1537 					fqdnBuffer = NULL; 
       
  1538 					}
       
  1539 				}
       
  1540 			else
       
  1541 				{
       
  1542 				TInt err = slpIPAddress->IPvAddress(ipAddress8);	
       
  1543 				if(err != KErrNone)
       
  1544 					{
       
  1545 					msg.Copy(_L("SLP Address is not set."));
       
  1546 					iTrace->Trace(msg,KTraceFileName, __LINE__); 								
       
  1547 					}	
       
  1548 				}							
       
  1549 			}
       
  1550 		
       
  1551 		TLex8 lex(ipAddress8);
       
  1552 		TChar chr;	
       
  1553 		
       
  1554 		chr = lex.Get();
       
  1555 		TUint i = chr;
       
  1556 		ipAddress.AppendNum(i);
       
  1557 		ipAddress.Append(_L("."));
       
  1558 		
       
  1559 		chr = lex.Get();
       
  1560 		i = chr;
       
  1561 		ipAddress.AppendNum(i);
       
  1562 		ipAddress.Append(_L("."));
       
  1563 
       
  1564 		chr = lex.Get();
       
  1565 		i = chr;
       
  1566 		ipAddress.AppendNum(i);
       
  1567 		ipAddress.Append(_L("."));
       
  1568 
       
  1569 		chr = lex.Get();
       
  1570 		i = chr;
       
  1571 		ipAddress.AppendNum(i);
       
  1572 		
       
  1573 		TLex8 lex1(sessionId8);
       
  1574 		for(TInt i = 0; i < 4; i++)	
       
  1575 			{
       
  1576 			chr = lex1.Get();
       
  1577 			TUint num = chr;
       
  1578 			sessionId.AppendNum(num);
       
  1579 			}
       
  1580 			
       
  1581 		msg.Append(sessionId);
       
  1582 		msg.Append(_L("  IPAddress : "));
       
  1583 		msg.Append(ipAddress);
       
  1584 		iTrace->Trace(msg,KTraceFileName, __LINE__); 								
       
  1585 		}
       
  1586 	else
       
  1587 		{
       
  1588 		msg.Copy(_L("SLP Session Id is not set."));
       
  1589 		iTrace->Trace(msg,KTraceFileName, __LINE__); 								
       
  1590 		}
       
  1591 #endif
       
  1592 	
       
  1593 	}
       
  1594 	
       
  1595 void  COMASUPLProtocolManager1::TimerExpiredL()
       
  1596 	{
       
  1597 	ResetBufferingParameters();
       
  1598 	}
       
  1599 	
       
  1600 void COMASUPLProtocolManager1::ResetBufferingParameters()
       
  1601 	{
       
  1602 	iQueuedPacket.Zero(); //Reset all parameters
       
  1603 	iPreviousMessageLength = 0 ; 
       
  1604 	iIsPreviouslyDecodingFailed = EFalse;
       
  1605 	}
       
  1606 	
       
  1607 	
       
  1608 // -----------------------------------------------------------------------------
       
  1609 // COMASUPLProtocolManager1::LaunchSettingsUI
       
  1610 // 
       
  1611 // 
       
  1612 // -----------------------------------------------------------------------------
       
  1613 //
       
  1614 TInt COMASUPLProtocolManager1::LaunchSettingsUI(MOMASuplUICompletionObserver* aObserver,const TDesC& aForHslp)
       
  1615     {        
       
  1616 	iTrace->Trace(_L("COMASUPLProtocolManager1::LaunchSettingsUI"), KTraceFileName, __LINE__);
       
  1617 
       
  1618     if(iUIRequestArray.Count() <= 0 )
       
  1619     	{
       
  1620 		iTrace->Trace(_L("COMASUPLProtocolManager1::LaunchSettingsUI"), KTraceFileName, __LINE__);
       
  1621 		iUIRequestArray.Append(aObserver);
       
  1622 		iSuplSettings->SetUIActive(ETrue);
       
  1623 		iCurrentlyUsedHslp.Copy(aForHslp);
       
  1624 		return iSettingsLauncher->LaunchSettings();	
       
  1625     	}
       
  1626     else if(iCurrentlyUsedHslp.Compare(aForHslp) == KErrNone)
       
  1627     	{
       
  1628 		iUIRequestArray.Append(aObserver);
       
  1629     	}
       
  1630     else
       
  1631     	{
       
  1632 		return KErrInUse;                
       
  1633     	}
       
  1634     		
       
  1635 	return KErrNone;
       
  1636     }
       
  1637 
       
  1638 // -----------------------------------------------------------------------------
       
  1639 // COMASUPLProtocolManager1::SettingsUICompletedL
       
  1640 // 
       
  1641 // 
       
  1642 // -----------------------------------------------------------------------------
       
  1643 //
       
  1644 void COMASUPLProtocolManager1::SettingsUICompletedL(TInt aError)
       
  1645 	{
       
  1646 	iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsUICompletedL"), KTraceFileName, __LINE__);
       
  1647     iSuplSettings->SetUIActive(EFalse);
       
  1648 
       
  1649     if (iDeInitDone)
       
  1650         {
       
  1651 	    iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsUICompletedL, de-init done.  Completing request"), KTraceFileName, __LINE__);
       
  1652         iDeInitDone = EFalse;
       
  1653         User::RequestComplete(iDeInitRequestStatus,KErrNone);
       
  1654         }                
       
  1655     else
       
  1656         {
       
  1657     	for(TInt i = 0; i < iUIRequestArray.Count(); i++)
       
  1658     		{
       
  1659     			iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsUICompletedL,Forwarding ConnRerquestor "), KTraceFileName, __LINE__);
       
  1660     			MOMASuplUICompletionObserver* observer = iUIRequestArray[i];
       
  1661     			observer->SettingsUICompletedL(aError);
       
  1662     		}
       
  1663 
       
  1664         }
       
  1665         
       
  1666     iCurrentlyUsedHslp.Copy(_L(""));	
       
  1667     iUIRequestArray.Reset();
       
  1668     }
       
  1669 
       
  1670 
       
  1671 // -----------------------------------------------------------------------------
       
  1672 // COMASUPLProtocolManager1::DeInitialize
       
  1673 // 
       
  1674 // 
       
  1675 // -----------------------------------------------------------------------------
       
  1676 //
       
  1677 void COMASUPLProtocolManager1::DeInitialize(TRequestStatus& aDeInitRequestStatus)
       
  1678     {
       
  1679 	iTrace->Trace(_L("COMASUPLProtocolManager1::DeInitialize"), KTraceFileName, __LINE__);
       
  1680 	iDeInitRequestStatus = & aDeInitRequestStatus;
       
  1681     *iDeInitRequestStatus = KRequestPending;
       
  1682     
       
  1683     // If settings UI is not active, complete the request immediately
       
  1684     if (!iSuplSettings->IsUIActive())
       
  1685         {                    
       
  1686 	    iTrace->Trace(_L("DeInitialize, UI is not active, Completing request"), KTraceFileName, __LINE__);
       
  1687         User::RequestComplete(iDeInitRequestStatus,KErrNone);
       
  1688         }
       
  1689     else
       
  1690         {            
       
  1691         iDeInitDone = ETrue;
       
  1692         }
       
  1693     }            
       
  1694 	
       
  1695 // -----------------------------------------------------------------------------
       
  1696 // COMASUPLProtocolManager1::CancelDeInitialize
       
  1697 // 
       
  1698 // 
       
  1699 // -----------------------------------------------------------------------------
       
  1700 //	
       
  1701 void COMASUPLProtocolManager1::CancelDeInitialize()
       
  1702     {
       
  1703 	iTrace->Trace(_L("COMASUPLProtocolManager1::CancelDeInitialize"), KTraceFileName, __LINE__);
       
  1704     iDeInitDone = EFalse;
       
  1705     if(iDeInitRequestStatus)
       
  1706     	User::RequestComplete(iDeInitRequestStatus,KErrCancel);
       
  1707     }
       
  1708     
       
  1709 // -----------------------------------------------------------------------------
       
  1710 // COMASUPLProtocolManager1::GetNetworkModeL
       
  1711 // Logs
       
  1712 // -----------------------------------------------------------------------------
       
  1713 TInt COMASUPLProtocolManager1::GetNetworkModeL()
       
  1714 	{
       
  1715 	TInt networkMode;
       
  1716 	// get network mode
       
  1717 	CRepository* centralRepository = CRepository::NewLC(KCRUidCoreApplicationUIs);
       
  1718 	User::LeaveIfError(centralRepository->Get(KCoreAppUIsNetworkConnectionAllowed, networkMode));
       
  1719     CleanupStack::PopAndDestroy(centralRepository);
       
  1720     return networkMode;
       
  1721 	}
       
  1722 
       
  1723 // -----------------------------------------------------------------------------
       
  1724 // COMASUPLProtocolManager1::LaunchSuplUsageSettingsUI
       
  1725 // 
       
  1726 // 
       
  1727 // -----------------------------------------------------------------------------
       
  1728 //
       
  1729 TInt COMASUPLProtocolManager1::LaunchSuplUsageSettingsUI(MOMASuplUICompletionObserver* aObserver, TBool aRoaming)	
       
  1730 	{
       
  1731 	iTrace->Trace(_L("COMASUPLProtocolManager1::LaunchSuplUsageSettingsUI"), KTraceFileName, __LINE__);
       
  1732     if (iSuplSettings->IsUIActive() && !iTimeOutDialogPresent)
       
  1733         return KErrInUse;                
       
  1734     // If timeout dialog is present, close it
       
  1735     if (iTimeOutDialogPresent)
       
  1736         {
       
  1737         iTimeOutDialogPresent = EFalse;
       
  1738         iSuplSettings->SetUIActive(EFalse);
       
  1739         iSettingsLauncher->Cancel();
       
  1740         }                
       
  1741     iSessnUIObserver = aObserver;            
       
  1742     iSuplSettings->SetUIActive(ETrue);
       
  1743     return iSettingsLauncher->LaunchSuplUsageSettingsUI(aRoaming);
       
  1744 	}
       
  1745 
       
  1746 // -----------------------------------------------------------------------------
       
  1747 // COMASUPLProtocolManager1::SettingsUsageUICompletedL
       
  1748 // 
       
  1749 // 
       
  1750 // -----------------------------------------------------------------------------
       
  1751 //
       
  1752 void COMASUPLProtocolManager1::SettingsUsageUICompletedL(TInt aError)
       
  1753 	{
       
  1754 	iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsUsageUICompletedL"), KTraceFileName, __LINE__);
       
  1755     iSuplSettings->SetUIActive(EFalse);
       
  1756 
       
  1757     if (iDeInitDone)
       
  1758         {
       
  1759 	    iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsUsageUICompletedL, de-init done.  Completing request"), KTraceFileName, __LINE__);
       
  1760         iDeInitDone = EFalse;
       
  1761         User::RequestComplete(iDeInitRequestStatus,KErrNone);
       
  1762         }                
       
  1763     else
       
  1764         {
       
  1765         if (iSessnUIObserver)                
       
  1766         	iSessnUIObserver->SettingsUsageUICompletedL(aError);
       
  1767         }
       
  1768 
       
  1769     CheckOutstandingUsageUIRequestsL();
       
  1770 	}
       
  1771 
       
  1772 // -----------------------------------------------------------------------------
       
  1773 // COMASUPLProtocolManager1::ReadSuplUsage
       
  1774 // Reads Supl Usage from Central Repository
       
  1775 // 
       
  1776 // -----------------------------------------------------------------------------
       
  1777 //
       
  1778 void COMASUPLProtocolManager1::ReadSuplUsage()
       
  1779 	{
       
  1780 	iTrace->Trace(_L("COMASUPLProtocolManager1::ReadSuplUsage start"), KTraceFileName, __LINE__);	
       
  1781 	CSuplSettings::TSuplSettingsUsage suplUsage;
       
  1782 	TInt err = iSuplStorageSettings->GetSuplUsage(suplUsage);		
       
  1783 	if(err == KErrNone ) 
       
  1784 		{
       
  1785 			iSuplSettings->SetSUPLUsage(suplUsage);
       
  1786 		}
       
  1787 	iTrace->Trace(_L("COMASUPLProtocolManager1::ReadSuplUsage end"), KTraceFileName, __LINE__);	
       
  1788 	}
       
  1789 
       
  1790 void COMASUPLProtocolManager1::UpdateAllSubSessnsInSameSession(TInt aIpcSessionId)
       
  1791     {
       
  1792 	TInt TotalSession = iSuplSessions.Count();
       
  1793 	COMASuplSession* OMAsuplSession = NULL;
       
  1794 
       
  1795 	for(TInt cnt = 0; cnt < TotalSession; ++cnt)
       
  1796 		{
       
  1797 		OMAsuplSession = static_cast<COMASuplSession*>(iSuplSessions[cnt]);
       
  1798         TInt ipcSessnId = OMAsuplSession->SuplIpcSessionID();
       
  1799 
       
  1800         if (ipcSessnId > 0 && ipcSessnId == aIpcSessionId)
       
  1801             OMAsuplSession->UpdateSuplUsage();
       
  1802 		}
       
  1803     }        
       
  1804 
       
  1805 
       
  1806 void COMASUPLProtocolManager1::SettingsChanged()
       
  1807     {
       
  1808 	TInt TotalSession = iSuplSessions.Count();
       
  1809 	COMASuplSession* OMAsuplSession = NULL;
       
  1810 
       
  1811 	for(TInt cnt = 0; cnt < TotalSession; ++cnt)
       
  1812 		{
       
  1813 		OMAsuplSession = static_cast<COMASuplSession*>(iSuplSessions[cnt]);
       
  1814         OMAsuplSession->SettingsChanged();
       
  1815 		}
       
  1816     }        
       
  1817 
       
  1818 void COMASUPLProtocolManager1::CheckOutstandingUsageUIRequestsL()
       
  1819     {
       
  1820 	TInt TotalSession = iSuplSessions.Count();
       
  1821 	COMASuplSession* OMAsuplSession = NULL;
       
  1822 
       
  1823 	for(TInt cnt = 0; cnt < TotalSession; ++cnt)
       
  1824 		{
       
  1825 			OMAsuplSession = static_cast<COMASuplSession*>(iSuplSessions[cnt]);
       
  1826 
       
  1827             if (OMAsuplSession->GetSuplUsageFlag())
       
  1828                 {                        
       
  1829                 OMAsuplSession->StartUsageDialogLaunchL();
       
  1830                 break;
       
  1831                 }
       
  1832 		}
       
  1833     }        
       
  1834 
       
  1835 void COMASUPLProtocolManager1::CheckForRoaming()
       
  1836     {
       
  1837 	iTrace->Trace(_L("COMASUPLProtocolManager1::CheckForRoaming"), KTraceFileName, __LINE__);
       
  1838     if (iRoamingCheckStarted)
       
  1839         return;                
       
  1840     iRoamingCheckStarted = ETrue;
       
  1841     iNotifier->CheckForRoaming();   
       
  1842     }
       
  1843 
       
  1844 void COMASUPLProtocolManager1::NotifyCurrentNetworkChange()
       
  1845     {
       
  1846 	iTrace->Trace(_L("COMASUPLProtocolManager1::NotifyCurrentNetworkChange"), KTraceFileName, __LINE__);
       
  1847     if (iNotifyStarted)
       
  1848         return;            
       
  1849     iNotifyStarted = ETrue;
       
  1850     iNotifier->NotifyCurrentNetworkChange();        
       
  1851     }
       
  1852 
       
  1853 void COMASUPLProtocolManager1::CancelNotify()
       
  1854     {
       
  1855 	iTrace->Trace(_L("COMASUPLProtocolManager1::CancelNotify"), KTraceFileName, __LINE__);
       
  1856     // Cancel only none of the the sessions currently requested
       
  1857     // for network change notification
       
  1858     TInt TotalSession = iSuplSessions.Count();
       
  1859     TInt notifyCount=0;
       
  1860 	COMASuplSession* OMAsuplSession = NULL;
       
  1861 
       
  1862 	for(TInt cnt = 0; cnt < TotalSession; ++cnt)
       
  1863 	    {
       
  1864 	    OMAsuplSession = static_cast<COMASuplSession*>(iSuplSessions[cnt]);
       
  1865         if (OMAsuplSession->IsEtelNotifySet())
       
  1866             {                        
       
  1867             notifyCount++;
       
  1868             break;            
       
  1869             }
       
  1870         }            
       
  1871     if (notifyCount == 0)
       
  1872         {      
       
  1873 	    iNotifyStarted = EFalse;      
       
  1874         iNotifier->Cancel();  
       
  1875         }
       
  1876     }
       
  1877 
       
  1878 void COMASUPLProtocolManager1::HandleCurrentNetworkChangeL(TInt aErrorCode, TBool aHomeNw)
       
  1879     {
       
  1880 	iTrace->Trace(_L("COMASUPLProtocolManager1::HandleCurrentNetworkChangeL"), KTraceFileName, __LINE__);
       
  1881 	TInt TotalSession = iSuplSessions.Count();
       
  1882 	COMASuplSession* OMAsuplSession = NULL;
       
  1883 
       
  1884 	for(TInt cnt = 0; cnt < TotalSession; ++cnt)
       
  1885 	    {
       
  1886 	    OMAsuplSession = static_cast<COMASuplSession*>(iSuplSessions[cnt]);
       
  1887         if (OMAsuplSession->IsEtelNotifySet())
       
  1888             {                        
       
  1889             OMAsuplSession->HandleCurrentNetworkChangeL(aErrorCode, aHomeNw);
       
  1890             break;
       
  1891             }
       
  1892         }            
       
  1893     }            
       
  1894 
       
  1895 void COMASUPLProtocolManager1::HandleRoamingCheckCompleteL(TInt aErrorCode, TBool aHomeNw)
       
  1896     {
       
  1897 	iTrace->Trace(_L("COMASUPLProtocolManager1::HandleRoamingCheckCompleteL"), KTraceFileName, __LINE__);
       
  1898     iRoamingCheckStarted = EFalse;
       
  1899 	TInt TotalSession = iSuplSessions.Count();
       
  1900 	COMASuplSession* OMAsuplSession = NULL;
       
  1901 
       
  1902 	for(TInt cnt = 0; cnt < TotalSession; ++cnt)
       
  1903 	    {
       
  1904 	    OMAsuplSession = static_cast<COMASuplSession*>(iSuplSessions[cnt]);
       
  1905         if (OMAsuplSession->IsEtelRoamingSet())
       
  1906             {                        
       
  1907             OMAsuplSession->HandleRoamingCheckCompleteL(aErrorCode, aHomeNw);
       
  1908             break;
       
  1909             }
       
  1910         }            
       
  1911     }            
       
  1912 
       
  1913 // -----------------------------------------------------------------------------
       
  1914 // COMASUPLProtocolManager1::LaunchSuplDialogTimeoutUI
       
  1915 // 
       
  1916 // 
       
  1917 // -----------------------------------------------------------------------------
       
  1918 //
       
  1919 TInt COMASUPLProtocolManager1::LaunchSuplDialogTimeoutUI(MOMASuplUICompletionObserver* aObserver )
       
  1920     {
       
  1921     iTrace->Trace(_L("COMASUPLProtocolManager1::LaunchTimeOutUI"), KTraceFileName, __LINE__);
       
  1922     
       
  1923     iSessnUIObserver = aObserver;            
       
  1924     if (iSuplSettings->IsUIActive())
       
  1925         {
       
  1926         iSuplSettings->SetUIActive(EFalse);
       
  1927         iSettingsLauncher->Cancel();
       
  1928         }                
       
  1929 
       
  1930     iSuplSettings->SetUIActive(ETrue);
       
  1931     iTimeOutDialogPresent = ETrue;
       
  1932     return iSettingsLauncher->LaunchSessionTimeOutDialog();		
       
  1933     }
       
  1934 
       
  1935 // -----------------------------------------------------------------------------
       
  1936 // COMASUPLProtocolManager1::SettingsTimeOutUICompletedL
       
  1937 // 
       
  1938 // 
       
  1939 // -----------------------------------------------------------------------------
       
  1940 //
       
  1941 void COMASUPLProtocolManager1::SettingsTimeOutUICompletedL(TInt aError)
       
  1942 	{
       
  1943 	iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsTimeOutUICompletedL"), KTraceFileName, __LINE__);
       
  1944     iSuplSettings->SetUIActive(EFalse);
       
  1945     iTimeOutDialogPresent = EFalse;
       
  1946 
       
  1947     if (iDeInitDone)
       
  1948         {
       
  1949 	    iTrace->Trace(_L("COMASUPLProtocolManager1::SettingsTimeOutUICompletedL, Completing request"), KTraceFileName, __LINE__);
       
  1950         iDeInitDone = EFalse;
       
  1951         User::RequestComplete(iDeInitRequestStatus,KErrNone);
       
  1952         }                
       
  1953     else
       
  1954         {
       
  1955         if (iSessnUIObserver)                
       
  1956         	iSessnUIObserver->SettingsTimeOutUICompletedL(aError);
       
  1957         }
       
  1958 	}
       
  1959 
       
  1960 // -----------------------------------------------------------------------------
       
  1961 // COMASUPLProtocolManager1::GetLastUsedAccessPoint
       
  1962 // 
       
  1963 // -----------------------------------------------------------------------------
       
  1964 //
       
  1965 TInt COMASUPLProtocolManager1::GetLastUsedAccessPoint(TDes& aLastlyUsedAccessPoint,TUint32& iIAPId)
       
  1966 	{
       
  1967 	return iSettingsLauncher->GetIAPName(aLastlyUsedAccessPoint,iIAPId);
       
  1968 	}
       
  1969 
       
  1970 // -----------------------------------------------------------------------------
       
  1971 // COMASUPLProtocolManager1::PrintHex
       
  1972 // 
       
  1973 // -----------------------------------------------------------------------------
       
  1974 //
       
  1975 void COMASUPLProtocolManager1::PrintHex(const TDesC8& aBuffer,TInt aLine)
       
  1976 	{
       
  1977 	TBuf<128> buffer;
       
  1978 	TBuf<8> buff;
       
  1979 	_LIT16(KFormat1,"%02x");
       
  1980 	TInt len = aBuffer.Length();
       
  1981 	for(TInt i = 0 ; i <len; i++)
       
  1982 		{
       
  1983 		buff.Zero();
       
  1984 		buff.Format(KFormat1,aBuffer[i]);
       
  1985 		iTrace->Trace(buff, KTraceFileName, aLine);
       
  1986 		}
       
  1987 	}
       
  1988 
       
  1989 // -----------------------------------------------------------------------------
       
  1990 // COMASUPLProtocolManager1::RunSuplTriggerSessionL
       
  1991 // 
       
  1992 // 
       
  1993 // -----------------------------------------------------------------------------
       
  1994 //
       
  1995 void COMASUPLProtocolManager1::RunSuplTriggerSessionL(
       
  1996    					CSuplSessionBase *const /*aSuplSession*/,
       
  1997   					TRequestStatus& /*aStatus*/,
       
  1998   					TSuplTerminalPeriodicTrigger& /*aPTrigger*/,
       
  1999   					const TDesC& /*aHslpAddress*/, 
       
  2000   					TInt /*aAllowedCapabilities*/,
       
  2001   					TBool /*aFallBack*/,
       
  2002   					TInt /*aRequestID*/)
       
  2003   	{
       
  2004 	User::Leave(KErrNotSupported);  	
       
  2005   	}
       
  2006 
       
  2007 
       
  2008 // -----------------------------------------------------------------------------
       
  2009 // COMASUPLProtocolManager1::NotifyTriggerFiredL
       
  2010 // 
       
  2011 // 
       
  2012 // -----------------------------------------------------------------------------
       
  2013 //
       
  2014 void COMASUPLProtocolManager1::NotifyTriggerFiredL(
       
  2015     				 CSuplSessionBase *const /*aSuplSession*/,
       
  2016   					 TRequestStatus& /*aStatus*/, 
       
  2017         			 TSuplTriggerFireInfo& /*aFireInfo*/
       
  2018     	)
       
  2019 	{
       
  2020 	User::Leave(KErrNotSupported);	
       
  2021 	}
       
  2022 
       
  2023 // -----------------------------------------------------------------------------
       
  2024 // COMASUPLProtocolManager::InitilizationCompletedL
       
  2025 // Informs to client about Initilization of POS ,thro' active object
       
  2026 // 
       
  2027 // -----------------------------------------------------------------------------
       
  2028 //
       
  2029 void COMASUPLProtocolManager1::InitilizationCompletedL(TInt /*aError*/)
       
  2030 	{
       
  2031 
       
  2032 	}
       
  2033 	
       
  2034 	
       
  2035 // -----------------------------------------------------------------------------
       
  2036 // COMASUPLProtocolManager::DeInitilizationCompletedL
       
  2037 // Informs to client about Initilization of POS ,thro' active object
       
  2038 // 
       
  2039 // -----------------------------------------------------------------------------
       
  2040 //
       
  2041 void COMASUPLProtocolManager1::DeInitilizationCompletedL(TInt /*aError*/)
       
  2042 	{
       
  2043 
       
  2044 	}	
       
  2045 
       
  2046 // -----------------------------------------------------------------------------
       
  2047 // COMASUPLProtocolManager1::SetCommoniCommonConfig
       
  2048 // 
       
  2049 // 
       
  2050 // -----------------------------------------------------------------------------
       
  2051 //
       
  2052 void COMASUPLProtocolManager1::SetCommonConfig(COMASuplCommonConfig*& aCommmonConfig)
       
  2053     {
       
  2054     iSuplSettings = aCommmonConfig->iSuplSettings;
       
  2055     iPosHandler = aCommmonConfig->iPosHandler;
       
  2056     iIMSI = aCommmonConfig->iIMSI;
       
  2057     iUT1_StartTimer = aCommmonConfig->iUT1_StartTimer;
       
  2058     iUT2_PosInitTimer = aCommmonConfig->iUT2_PosInitTimer;
       
  2059     iUT3_PosTimer = aCommmonConfig->iUT3_PosTimer;
       
  2060     iPrivacyTimer = aCommmonConfig->iPrivacyTimer;
       
  2061     iSETMode = aCommmonConfig->iSETMode;
       
  2062     iSuplUsage = aCommmonConfig->iSuplUsage;
       
  2063     iSuplInitTimeOut = aCommmonConfig->iSuplInitTimeOut;
       
  2064     iPersistFailTimer = aCommmonConfig->iPersistFailTimer;
       
  2065     }
       
  2066     
       
  2067 // end of file