networkcontrol/ipcprshim/src/connectionSelectorShim.cpp
author hgs
Tue, 29 Jun 2010 19:20:22 +0530
changeset 37 052078dda061
permissions -rw-r--r--
201025_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37
052078dda061 201025_01
hgs
parents:
diff changeset
     1
052078dda061 201025_01
hgs
parents:
diff changeset
     2
// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
052078dda061 201025_01
hgs
parents:
diff changeset
     3
// All rights reserved.
052078dda061 201025_01
hgs
parents:
diff changeset
     4
// This component and the accompanying materials are made available
052078dda061 201025_01
hgs
parents:
diff changeset
     5
// under the terms of "Eclipse Public License v1.0"
052078dda061 201025_01
hgs
parents:
diff changeset
     6
// which accompanies this distribution, and is available
052078dda061 201025_01
hgs
parents:
diff changeset
     7
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
052078dda061 201025_01
hgs
parents:
diff changeset
     8
//
052078dda061 201025_01
hgs
parents:
diff changeset
     9
// Initial Contributors:
052078dda061 201025_01
hgs
parents:
diff changeset
    10
// Nokia Corporation - initial contribution.
052078dda061 201025_01
hgs
parents:
diff changeset
    11
//
052078dda061 201025_01
hgs
parents:
diff changeset
    12
// Contributors:
052078dda061 201025_01
hgs
parents:
diff changeset
    13
//
052078dda061 201025_01
hgs
parents:
diff changeset
    14
// Description:
052078dda061 201025_01
hgs
parents:
diff changeset
    15
// Implementation file for the CConnectionSelectorShim
052078dda061 201025_01
hgs
parents:
diff changeset
    16
// 
052078dda061 201025_01
hgs
parents:
diff changeset
    17
//
052078dda061 201025_01
hgs
parents:
diff changeset
    18
052078dda061 201025_01
hgs
parents:
diff changeset
    19
/**
052078dda061 201025_01
hgs
parents:
diff changeset
    20
 @file
052078dda061 201025_01
hgs
parents:
diff changeset
    21
 @internalComponent
052078dda061 201025_01
hgs
parents:
diff changeset
    22
*/
052078dda061 201025_01
hgs
parents:
diff changeset
    23
052078dda061 201025_01
hgs
parents:
diff changeset
    24
052078dda061 201025_01
hgs
parents:
diff changeset
    25
#include <nifman.h>
052078dda061 201025_01
hgs
parents:
diff changeset
    26
#include <ss_glob.h>
052078dda061 201025_01
hgs
parents:
diff changeset
    27
#ifndef SYMBIAN_NETWORKING_UMTSR5
052078dda061 201025_01
hgs
parents:
diff changeset
    28
#include <comms-infras/nifif.h>
052078dda061 201025_01
hgs
parents:
diff changeset
    29
#endif //SYMBIAN_NETWORKING_UMTSR5
052078dda061 201025_01
hgs
parents:
diff changeset
    30
#include <connpref.h>
052078dda061 201025_01
hgs
parents:
diff changeset
    31
#include <cdblen.h>
052078dda061 201025_01
hgs
parents:
diff changeset
    32
#include <esockmessages.h>
052078dda061 201025_01
hgs
parents:
diff changeset
    33
#include "shimcprfactory.h"
052078dda061 201025_01
hgs
parents:
diff changeset
    34
#include "connectionSelectorShim.h"
052078dda061 201025_01
hgs
parents:
diff changeset
    35
#include "shimcpr.h"
052078dda061 201025_01
hgs
parents:
diff changeset
    36
052078dda061 201025_01
hgs
parents:
diff changeset
    37
using namespace ESock;
052078dda061 201025_01
hgs
parents:
diff changeset
    38
052078dda061 201025_01
hgs
parents:
diff changeset
    39
//PREQ399_REMOVE
052078dda061 201025_01
hgs
parents:
diff changeset
    40
#ifdef SYMBIAN_NETWORKING_3GPPDEFAULTQOS
052078dda061 201025_01
hgs
parents:
diff changeset
    41
#include <nullagtprog.h>
052078dda061 201025_01
hgs
parents:
diff changeset
    42
#endif
052078dda061 201025_01
hgs
parents:
diff changeset
    43
//SYMBIAN_NETWORKING_3GPPDEFAULTQOS //PREQ399_REMOVE
052078dda061 201025_01
hgs
parents:
diff changeset
    44
052078dda061 201025_01
hgs
parents:
diff changeset
    45
TInt CConnectionSelectorShim::AsyncDestructorCb(TAny* aInstance)
052078dda061 201025_01
hgs
parents:
diff changeset
    46
	{
052078dda061 201025_01
hgs
parents:
diff changeset
    47
	CConnectionSelectorShim* selector = reinterpret_cast<CConnectionSelectorShim*>(aInstance);
052078dda061 201025_01
hgs
parents:
diff changeset
    48
	delete selector;
052078dda061 201025_01
hgs
parents:
diff changeset
    49
	return KErrNone;
052078dda061 201025_01
hgs
parents:
diff changeset
    50
	}
052078dda061 201025_01
hgs
parents:
diff changeset
    51
052078dda061 201025_01
hgs
parents:
diff changeset
    52
CConnectionSelectorShim::CConnectionSelectorShim(ISelectionNotify& aNotify) : 
052078dda061 201025_01
hgs
parents:
diff changeset
    53
 iNotify(aNotify), 
052078dda061 201025_01
hgs
parents:
diff changeset
    54
 iAsyncDestructor(CActive::EPriorityStandard + 1),
052078dda061 201025_01
hgs
parents:
diff changeset
    55
 iConnProvider(NULL)
052078dda061 201025_01
hgs
parents:
diff changeset
    56
/** 
052078dda061 201025_01
hgs
parents:
diff changeset
    57
C'tor.
052078dda061 201025_01
hgs
parents:
diff changeset
    58
052078dda061 201025_01
hgs
parents:
diff changeset
    59
The priority of the async destructor is specifically set one higher than normal
052078dda061 201025_01
hgs
parents:
diff changeset
    60
to cater for the case whereby an RConnection is started asynchronously and
052078dda061 201025_01
hgs
parents:
diff changeset
    61
immediately closed.  This ensures that the async destructor is called before
052078dda061 201025_01
hgs
parents:
diff changeset
    62
NetCon begins the selection procedure, and hence can cancel the NetCon request
052078dda061 201025_01
hgs
parents:
diff changeset
    63
before it starts.  This causes immediate cancellation of the connection start
052078dda061 201025_01
hgs
parents:
diff changeset
    64
procedure.  Otherwise, NetCon gets in first, the connection comes all the way
052078dda061 201025_01
hgs
parents:
diff changeset
    65
and then times out in the short timer.
052078dda061 201025_01
hgs
parents:
diff changeset
    66
052078dda061 201025_01
hgs
parents:
diff changeset
    67
@param aNotify the ISelectionNotify that should be notified about the
052078dda061 201025_01
hgs
parents:
diff changeset
    68
selection progress.
052078dda061 201025_01
hgs
parents:
diff changeset
    69
*/
052078dda061 201025_01
hgs
parents:
diff changeset
    70
    { 
052078dda061 201025_01
hgs
parents:
diff changeset
    71
    __CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tCConnectionSelectorShim"), this));   
052078dda061 201025_01
hgs
parents:
diff changeset
    72
    iAsyncDestructor.Set(TCallBack(AsyncDestructorCb, this));
052078dda061 201025_01
hgs
parents:
diff changeset
    73
    }        
052078dda061 201025_01
hgs
parents:
diff changeset
    74
    
052078dda061 201025_01
hgs
parents:
diff changeset
    75
CConnectionSelectorShim::~CConnectionSelectorShim()
052078dda061 201025_01
hgs
parents:
diff changeset
    76
    {
052078dda061 201025_01
hgs
parents:
diff changeset
    77
	__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\t~CConnectionSelectorShim"), this));
052078dda061 201025_01
hgs
parents:
diff changeset
    78
052078dda061 201025_01
hgs
parents:
diff changeset
    79
	iNotify.Detach(); //"PrevLayer"::Detach() will be called only once.
052078dda061 201025_01
hgs
parents:
diff changeset
    80
052078dda061 201025_01
hgs
parents:
diff changeset
    81
	delete iSelectorSession;
052078dda061 201025_01
hgs
parents:
diff changeset
    82
052078dda061 201025_01
hgs
parents:
diff changeset
    83
	iSelectionInfo.Close();
052078dda061 201025_01
hgs
parents:
diff changeset
    84
    }
052078dda061 201025_01
hgs
parents:
diff changeset
    85
052078dda061 201025_01
hgs
parents:
diff changeset
    86
052078dda061 201025_01
hgs
parents:
diff changeset
    87
void CConnectionSelectorShim::DeleteAsync()
052078dda061 201025_01
hgs
parents:
diff changeset
    88
	{
052078dda061 201025_01
hgs
parents:
diff changeset
    89
	if (!iAsyncDestructor.IsActive())
052078dda061 201025_01
hgs
parents:
diff changeset
    90
		{
052078dda061 201025_01
hgs
parents:
diff changeset
    91
		if (iConnProvider)
052078dda061 201025_01
hgs
parents:
diff changeset
    92
			{
052078dda061 201025_01
hgs
parents:
diff changeset
    93
			__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tDeleteAsync() RelaseRef(this)"), this));
052078dda061 201025_01
hgs
parents:
diff changeset
    94
			iConnProvider->ReleaseRef(this);
052078dda061 201025_01
hgs
parents:
diff changeset
    95
			}
052078dda061 201025_01
hgs
parents:
diff changeset
    96
		iAsyncDestructor.CallBack();
052078dda061 201025_01
hgs
parents:
diff changeset
    97
		}
052078dda061 201025_01
hgs
parents:
diff changeset
    98
    }
052078dda061 201025_01
hgs
parents:
diff changeset
    99
052078dda061 201025_01
hgs
parents:
diff changeset
   100
#ifdef SYMBIAN_NETWORKING_UMTSR5
052078dda061 201025_01
hgs
parents:
diff changeset
   101
void CConnectionSelectorShim::SetFactoryIface(MIAPLockInfo * aFactoryIface)
052078dda061 201025_01
hgs
parents:
diff changeset
   102
	{
052078dda061 201025_01
hgs
parents:
diff changeset
   103
	iFactoryIface = aFactoryIface;
052078dda061 201025_01
hgs
parents:
diff changeset
   104
	}
052078dda061 201025_01
hgs
parents:
diff changeset
   105
052078dda061 201025_01
hgs
parents:
diff changeset
   106
#endif // #ifdef SYMBIAN_NETWORKING_UMTSR5
052078dda061 201025_01
hgs
parents:
diff changeset
   107
052078dda061 201025_01
hgs
parents:
diff changeset
   108
TInt CConnectionSelectorShim::Cancel()
052078dda061 201025_01
hgs
parents:
diff changeset
   109
	{
052078dda061 201025_01
hgs
parents:
diff changeset
   110
	return Cancel(KErrCancel,NULL);
052078dda061 201025_01
hgs
parents:
diff changeset
   111
	}
052078dda061 201025_01
hgs
parents:
diff changeset
   112
	
052078dda061 201025_01
hgs
parents:
diff changeset
   113
TInt CConnectionSelectorShim::Cancel(TInt aReason, const RMessage2* aMessage)
052078dda061 201025_01
hgs
parents:
diff changeset
   114
	{
052078dda061 201025_01
hgs
parents:
diff changeset
   115
	__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tCancel(aReason %d)"), this, aReason));
052078dda061 201025_01
hgs
parents:
diff changeset
   116
	TInt error = KErrNone;
052078dda061 201025_01
hgs
parents:
diff changeset
   117
	if (iSelectorSession)
052078dda061 201025_01
hgs
parents:
diff changeset
   118
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   119
		error = iSelectorSession->Stop(aReason, aMessage);
052078dda061 201025_01
hgs
parents:
diff changeset
   120
		delete iSelectorSession;
052078dda061 201025_01
hgs
parents:
diff changeset
   121
		iSelectorSession = NULL;
052078dda061 201025_01
hgs
parents:
diff changeset
   122
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   123
	
052078dda061 201025_01
hgs
parents:
diff changeset
   124
	//"PrevLayer"::Detach() will be called only once.
052078dda061 201025_01
hgs
parents:
diff changeset
   125
	//It is important to call iNotify.Detach() after all progress notifications
052078dda061 201025_01
hgs
parents:
diff changeset
   126
	//resulting from NifSession::Stop() have been passed up towards the CConnection.
052078dda061 201025_01
hgs
parents:
diff changeset
   127
	iNotify.Detach();
052078dda061 201025_01
hgs
parents:
diff changeset
   128
	DeleteAsync();
052078dda061 201025_01
hgs
parents:
diff changeset
   129
	return error;
052078dda061 201025_01
hgs
parents:
diff changeset
   130
	}
052078dda061 201025_01
hgs
parents:
diff changeset
   131
	
052078dda061 201025_01
hgs
parents:
diff changeset
   132
TInt CConnectionSelectorShim::Select(Meta::SMetaData& aPreferences, const RMessagePtr2* aMessage)
052078dda061 201025_01
hgs
parents:
diff changeset
   133
/** Implements CConnectorSelector::Select (async). The shim layer (this layer)
052078dda061 201025_01
hgs
parents:
diff changeset
   134
delegates the selection to NIFMAN. NIFMAN cannot be asked just to perform the
052078dda061 201025_01
hgs
parents:
diff changeset
   135
selection, as the selection is tighly coupled with starting connection provider.
052078dda061 201025_01
hgs
parents:
diff changeset
   136
052078dda061 201025_01
hgs
parents:
diff changeset
   137
@param aPreferences connection preferences.
052078dda061 201025_01
hgs
parents:
diff changeset
   138
*/
052078dda061 201025_01
hgs
parents:
diff changeset
   139
    {
052078dda061 201025_01
hgs
parents:
diff changeset
   140
    //Assume this is a TConnStart (as defined in ss_connprov.h)
052078dda061 201025_01
hgs
parents:
diff changeset
   141
    STypeId type = aPreferences.GetTypeId();
052078dda061 201025_01
hgs
parents:
diff changeset
   142
    ASSERT(type.iUid.iUid == KESockMessagesImplementationUid);
052078dda061 201025_01
hgs
parents:
diff changeset
   143
	ASSERT(type.iType == EESockMessageConnStart);
052078dda061 201025_01
hgs
parents:
diff changeset
   144
052078dda061 201025_01
hgs
parents:
diff changeset
   145
   	const TConnPref* connPrefs = NULL;
052078dda061 201025_01
hgs
parents:
diff changeset
   146
   	TConnStartType stype = EConnStartImplicit;
052078dda061 201025_01
hgs
parents:
diff changeset
   147
   	
052078dda061 201025_01
hgs
parents:
diff changeset
   148
   	if (type.iType == EESockMessageConnStart)
052078dda061 201025_01
hgs
parents:
diff changeset
   149
 		{
052078dda061 201025_01
hgs
parents:
diff changeset
   150
 		connPrefs = reinterpret_cast<CConnStart&>(aPreferences).ConnPrefs();
052078dda061 201025_01
hgs
parents:
diff changeset
   151
 		stype = reinterpret_cast<CConnStart&>(aPreferences).StartType();
052078dda061 201025_01
hgs
parents:
diff changeset
   152
	    if (connPrefs && connPrefs->ExtensionId() == TConnPref::EConnPrefSnap)
052078dda061 201025_01
hgs
parents:
diff changeset
   153
	    	{
052078dda061 201025_01
hgs
parents:
diff changeset
   154
			__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tSelect() with not supported preferences EConnPrefSnap"), this));
052078dda061 201025_01
hgs
parents:
diff changeset
   155
	    	iNotify.SelectComplete(NULL, KErrNotSupported);
052078dda061 201025_01
hgs
parents:
diff changeset
   156
	   	    DeleteAsync();
052078dda061 201025_01
hgs
parents:
diff changeset
   157
	   	    return KErrNotSupported;
052078dda061 201025_01
hgs
parents:
diff changeset
   158
	    	}
052078dda061 201025_01
hgs
parents:
diff changeset
   159
 		}
052078dda061 201025_01
hgs
parents:
diff changeset
   160
052078dda061 201025_01
hgs
parents:
diff changeset
   161
#ifdef SYMBIAN_NETWORKING_UMTSR5 
052078dda061 201025_01
hgs
parents:
diff changeset
   162
     	
052078dda061 201025_01
hgs
parents:
diff changeset
   163
		// The code here will check the secure ID of the application which is expected with the aMessage Ptr.
052078dda061 201025_01
hgs
parents:
diff changeset
   164
		// The logic used here is that if a General purpose application locks an IAP then no other application
052078dda061 201025_01
hgs
parents:
diff changeset
   165
		// should be allowed to start the connection ans should return with KErrAccessDenied.
052078dda061 201025_01
hgs
parents:
diff changeset
   166
	    if(aMessage!=NULL)
052078dda061 201025_01
hgs
parents:
diff changeset
   167
	       {
052078dda061 201025_01
hgs
parents:
diff changeset
   168
	       iAppSecureId = aMessage->SecureId();
052078dda061 201025_01
hgs
parents:
diff changeset
   169
	       }
052078dda061 201025_01
hgs
parents:
diff changeset
   170
 #endif   //SYMBIAN_NETWORKING_UMTSR5 
052078dda061 201025_01
hgs
parents:
diff changeset
   171
    
052078dda061 201025_01
hgs
parents:
diff changeset
   172
    TRAPD(ret,
052078dda061 201025_01
hgs
parents:
diff changeset
   173
	iSelectorSession = Nif::NewConnectionL(this, 0);
052078dda061 201025_01
hgs
parents:
diff changeset
   174
    if (connPrefs)
052078dda061 201025_01
hgs
parents:
diff changeset
   175
    	{
052078dda061 201025_01
hgs
parents:
diff changeset
   176
		__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tSelect() with preferences, iSelectorSession %x"), this, iSelectorSession));
052078dda061 201025_01
hgs
parents:
diff changeset
   177
	    iSelectorSession->StartL(stype, *connPrefs, aMessage );		
052078dda061 201025_01
hgs
parents:
diff changeset
   178
    	}
052078dda061 201025_01
hgs
parents:
diff changeset
   179
    else
052078dda061 201025_01
hgs
parents:
diff changeset
   180
    	{
052078dda061 201025_01
hgs
parents:
diff changeset
   181
		__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tSelect() no preferences, iSelectorSession %x"), this, iSelectorSession));
052078dda061 201025_01
hgs
parents:
diff changeset
   182
	    iSelectorSession->StartL(stype, aMessage );		
052078dda061 201025_01
hgs
parents:
diff changeset
   183
    	}
052078dda061 201025_01
hgs
parents:
diff changeset
   184
    );
052078dda061 201025_01
hgs
parents:
diff changeset
   185
    if (ret != KErrNone)
052078dda061 201025_01
hgs
parents:
diff changeset
   186
    	{
052078dda061 201025_01
hgs
parents:
diff changeset
   187
    	iNotify.SelectComplete(NULL, ret);
052078dda061 201025_01
hgs
parents:
diff changeset
   188
   	    DeleteAsync();
052078dda061 201025_01
hgs
parents:
diff changeset
   189
    	}
052078dda061 201025_01
hgs
parents:
diff changeset
   190
    return ret;
052078dda061 201025_01
hgs
parents:
diff changeset
   191
    }
052078dda061 201025_01
hgs
parents:
diff changeset
   192
    
052078dda061 201025_01
hgs
parents:
diff changeset
   193
052078dda061 201025_01
hgs
parents:
diff changeset
   194
void CConnectionSelectorShim::SelectionComplete(TInt aError, const TDesC8& aSelectionInfo)
052078dda061 201025_01
hgs
parents:
diff changeset
   195
/** Called by NIFMAN when the selection (previously triggered by CConnectionSelectorShim::SelectL)
052078dda061 201025_01
hgs
parents:
diff changeset
   196
completes the selection. There are two methods NIFMAN will use to indicate progress to its client. This
052078dda061 201025_01
hgs
parents:
diff changeset
   197
method and the generic ::ProgressNotification. This method forwards selection complete to
052078dda061 201025_01
hgs
parents:
diff changeset
   198
this->ProgressNotification(KFinishedSelection).
052078dda061 201025_01
hgs
parents:
diff changeset
   199
052078dda061 201025_01
hgs
parents:
diff changeset
   200
@param aError operation result.
052078dda061 201025_01
hgs
parents:
diff changeset
   201
@param aSelectionInfo selection info (to be converted to TSoIfConnectionInfo {iIAPId; iNetworkId;})
052078dda061 201025_01
hgs
parents:
diff changeset
   202
*/
052078dda061 201025_01
hgs
parents:
diff changeset
   203
    {
052078dda061 201025_01
hgs
parents:
diff changeset
   204
    __CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tSelectionComplete(), aError: %d"), this, aError));
052078dda061 201025_01
hgs
parents:
diff changeset
   205
    iSelectionInfo.Close();
052078dda061 201025_01
hgs
parents:
diff changeset
   206
    TInt err;
052078dda061 201025_01
hgs
parents:
diff changeset
   207
    if((err = iSelectionInfo.Create(aSelectionInfo)) != KErrNone)
052078dda061 201025_01
hgs
parents:
diff changeset
   208
    	{
052078dda061 201025_01
hgs
parents:
diff changeset
   209
    	aError = err;
052078dda061 201025_01
hgs
parents:
diff changeset
   210
    	}
052078dda061 201025_01
hgs
parents:
diff changeset
   211
#ifdef SYMBIAN_NETWORKING_UMTSR5
052078dda061 201025_01
hgs
parents:
diff changeset
   212
    // The following line will extract connection information which is sent by nifman after agent selection.The information contains IAP , iNetworkId
052078dda061 201025_01
hgs
parents:
diff changeset
   213
	//and connection information.
052078dda061 201025_01
hgs
parents:
diff changeset
   214
052078dda061 201025_01
hgs
parents:
diff changeset
   215
    Mem::Copy(&iConnectionInfo, aSelectionInfo.Ptr(),sizeof(iConnectionInfo));
052078dda061 201025_01
hgs
parents:
diff changeset
   216
#endif
052078dda061 201025_01
hgs
parents:
diff changeset
   217
    ProgressNotification(KFinishedSelection, aError);
052078dda061 201025_01
hgs
parents:
diff changeset
   218
    }
052078dda061 201025_01
hgs
parents:
diff changeset
   219
052078dda061 201025_01
hgs
parents:
diff changeset
   220
void CConnectionSelectorShim::CreateProviderL()
052078dda061 201025_01
hgs
parents:
diff changeset
   221
	{
052078dda061 201025_01
hgs
parents:
diff changeset
   222
	ASSERT(iSelectionInfo.Length());//this should only happen after the agent's been selected
052078dda061 201025_01
hgs
parents:
diff changeset
   223
	__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tCreateProviderL() iConnProvider %x"), this, iConnProvider));
052078dda061 201025_01
hgs
parents:
diff changeset
   224
 	if (iConnProvider) 
052078dda061 201025_01
hgs
parents:
diff changeset
   225
 		{
052078dda061 201025_01
hgs
parents:
diff changeset
   226
		__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tCreateProviderL() iConnProvider->GetNifSession() %x"), this, iConnProvider->GetNifSession()));	
052078dda061 201025_01
hgs
parents:
diff changeset
   227
		__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tCreateProviderL() iConnProvider->ConnectionInfo() %S"), this, &iConnProvider->ConnectionInfo()));
052078dda061 201025_01
hgs
parents:
diff changeset
   228
 		}
052078dda061 201025_01
hgs
parents:
diff changeset
   229
	//if we have a provider already and it's the existing one we have to check whether the conn info still matches since there could've been
052078dda061 201025_01
hgs
parents:
diff changeset
   230
	//a reconnection
052078dda061 201025_01
hgs
parents:
diff changeset
   231
	if ( iConnProvider && iConnProvider->GetNifSession() && iConnProvider->ConnectionInfo() != iSelectionInfo )
052078dda061 201025_01
hgs
parents:
diff changeset
   232
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   233
        __CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tCreateProviderL() -> ReleaseRef()"), this));
052078dda061 201025_01
hgs
parents:
diff changeset
   234
	    iConnProvider->ReleaseRef(this);
052078dda061 201025_01
hgs
parents:
diff changeset
   235
	    iConnProvider = NULL;
052078dda061 201025_01
hgs
parents:
diff changeset
   236
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   237
	if ( !iConnProvider )
052078dda061 201025_01
hgs
parents:
diff changeset
   238
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   239
	    TSockManData* sockManData = SockManGlobals::Get();
052078dda061 201025_01
hgs
parents:
diff changeset
   240
		ASSERT(sockManData);
052078dda061 201025_01
hgs
parents:
diff changeset
   241
		
052078dda061 201025_01
hgs
parents:
diff changeset
   242
		CConnectionFactoryContainer* connectionFactories = sockManData->iConnectionFactories;
052078dda061 201025_01
hgs
parents:
diff changeset
   243
		ASSERT(connectionFactories);
052078dda061 201025_01
hgs
parents:
diff changeset
   244
		
052078dda061 201025_01
hgs
parents:
diff changeset
   245
		CConnectionProviderFactoryBase* factory = connectionFactories->FindFactory(KShimConnectionProviderFactoryId);
052078dda061 201025_01
hgs
parents:
diff changeset
   246
		ASSERT(factory);
052078dda061 201025_01
hgs
parents:
diff changeset
   247
		if (IsConnectionStoppingL())
052078dda061 201025_01
hgs
parents:
diff changeset
   248
			{
052078dda061 201025_01
hgs
parents:
diff changeset
   249
			// We must force the creation of a new provider because the old one is on its way out.
052078dda061 201025_01
hgs
parents:
diff changeset
   250
			// This is required to ensure that we do not receive progresses generated as the connection
052078dda061 201025_01
hgs
parents:
diff changeset
   251
			// comes down.  We are only interested in progresses generated when the connection subsequently
052078dda061 201025_01
hgs
parents:
diff changeset
   252
			// starts coming up again.  Upper layers starting a connection just as it is coming down will
052078dda061 201025_01
hgs
parents:
diff changeset
   253
			// otherwise receive these progresses.  In particular, progresses with an error will otherwise
052078dda061 201025_01
hgs
parents:
diff changeset
   254
			// be mistaken for an indication that the connection startup failed.
052078dda061 201025_01
hgs
parents:
diff changeset
   255
	    		iConnProvider = (CConnectionProviderShim*)factory->CreateProviderL();
052078dda061 201025_01
hgs
parents:
diff changeset
   256
			__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tCreateProviderL() - connection stopping, iConnProvider %x"), this, iConnProvider));
052078dda061 201025_01
hgs
parents:
diff changeset
   257
			}
052078dda061 201025_01
hgs
parents:
diff changeset
   258
		else
052078dda061 201025_01
hgs
parents:
diff changeset
   259
			{
052078dda061 201025_01
hgs
parents:
diff changeset
   260
			XConnectionFactoryQueryInfo query(NULL, iSelectionInfo);
052078dda061 201025_01
hgs
parents:
diff changeset
   261
			iConnProvider = (CConnectionProviderShim*)factory->FindOrCreateProviderL(query);
052078dda061 201025_01
hgs
parents:
diff changeset
   262
			__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tCreateProviderL() - found/created iConnProvider %x"), this, iConnProvider));
052078dda061 201025_01
hgs
parents:
diff changeset
   263
			}
052078dda061 201025_01
hgs
parents:
diff changeset
   264
	    //and keep provider up during the selection
052078dda061 201025_01
hgs
parents:
diff changeset
   265
	    iConnProvider->AddRefL(this);
052078dda061 201025_01
hgs
parents:
diff changeset
   266
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   267
	}
052078dda061 201025_01
hgs
parents:
diff changeset
   268
052078dda061 201025_01
hgs
parents:
diff changeset
   269
TBool CConnectionSelectorShim::IsConnectionStoppingL()
052078dda061 201025_01
hgs
parents:
diff changeset
   270
	{
052078dda061 201025_01
hgs
parents:
diff changeset
   271
	TPckg<TBool> stopping(EFalse);
052078dda061 201025_01
hgs
parents:
diff changeset
   272
	iSelectorSession->ControlL(KCOLProvider, KNifSessionGetStopping, stopping, NULL);
052078dda061 201025_01
hgs
parents:
diff changeset
   273
	return stopping();
052078dda061 201025_01
hgs
parents:
diff changeset
   274
	}
052078dda061 201025_01
hgs
parents:
diff changeset
   275
052078dda061 201025_01
hgs
parents:
diff changeset
   276
void CConnectionSelectorShim::HandleSelectionL()
052078dda061 201025_01
hgs
parents:
diff changeset
   277
	{
052078dda061 201025_01
hgs
parents:
diff changeset
   278
	// HandleSelection will set up the provider
052078dda061 201025_01
hgs
parents:
diff changeset
   279
052078dda061 201025_01
hgs
parents:
diff changeset
   280
	// Set default factory as the CConnectionProviderFactoryShim
052078dda061 201025_01
hgs
parents:
diff changeset
   281
	CreateProviderL();
052078dda061 201025_01
hgs
parents:
diff changeset
   282
	if (iSelectorSession && !iConnProvider->GetNifSession())
052078dda061 201025_01
hgs
parents:
diff changeset
   283
		{			
052078dda061 201025_01
hgs
parents:
diff changeset
   284
		iConnProvider->SetConnectionInfo(iSelectionInfo);
052078dda061 201025_01
hgs
parents:
diff changeset
   285
		//
052078dda061 201025_01
hgs
parents:
diff changeset
   286
		// The factory didn't find an existing provider that matched the query.
052078dda061 201025_01
hgs
parents:
diff changeset
   287
		// It's returned a brand new instance of CConnectionProviderShim.
052078dda061 201025_01
hgs
parents:
diff changeset
   288
		// Hence we'll call Initialise. this will do 2 things:
052078dda061 201025_01
hgs
parents:
diff changeset
   289
		//
052078dda061 201025_01
hgs
parents:
diff changeset
   290
		// 1. Create a secure nif(man) session for the provider
052078dda061 201025_01
hgs
parents:
diff changeset
   291
		// 2. Call ConnectionControlActivity for the provider so that
052078dda061 201025_01
hgs
parents:
diff changeset
   292
		//			
052078dda061 201025_01
hgs
parents:
diff changeset
   293
		iConnProvider->InitialiseL(iSelectorSession);
052078dda061 201025_01
hgs
parents:
diff changeset
   294
		iConnProvider->SetBlockProgressesL(iSelectorSession);
052078dda061 201025_01
hgs
parents:
diff changeset
   295
		iSetProviderNull = ETrue;
052078dda061 201025_01
hgs
parents:
diff changeset
   296
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   297
	}
052078dda061 201025_01
hgs
parents:
diff changeset
   298
052078dda061 201025_01
hgs
parents:
diff changeset
   299
052078dda061 201025_01
hgs
parents:
diff changeset
   300
#ifdef SYMBIAN_NETWORKING_UMTSR5
052078dda061 201025_01
hgs
parents:
diff changeset
   301
void CConnectionSelectorShim::MaybeLockIapL()
052078dda061 201025_01
hgs
parents:
diff changeset
   302
	{
052078dda061 201025_01
hgs
parents:
diff changeset
   303
	//The value of Secure ID is fetched from DataBase againt IAP.Iap is taken agent selection is over.This will look 
052078dda061 201025_01
hgs
parents:
diff changeset
   304
	//into the database if secureID feild is NULL or not if it is NULL then IAP will not be locked
052078dda061 201025_01
hgs
parents:
diff changeset
   305
	CMDBSession* cmdbSession;
052078dda061 201025_01
hgs
parents:
diff changeset
   306
	CCDIAPRecord* ptrIapRecord;
052078dda061 201025_01
hgs
parents:
diff changeset
   307
	ptrIapRecord = static_cast<CCDIAPRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord));
052078dda061 201025_01
hgs
parents:
diff changeset
   308
	CleanupStack::PushL(ptrIapRecord);
052078dda061 201025_01
hgs
parents:
diff changeset
   309
	
052078dda061 201025_01
hgs
parents:
diff changeset
   310
	// Create a new CMDB session Object
052078dda061 201025_01
hgs
parents:
diff changeset
   311
	cmdbSession = CMDBSession::NewL(KCDVersion1_1);
052078dda061 201025_01
hgs
parents:
diff changeset
   312
	// If successm Get and Load the record.
052078dda061 201025_01
hgs
parents:
diff changeset
   313
	CleanupStack::PushL(cmdbSession);
052078dda061 201025_01
hgs
parents:
diff changeset
   314
052078dda061 201025_01
hgs
parents:
diff changeset
   315
	ptrIapRecord->SetRecordId(iConnectionInfo.iIAPId);
052078dda061 201025_01
hgs
parents:
diff changeset
   316
	ptrIapRecord->LoadL(*cmdbSession);
052078dda061 201025_01
hgs
parents:
diff changeset
   317
	// Although the SecureID of the application is numerical, we have to take it into the string buffer
052078dda061 201025_01
hgs
parents:
diff changeset
   318
	// because of the limitations of the CommsDat, which dont support hexadeciaml values, and truncate 
052078dda061 201025_01
hgs
parents:
diff changeset
   319
	// decimal values after 8 digits, for some unknown reasons.
052078dda061 201025_01
hgs
parents:
diff changeset
   320
	// Because of the current project schedule, its not feasible to rectify commsdat as of now, so decided
052078dda061 201025_01
hgs
parents:
diff changeset
   321
	// to take on string Buffers to be used for Secure Ids from commsdat 
052078dda061 201025_01
hgs
parents:
diff changeset
   322
	TUint32 secureId;
052078dda061 201025_01
hgs
parents:
diff changeset
   323
	secureId=ptrIapRecord->iAppSid;
052078dda061 201025_01
hgs
parents:
diff changeset
   324
 	
052078dda061 201025_01
hgs
parents:
diff changeset
   325
	if(secureId==iAppSecureId.iId && iAppSecureId.iId!=NULL)
052078dda061 201025_01
hgs
parents:
diff changeset
   326
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   327
		// Inform the Factory that the Ids match so IAP will be locked. The IAP number is also given to 
052078dda061 201025_01
hgs
parents:
diff changeset
   328
		// the factory so that the application can start connection on other IAPs which are not locked
052078dda061 201025_01
hgs
parents:
diff changeset
   329
		// by the program
052078dda061 201025_01
hgs
parents:
diff changeset
   330
		iFactoryIface->SetIAPLockStatus(ETrue,iConnectionInfo.iIAPId);
052078dda061 201025_01
hgs
parents:
diff changeset
   331
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   332
	    
052078dda061 201025_01
hgs
parents:
diff changeset
   333
        CleanupStack::Pop(cmdbSession);
052078dda061 201025_01
hgs
parents:
diff changeset
   334
	delete cmdbSession;
052078dda061 201025_01
hgs
parents:
diff changeset
   335
	CleanupStack::Pop(ptrIapRecord);
052078dda061 201025_01
hgs
parents:
diff changeset
   336
	delete ptrIapRecord;
052078dda061 201025_01
hgs
parents:
diff changeset
   337
	       
052078dda061 201025_01
hgs
parents:
diff changeset
   338
	}
052078dda061 201025_01
hgs
parents:
diff changeset
   339
#endif
052078dda061 201025_01
hgs
parents:
diff changeset
   340
052078dda061 201025_01
hgs
parents:
diff changeset
   341
void CConnectionSelectorShim::ProgressNotification(TInt aStage, TInt aError)
052078dda061 201025_01
hgs
parents:
diff changeset
   342
/** 
052078dda061 201025_01
hgs
parents:
diff changeset
   343
052078dda061 201025_01
hgs
parents:
diff changeset
   344
@param 
052078dda061 201025_01
hgs
parents:
diff changeset
   345
*/  
052078dda061 201025_01
hgs
parents:
diff changeset
   346
    {
052078dda061 201025_01
hgs
parents:
diff changeset
   347
	__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tProgressNotification(%d, %d)"), 
052078dda061 201025_01
hgs
parents:
diff changeset
   348
					 this, aStage, aError));
052078dda061 201025_01
hgs
parents:
diff changeset
   349
	
052078dda061 201025_01
hgs
parents:
diff changeset
   350
	// In all cases we must pass the new progress up the chain of selectors
052078dda061 201025_01
hgs
parents:
diff changeset
   351
	if (aError == KErrNone)
052078dda061 201025_01
hgs
parents:
diff changeset
   352
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   353
		aError = iError;
052078dda061 201025_01
hgs
parents:
diff changeset
   354
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   355
	//	
052078dda061 201025_01
hgs
parents:
diff changeset
   356
	// Depending on the progress and the progress error, we need to handle situations differently
052078dda061 201025_01
hgs
parents:
diff changeset
   357
	// 
052078dda061 201025_01
hgs
parents:
diff changeset
   358
	// Normally, if progress has reached KFinishedSelection, we stop propogating the progress
052078dda061 201025_01
hgs
parents:
diff changeset
   359
	// up, because, we would have already setup the provide (iProvider) with a new nif session
052078dda061 201025_01
hgs
parents:
diff changeset
   360
	// pointing to the same agent as iSelectorSession, hence further messages from agent and
052078dda061 201025_01
hgs
parents:
diff changeset
   361
	// nifman will be forwared to the provider.
052078dda061 201025_01
hgs
parents:
diff changeset
   362
	//
052078dda061 201025_01
hgs
parents:
diff changeset
   363
	// However, there are two exceptions to this situation:
052078dda061 201025_01
hgs
parents:
diff changeset
   364
	// We have a provider that's already been initialized with a nif session
052078dda061 201025_01
hgs
parents:
diff changeset
   365
	// signified by !iSetProviderNull, in which case, we forward the message up 
052078dda061 201025_01
hgs
parents:
diff changeset
   366
	// whether or not we have finished selection. Same goes for situations when 
052078dda061 201025_01
hgs
parents:
diff changeset
   367
	// we have progress error, instead of waiting for the provider to propogate the 
052078dda061 201025_01
hgs
parents:
diff changeset
   368
	// message upwards, we use iNotify to do that, since the client would expect the
052078dda061 201025_01
hgs
parents:
diff changeset
   369
	// message (e.g. Stop) to be completed with error immidiately
052078dda061 201025_01
hgs
parents:
diff changeset
   370
	// 
052078dda061 201025_01
hgs
parents:
diff changeset
   371
052078dda061 201025_01
hgs
parents:
diff changeset
   372
	// Any error means that the selection (and startup of the interface) will be abandoned and reported to the client.
052078dda061 201025_01
hgs
parents:
diff changeset
   373
	if (aError != KErrNone)
052078dda061 201025_01
hgs
parents:
diff changeset
   374
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   375
		iNotify.ProgressNotification(aStage, aError);
052078dda061 201025_01
hgs
parents:
diff changeset
   376
		iNotify.SelectComplete(NULL, aError);
052078dda061 201025_01
hgs
parents:
diff changeset
   377
		DeleteAsync();
052078dda061 201025_01
hgs
parents:
diff changeset
   378
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   379
	else if (aStage <= KFinishedSelection || !iSetProviderNull)
052078dda061 201025_01
hgs
parents:
diff changeset
   380
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   381
		iNotify.ProgressNotification(aStage, aError);
052078dda061 201025_01
hgs
parents:
diff changeset
   382
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   383
052078dda061 201025_01
hgs
parents:
diff changeset
   384
	if (aStage == KFinishedSelection && aError == KErrNone)
052078dda061 201025_01
hgs
parents:
diff changeset
   385
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   386
		// The selection is complete so we want to reach the situation where the selector (this object) is 
052078dda061 201025_01
hgs
parents:
diff changeset
   387
		// joined by the appropriate provider. The provider will be set up with a pointer to the CNifSession 
052078dda061 201025_01
hgs
parents:
diff changeset
   388
		// allowing the calls to methods such as EnumerateSubConnections to work between KFinishedSelection and
052078dda061 201025_01
hgs
parents:
diff changeset
   389
		// KLinkLayerOpen. The provider will be accessible from the selector until KLinkLayerOpen is reached
052078dda061 201025_01
hgs
parents:
diff changeset
   390
		// (when the selector will be destroyed).
052078dda061 201025_01
hgs
parents:
diff changeset
   391
		TRAP(aError,HandleSelectionL());
052078dda061 201025_01
hgs
parents:
diff changeset
   392
		if (aError == KErrNone)
052078dda061 201025_01
hgs
parents:
diff changeset
   393
			{
052078dda061 201025_01
hgs
parents:
diff changeset
   394
			iNotify.SelectComplete(iConnProvider, aError);
052078dda061 201025_01
hgs
parents:
diff changeset
   395
			}
052078dda061 201025_01
hgs
parents:
diff changeset
   396
#ifdef SYMBIAN_NETWORKING_UMTSR5
052078dda061 201025_01
hgs
parents:
diff changeset
   397
052078dda061 201025_01
hgs
parents:
diff changeset
   398
		// First Check IAP Locked, if yes Return,
052078dda061 201025_01
hgs
parents:
diff changeset
   399
		TBool  IapLocked = EFalse;
052078dda061 201025_01
hgs
parents:
diff changeset
   400
		TInt	IapNumber = -1;
052078dda061 201025_01
hgs
parents:
diff changeset
   401
	
052078dda061 201025_01
hgs
parents:
diff changeset
   402
		iFactoryIface->GetIAPLockStatus(IapLocked, IapNumber);
052078dda061 201025_01
hgs
parents:
diff changeset
   403
	
052078dda061 201025_01
hgs
parents:
diff changeset
   404
		if (IapLocked && IapNumber == iConnectionInfo.iIAPId)
052078dda061 201025_01
hgs
parents:
diff changeset
   405
			{
052078dda061 201025_01
hgs
parents:
diff changeset
   406
			//iNotify.ProgressNotification(aStage, KErrPermissionDenied);
052078dda061 201025_01
hgs
parents:
diff changeset
   407
			iNotify.SelectComplete(iConnProvider, KErrPermissionDenied);
052078dda061 201025_01
hgs
parents:
diff changeset
   408
			DeleteAsync();	
052078dda061 201025_01
hgs
parents:
diff changeset
   409
			return;
052078dda061 201025_01
hgs
parents:
diff changeset
   410
			}
052078dda061 201025_01
hgs
parents:
diff changeset
   411
#endif //SYMBIAN_NETWORKING_UMTSR5  
052078dda061 201025_01
hgs
parents:
diff changeset
   412
052078dda061 201025_01
hgs
parents:
diff changeset
   413
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   414
	else if (aStage == KConnectionUninitialised)
052078dda061 201025_01
hgs
parents:
diff changeset
   415
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   416
		//KConnectionUninitialised means that the interface has been stopped.
052078dda061 201025_01
hgs
parents:
diff changeset
   417
		DeleteAsync();
052078dda061 201025_01
hgs
parents:
diff changeset
   418
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   419
	else if (aStage == KLinkLayerOpen && !iIsLinkLayerOpen)
052078dda061 201025_01
hgs
parents:
diff changeset
   420
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   421
		// Calling iNotify.LayerUp when we have a provider setup with a nif session already
052078dda061 201025_01
hgs
parents:
diff changeset
   422
		// follows from the logic above justifying propogating progress up when we have a 
052078dda061 201025_01
hgs
parents:
diff changeset
   423
		// provider setup with a nif session
052078dda061 201025_01
hgs
parents:
diff changeset
   424
		iNotify.LayerUp(aError);
052078dda061 201025_01
hgs
parents:
diff changeset
   425
		DeleteAsync(); // The interface has successfully started and all responsibility should be taken over by the the provider.
052078dda061 201025_01
hgs
parents:
diff changeset
   426
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   427
052078dda061 201025_01
hgs
parents:
diff changeset
   428
#ifdef SYMBIAN_NETWORKING_3GPPDEFAULTQOS
052078dda061 201025_01
hgs
parents:
diff changeset
   429
    else if ( aStage == ENullAgtConnecting && aError == KErrNone )
052078dda061 201025_01
hgs
parents:
diff changeset
   430
    	{
052078dda061 201025_01
hgs
parents:
diff changeset
   431
#ifdef SYMBIAN_NETWORKING_UMTSR5
052078dda061 201025_01
hgs
parents:
diff changeset
   432
052078dda061 201025_01
hgs
parents:
diff changeset
   433
	TRAPD(ret,MaybeLockIapL());
052078dda061 201025_01
hgs
parents:
diff changeset
   434
#ifdef __CFLOG_ACTIVE	
052078dda061 201025_01
hgs
parents:
diff changeset
   435
	if(ret!=KErrNone)
052078dda061 201025_01
hgs
parents:
diff changeset
   436
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   437
		__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tMaybeLockIap left with  %d"), 
052078dda061 201025_01
hgs
parents:
diff changeset
   438
					 this, ret));
052078dda061 201025_01
hgs
parents:
diff changeset
   439
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   440
#endif
052078dda061 201025_01
hgs
parents:
diff changeset
   441
	(void)ret; //TRAP is safe to ignore becuase if MaybeLockIapL: leave the correct behaviour is to leave Iap unlocked.
052078dda061 201025_01
hgs
parents:
diff changeset
   442
	//We can safely ignore the trap because the function will only lock IAP. One should not be effected if someth
052078dda061 201025_01
hgs
parents:
diff changeset
   443
#endif //SYMBIAN_NETWORKING_UMTSR5  
052078dda061 201025_01
hgs
parents:
diff changeset
   444
    	}
052078dda061 201025_01
hgs
parents:
diff changeset
   445
    	
052078dda061 201025_01
hgs
parents:
diff changeset
   446
#endif //SYMBIAN_NETWORKING_3GPPDEFAULTQOS //PREQ399_REMOVE
052078dda061 201025_01
hgs
parents:
diff changeset
   447
    }
052078dda061 201025_01
hgs
parents:
diff changeset
   448
052078dda061 201025_01
hgs
parents:
diff changeset
   449
052078dda061 201025_01
hgs
parents:
diff changeset
   450
void CConnectionSelectorShim::SubConnectionEvent(const TSubConnectionEvent& /*aSubConnectionEvent*/)
052078dda061 201025_01
hgs
parents:
diff changeset
   451
/** 
052078dda061 201025_01
hgs
parents:
diff changeset
   452
052078dda061 201025_01
hgs
parents:
diff changeset
   453
@param 
052078dda061 201025_01
hgs
parents:
diff changeset
   454
*/
052078dda061 201025_01
hgs
parents:
diff changeset
   455
   {		
052078dda061 201025_01
hgs
parents:
diff changeset
   456
   }
052078dda061 201025_01
hgs
parents:
diff changeset
   457
052078dda061 201025_01
hgs
parents:
diff changeset
   458
void CConnectionSelectorShim::ServiceChangeNotification(TUint32 aId, const TDesC& aType)
052078dda061 201025_01
hgs
parents:
diff changeset
   459
/** 
052078dda061 201025_01
hgs
parents:
diff changeset
   460
052078dda061 201025_01
hgs
parents:
diff changeset
   461
@param 
052078dda061 201025_01
hgs
parents:
diff changeset
   462
*/
052078dda061 201025_01
hgs
parents:
diff changeset
   463
   {
052078dda061 201025_01
hgs
parents:
diff changeset
   464
   iNotify.ServiceChangeNotification(aId, aType);
052078dda061 201025_01
hgs
parents:
diff changeset
   465
   }
052078dda061 201025_01
hgs
parents:
diff changeset
   466
052078dda061 201025_01
hgs
parents:
diff changeset
   467
void CConnectionSelectorShim::LinkLayerOpen(TInt aError)
052078dda061 201025_01
hgs
parents:
diff changeset
   468
/** 
052078dda061 201025_01
hgs
parents:
diff changeset
   469
052078dda061 201025_01
hgs
parents:
diff changeset
   470
@param 
052078dda061 201025_01
hgs
parents:
diff changeset
   471
*/
052078dda061 201025_01
hgs
parents:
diff changeset
   472
	{
052078dda061 201025_01
hgs
parents:
diff changeset
   473
	__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tLinkLayerOpen(aError %d)"), 
052078dda061 201025_01
hgs
parents:
diff changeset
   474
					 this, aError));
052078dda061 201025_01
hgs
parents:
diff changeset
   475
	iIsLinkLayerOpen = ETrue;
052078dda061 201025_01
hgs
parents:
diff changeset
   476
	if (aError == KErrNone)
052078dda061 201025_01
hgs
parents:
diff changeset
   477
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   478
		if (iSetProviderNull)
052078dda061 201025_01
hgs
parents:
diff changeset
   479
			{
052078dda061 201025_01
hgs
parents:
diff changeset
   480
			ASSERT(iConnProvider->GetNifSession());
052078dda061 201025_01
hgs
parents:
diff changeset
   481
			iConnProvider->ReleaseRef(this);
052078dda061 201025_01
hgs
parents:
diff changeset
   482
			iConnProvider = NULL;
052078dda061 201025_01
hgs
parents:
diff changeset
   483
			iSetProviderNull = EFalse;
052078dda061 201025_01
hgs
parents:
diff changeset
   484
			}		
052078dda061 201025_01
hgs
parents:
diff changeset
   485
		
052078dda061 201025_01
hgs
parents:
diff changeset
   486
		DeleteAsync();
052078dda061 201025_01
hgs
parents:
diff changeset
   487
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   488
	else
052078dda061 201025_01
hgs
parents:
diff changeset
   489
		{
052078dda061 201025_01
hgs
parents:
diff changeset
   490
		iNotify.SelectComplete(NULL, aError);
052078dda061 201025_01
hgs
parents:
diff changeset
   491
		}
052078dda061 201025_01
hgs
parents:
diff changeset
   492
    }
052078dda061 201025_01
hgs
parents:
diff changeset
   493
    
052078dda061 201025_01
hgs
parents:
diff changeset
   494
void CConnectionSelectorShim::SetProviderNull()
052078dda061 201025_01
hgs
parents:
diff changeset
   495
	{
052078dda061 201025_01
hgs
parents:
diff changeset
   496
	__CFLOG_VAR((KShimCprTag, KShimCprSubTag, _L8("CConnectionSelectorShim %08x:\tSetProviderNull() iConnProvider %x"), this, iConnProvider));
052078dda061 201025_01
hgs
parents:
diff changeset
   497
	iConnProvider = NULL;
052078dda061 201025_01
hgs
parents:
diff changeset
   498
	}
052078dda061 201025_01
hgs
parents:
diff changeset
   499
052078dda061 201025_01
hgs
parents:
diff changeset
   500
void CConnectionSelectorShim::ConnectionError(TInt /*aError*/)
052078dda061 201025_01
hgs
parents:
diff changeset
   501
/** 
052078dda061 201025_01
hgs
parents:
diff changeset
   502
052078dda061 201025_01
hgs
parents:
diff changeset
   503
@param 
052078dda061 201025_01
hgs
parents:
diff changeset
   504
*/
052078dda061 201025_01
hgs
parents:
diff changeset
   505
    {
052078dda061 201025_01
hgs
parents:
diff changeset
   506
    //ignore the event
052078dda061 201025_01
hgs
parents:
diff changeset
   507
    }
052078dda061 201025_01
hgs
parents:
diff changeset
   508
052078dda061 201025_01
hgs
parents:
diff changeset
   509
052078dda061 201025_01
hgs
parents:
diff changeset
   510
void CConnectionSelectorShim::LinkLayerClosed(TInt /*aError*/)
052078dda061 201025_01
hgs
parents:
diff changeset
   511
/** 
052078dda061 201025_01
hgs
parents:
diff changeset
   512
052078dda061 201025_01
hgs
parents:
diff changeset
   513
@param 
052078dda061 201025_01
hgs
parents:
diff changeset
   514
*/
052078dda061 201025_01
hgs
parents:
diff changeset
   515
    {
052078dda061 201025_01
hgs
parents:
diff changeset
   516
    //ignore the event
052078dda061 201025_01
hgs
parents:
diff changeset
   517
    }
052078dda061 201025_01
hgs
parents:
diff changeset
   518
052078dda061 201025_01
hgs
parents:
diff changeset
   519
052078dda061 201025_01
hgs
parents:
diff changeset
   520
052078dda061 201025_01
hgs
parents:
diff changeset
   521
void CConnectionSelectorShim::ProgressNotification(TSubConnectionUniqueId /*aSubConnectionUniqueId*/, TInt /*aStage*/, TInt /*aError*/)
052078dda061 201025_01
hgs
parents:
diff changeset
   522
/** 
052078dda061 201025_01
hgs
parents:
diff changeset
   523
052078dda061 201025_01
hgs
parents:
diff changeset
   524
@param 
052078dda061 201025_01
hgs
parents:
diff changeset
   525
*/
052078dda061 201025_01
hgs
parents:
diff changeset
   526
    {
052078dda061 201025_01
hgs
parents:
diff changeset
   527
    }
052078dda061 201025_01
hgs
parents:
diff changeset
   528
052078dda061 201025_01
hgs
parents:
diff changeset
   529
void CConnectionSelectorShim::InterfaceStateChangeNotification(TDesC8& /*aInfo*/)
052078dda061 201025_01
hgs
parents:
diff changeset
   530
/** 
052078dda061 201025_01
hgs
parents:
diff changeset
   531
052078dda061 201025_01
hgs
parents:
diff changeset
   532
@param 
052078dda061 201025_01
hgs
parents:
diff changeset
   533
*/
052078dda061 201025_01
hgs
parents:
diff changeset
   534
    {
052078dda061 201025_01
hgs
parents:
diff changeset
   535
    //ignore the event
052078dda061 201025_01
hgs
parents:
diff changeset
   536
    }
052078dda061 201025_01
hgs
parents:
diff changeset
   537
052078dda061 201025_01
hgs
parents:
diff changeset
   538
052078dda061 201025_01
hgs
parents:
diff changeset
   539
void CConnectionSelectorShim::NotifyDataSent(TSubConnectionUniqueId /*aSubConnectionUniqueId*/, TUint /*aUplinkVolume*/)
052078dda061 201025_01
hgs
parents:
diff changeset
   540
/** 
052078dda061 201025_01
hgs
parents:
diff changeset
   541
052078dda061 201025_01
hgs
parents:
diff changeset
   542
@param 
052078dda061 201025_01
hgs
parents:
diff changeset
   543
*/
052078dda061 201025_01
hgs
parents:
diff changeset
   544
    {
052078dda061 201025_01
hgs
parents:
diff changeset
   545
    //ignore the event
052078dda061 201025_01
hgs
parents:
diff changeset
   546
    }
052078dda061 201025_01
hgs
parents:
diff changeset
   547
052078dda061 201025_01
hgs
parents:
diff changeset
   548
052078dda061 201025_01
hgs
parents:
diff changeset
   549
void CConnectionSelectorShim::NotifyDataReceived(TSubConnectionUniqueId /*aSubConnectionUniqueId*/, TUint /*aDownlinkVolume*/)
052078dda061 201025_01
hgs
parents:
diff changeset
   550
/** 
052078dda061 201025_01
hgs
parents:
diff changeset
   551
052078dda061 201025_01
hgs
parents:
diff changeset
   552
@param 
052078dda061 201025_01
hgs
parents:
diff changeset
   553
*/
052078dda061 201025_01
hgs
parents:
diff changeset
   554
    {
052078dda061 201025_01
hgs
parents:
diff changeset
   555
    //ignore the event
052078dda061 201025_01
hgs
parents:
diff changeset
   556
    }
052078dda061 201025_01
hgs
parents:
diff changeset
   557