telephonyserver/etelpacketdata/dtsy/pcktcontexttsy.cpp
changeset 0 3553901f7fa8
equal deleted inserted replaced
-1:000000000000 0:3553901f7fa8
       
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // PACKETCONTEXTTSY.CPP
       
    15 // 
       
    16 //
       
    17 
       
    18 #include "pckttsy.h"
       
    19 #include "testdef.h"
       
    20 #include "etelpckt.h"
       
    21 #include "dpcktlog.h"
       
    22 #include <pcktcs.h>
       
    23 
       
    24 #include "coretsy.h"
       
    25 
       
    26 /**************************************************************************/
       
    27 //
       
    28 //	CGprsContextDGprsTsy
       
    29 //
       
    30 /**************************************************************************/
       
    31 
       
    32 CGprsContextDGprsTsy* CGprsContextDGprsTsy::NewL(CPhoneFactoryDummyBase* aFac)
       
    33 /**
       
    34  * NewL method - Standard 2-phase constructor
       
    35  */
       
    36 	{
       
    37 	LOGTEXT(_L8("CGprsContextDGprsTsy: NewL() method"));
       
    38 
       
    39 	CGprsContextDGprsTsy* subsession=new(ELeave) CGprsContextDGprsTsy(aFac);
       
    40 	CleanupStack::PushL(subsession);
       
    41 	subsession->ConstructL();
       
    42 	CleanupStack::Pop();
       
    43 	return subsession;
       
    44 	}
       
    45 
       
    46 void CGprsContextDGprsTsy::Init()
       
    47 	{}
       
    48 
       
    49 CGprsContextDGprsTsy::CGprsContextDGprsTsy(CPhoneFactoryDummyBase* aFac)
       
    50 	:CSubSessionExtDummyBase(aFac)
       
    51 	{
       
    52 	}
       
    53 
       
    54 void CGprsContextDGprsTsy::ConstructL()
       
    55 /**
       
    56  * ConstructL method
       
    57  */
       
    58 	{
       
    59 	LOGTEXT(_L8("CGprsContextDGprsTsy: Entered constructor"));
       
    60 	}
       
    61 
       
    62 CGprsContextDGprsTsy::~CGprsContextDGprsTsy()
       
    63 /**
       
    64  * Destructor
       
    65  */
       
    66 	{
       
    67 	LOGTEXT(_L8("CGprsContextDGprsTsy: Entered destructor"));
       
    68 	}
       
    69 
       
    70 CTelObject* CGprsContextDGprsTsy::OpenNewObjectByNameL(const TDesC& /*aName*/)
       
    71 /**
       
    72  * Opening object(s) from RPacketContext is not supported.
       
    73  */
       
    74 	{
       
    75 	LOGTEXT(_L8("CGprsContextDGprsTsy: OpenNewObjectByNameL() method - Not supported"));
       
    76 
       
    77 	User::Leave(KErrNotSupported);
       
    78 	return NULL;
       
    79 	}
       
    80 
       
    81 CTelObject* CGprsContextDGprsTsy::OpenNewObjectL(TDes& aNewName)
       
    82 /**
       
    83  * A new QoS opened by a client from an existing context will have its name allocated by 
       
    84  * the TSY.
       
    85  */
       
    86 	{
       
    87 	LOGTEXT(_L8("CGprsContextDGprsTsy: OpenNewObjectL() method"));
       
    88 	aNewName.Append(_L("PACKET_QOS"));
       
    89 	aNewName.AppendNum(++iGprsQoSObjectCount);
       
    90 
       
    91 	return CGprsQoSDGprsTsy::NewL(FacPtr());
       
    92 	}
       
    93 
       
    94 CTelObject::TReqMode CGprsContextDGprsTsy::ReqModeL(const TInt aIpc)
       
    95 /**
       
    96  * ReqModeL is called from the server's CTelObject::ReqAnalyserL in order to check the 
       
    97  * type of request it has. The following are example request types for this dummy TSY
       
    98  * All TSYs do not have to have these request types but they have been given
       
    99  * "sensible" values in this dummy TSY code.
       
   100  */	
       
   101 	{
       
   102 	LOGTEXT(_L8("CGprsContextDGprsTsy: ReqModeL() method"));
       
   103 	CTelObject::TReqMode ret=0;
       
   104 	switch (aIpc)
       
   105 		{
       
   106 		case EPacketContextSetConfig:
       
   107 		case EPacketContextActivate:
       
   108 		case EPacketContextDeactivate:
       
   109 		case EPacketContextDelete:
       
   110 		case EPacketContextLoanCommPort:
       
   111 		case EPacketContextRecoverCommPort:
       
   112 		case EPacketContextGetConfig:
       
   113 		case EPacketContextGetStatus:
       
   114 		case EPacketContextGetDataVolumeTransferred:
       
   115 		case EPacketContextGetLastErrorCause:
       
   116 		case EPacketContextGetConnectionSpeed:
       
   117 		case EPacketContextGetProfileName:
       
   118 		case EPacketContextInitialiseContext:
       
   119 		case EPacketContextEnumeratePacketFilters:
       
   120 		case EPacketContextGetPacketFilterInfo:
       
   121 		case EPacketContextAddPacketFilter:
       
   122 		case EPacketContextRemovePacketFilter:
       
   123 		case EPacketContextModifyActiveContext:
       
   124 		case EPacketContextGetDNSInfo:
       
   125 		case EPacketContextCreateNewTFT:
       
   126 		case EPacketContextDeleteTFT:
       
   127 		case EPacketAddMediaAuthorization:
       
   128 		case EPacketRemoveMediaAuthorization:
       
   129 #ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   130         case EPacketContextGetConnectionInfo:            		    
       
   131 #endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   132 			break;
       
   133 
       
   134 		case EPacketContextNotifyConfigChanged:
       
   135 		case EPacketContextNotifyStatusChange:
       
   136 		case EPacketContextNotifyDataTransferred:
       
   137 		case EPacketContextNotifyConnectionSpeedChange:
       
   138 #ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   139         case EPacketContextNotifyConnectionInfoChange:           		    
       
   140 #endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   141 			ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
       
   142 			break;
       
   143 
       
   144 		default:
       
   145 			User::Leave(KErrNotSupported);
       
   146 			break;
       
   147 		}
       
   148 
       
   149 	return ret;
       
   150 	}
       
   151 
       
   152 TInt CGprsContextDGprsTsy::RegisterNotification(const TInt aIpc)
       
   153 /**
       
   154  * RegisterNotification is called when the server recognises that this notification
       
   155  * is being posted for the first time on this sub-session object.
       
   156  * It enables the TSY to "turn on" any regular notification messages that it may 
       
   157  * receive from the phone
       
   158  */
       
   159 	{
       
   160 	switch (aIpc)
       
   161 		{
       
   162 		case EPacketContextNotifyConfigChanged:
       
   163 			LOGTEXT(_L8("CGprsContextDGprsTsy: RegisterNotification - Config Changed"));
       
   164 			return KErrNone;
       
   165 		case EPacketContextNotifyStatusChange:
       
   166 			LOGTEXT(_L8("CGprsContextDGprsTsy: RegisterNotification - Status Change"));
       
   167 			return KErrNone;
       
   168 		case EPacketContextNotifyDataTransferred:
       
   169 			LOGTEXT(_L8("CGprsContextDGprsTsy: RegisterNotification - DataTransferred"));
       
   170 			return KErrNone;
       
   171 		case EPacketContextNotifyConnectionSpeedChange:
       
   172 			LOGTEXT(_L8("CGprsContextDGprsTsy: RegisterNotification - Connection Speed Change"));
       
   173 			return KErrNone;
       
   174 #ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   175         case EPacketContextNotifyConnectionInfoChange:
       
   176 			LOGTEXT(_L8("CGprsContextDGprsTsy: RegisterNotification - Connection Info Change"));
       
   177 			return KErrNone;                			
       
   178 #endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   179 		default:
       
   180 			// Unknown or invalid IPC
       
   181 			LOGTEXT(_L8("CGprsContextDGprsTsy: Register error, unknown IPC"));
       
   182 			return KErrNotSupported;
       
   183 		}
       
   184 	}
       
   185 
       
   186 TInt CGprsContextDGprsTsy::DeregisterNotification(const TInt aIpc)
       
   187 /**
       
   188  * DeregisterNotification is called when the server recognises that this notification
       
   189  * will not be posted again because the last client to have a handle on this sub-session
       
   190  * object has just closed the handle.
       
   191  * It enables the TSY to "turn off" any regular notification messages that it may 
       
   192  * receive from the phone.
       
   193  */
       
   194 	{
       
   195 	switch (aIpc)
       
   196 		{
       
   197 		case EPacketContextNotifyConfigChanged:
       
   198 			LOGTEXT(_L8("CGprsContextDGprsTsy: DeregisterNotification - Config Changed"));
       
   199 			return KErrNone;
       
   200 		case EPacketContextNotifyStatusChange:
       
   201 			LOGTEXT(_L8("CGprsContextDGprsTsy: DeregisterNotification - Status Change"));
       
   202 			return KErrNone;
       
   203 		case EPacketContextNotifyDataTransferred:
       
   204 			LOGTEXT(_L8("CGprsContextDGprsTsy: DeregisterNotification - DataTransferred"));
       
   205 			return KErrNone;
       
   206 		case EPacketContextNotifyConnectionSpeedChange:
       
   207 			LOGTEXT(_L8("CGprsContextDGprsTsy: DeregisterNotification - Connection Speed Change"));
       
   208 			return KErrNone;
       
   209 #ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   210 		case EPacketContextNotifyConnectionInfoChange:
       
   211 			LOGTEXT(_L8("CGprsContextDGprsTsy: DeregisterNotification - Connection Info Change"));
       
   212 			return KErrNone;						
       
   213 #endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   214 		default:
       
   215 			// Unknown or invalid IPC
       
   216 			LOGTEXT(_L8("CGprsContextDGprsTsy: Deregister error, unknown IPC"));
       
   217 			return KErrNotSupported;
       
   218 		}
       
   219 	}
       
   220 
       
   221 TInt CGprsContextDGprsTsy::NumberOfSlotsL(const TInt aIpc)
       
   222 /**
       
   223  * NumberOfSlotsL is called by the server when it is registering a new notification.
       
   224  * It enables the TSY to tell the server how many buffer slots to allocate for
       
   225  * "repost immediately" notifications that may trigger before clients collect them.
       
   226  */
       
   227 	{
       
   228 	TInt numberOfSlots=1;
       
   229 	switch (aIpc)
       
   230 		{
       
   231 		case EPacketContextNotifyConfigChanged:
       
   232 		case EPacketContextNotifyStatusChange:
       
   233 		case EPacketContextNotifyDataTransferred:
       
   234         case EPacketContextNotifyConnectionSpeedChange:
       
   235 #ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   236         case EPacketContextNotifyConnectionInfoChange:                        
       
   237 #endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   238 			LOGTEXT(_L8("CGprsDGprsTsy: Registered with 5 slots"));
       
   239 			numberOfSlots=5;
       
   240 			break;
       
   241 		default:
       
   242 			// Unknown or invalid IPC
       
   243 			LOGTEXT(_L8("CGprsContextDGprsTsy: Number of Slots error, unknown IPC"));
       
   244 			User::Leave(KErrNotSupported);
       
   245 			break;
       
   246 		}  
       
   247 	return numberOfSlots;
       
   248 	}
       
   249 
       
   250 
       
   251 TInt CGprsContextDGprsTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
       
   252 							  const TDataPackage& aPackage)
       
   253 /**
       
   254  * ExtFunc is called by the server when it has a "extended", i.e. non-core ETel request 
       
   255  * for the TSY to process. A request handle, request type and request data are passed 
       
   256  * to the TSY
       
   257  */
       
   258 	{
       
   259 	LOGTEXT(_L8("CGprsContextDGprsTsy: ExtFunc() called"));
       
   260 
       
   261 	TAny* dataPtr=aPackage.Ptr1();
       
   262 	TAny* dataPtr2=aPackage.Ptr2();
       
   263 
       
   264 	switch (aIpc)
       
   265 		{
       
   266 		case EPacketContextSetConfig:
       
   267 			return SetConfig(aTsyReqHandle, aPackage.Des1n());
       
   268 		case EPacketContextSetConfigCancel:
       
   269 			return SetConfigCancel(aTsyReqHandle);
       
   270 		case EPacketContextGetConfig:
       
   271 			return GetConfig(aTsyReqHandle, aPackage.Des1n());
       
   272 		case EPacketContextGetConfigCancel:
       
   273 			return GetConfigCancel(aTsyReqHandle);
       
   274 		case EPacketContextNotifyConfigChanged:
       
   275 			return NotifyConfigChanged(aTsyReqHandle, aPackage.Des1n());
       
   276 		case EPacketContextNotifyConfigChangedCancel:
       
   277 			return NotifyConfigChangedCancel(aTsyReqHandle);
       
   278 		case EPacketContextActivate:
       
   279 			return Activate(aTsyReqHandle);
       
   280 		case EPacketContextActivateCancel:
       
   281 			return ActivateCancel(aTsyReqHandle);
       
   282 		case EPacketContextDeactivate:
       
   283 			return Deactivate(aTsyReqHandle);
       
   284 		case EPacketContextDeactivateCancel:
       
   285 			return DeactivateCancel(aTsyReqHandle);
       
   286 		case EPacketContextDelete:
       
   287 			return Delete(aTsyReqHandle);
       
   288 		case EPacketContextDeleteCancel:
       
   289 			return DeleteCancel(aTsyReqHandle);
       
   290 		case EPacketContextLoanCommPort:
       
   291 			return LoanCommPort(aTsyReqHandle,
       
   292 			REINTERPRET_CAST(RCall::TCommPort*, dataPtr));
       
   293 		case EPacketContextLoanCommPortCancel:
       
   294 			return LoanCommPortCancel(aTsyReqHandle);
       
   295 		case EPacketContextRecoverCommPort:
       
   296 			return RecoverCommPort(aTsyReqHandle);
       
   297 		case EPacketContextRecoverCommPortCancel:
       
   298 			return RecoverCommPortCancel(aTsyReqHandle);
       
   299 		case EPacketContextGetStatus:
       
   300 			return GetStatus(aTsyReqHandle,
       
   301 			REINTERPRET_CAST(RPacketContext::TContextStatus*, dataPtr));
       
   302 		case EPacketContextNotifyStatusChange:
       
   303 			return NotifyStatusChange(aTsyReqHandle,
       
   304 			REINTERPRET_CAST(RPacketContext::TContextStatus*, dataPtr));
       
   305 		case EPacketContextNotifyStatusChangeCancel:
       
   306 			return NotifyStatusChangeCancel(aTsyReqHandle);
       
   307 		case EPacketContextGetDataVolumeTransferred:
       
   308 			return GetDataVolumeTransferred(aTsyReqHandle,
       
   309 			REINTERPRET_CAST(RPacketContext::TDataVolume*, dataPtr));
       
   310 		case EPacketContextGetDataVolumeTransferredCancel:
       
   311 			return GetDataVolumeTransferredCancel(aTsyReqHandle);
       
   312 		case EPacketContextGetConnectionSpeed:
       
   313 			return GetConnectionSpeed(aTsyReqHandle,
       
   314 				REINTERPRET_CAST(TUint*, dataPtr));
       
   315 		case EPacketContextNotifyConnectionSpeedChange:
       
   316 			return NotifyConnectionSpeedChange(aTsyReqHandle,
       
   317 				REINTERPRET_CAST(TUint*, dataPtr));
       
   318 		case EPacketContextNotifyDataTransferred:
       
   319 			return NotifyDataTransferred(aTsyReqHandle,
       
   320 			REINTERPRET_CAST(RPacketContext::TDataVolume*, dataPtr),
       
   321 			REINTERPRET_CAST(RPacketContext::TNotifyDataTransferredRequest*, dataPtr2));
       
   322 		case EPacketContextNotifyDataTransferredCancel:
       
   323 			return NotifyDataTransferredCancel(aTsyReqHandle);
       
   324 		case EPacketContextGetLastErrorCause:
       
   325 			return GetLastErrorCause(aTsyReqHandle,
       
   326 			REINTERPRET_CAST(TInt*, dataPtr));
       
   327 		case EPacketContextGetProfileName:
       
   328 			return GetProfileName(aTsyReqHandle,
       
   329 			REINTERPRET_CAST(TName*, dataPtr));
       
   330 		case EPacketContextInitialiseContext:
       
   331 			return InitialiseContext(aTsyReqHandle, aPackage.Des1n());
       
   332 		case EPacketContextInitialiseContextCancel:
       
   333 			return InitialiseContextCancel(aTsyReqHandle);
       
   334 		case EPacketContextEnumeratePacketFilters:
       
   335 			return EnumeratePacketFilters(aTsyReqHandle,
       
   336 				REINTERPRET_CAST(TInt*, dataPtr));
       
   337 		case EPacketContextEnumeratePacketFiltersCancel:
       
   338 			return EnumeratePacketFiltersCancel(aTsyReqHandle);
       
   339 		case EPacketContextGetPacketFilterInfo:
       
   340 			return GetPacketFilterInfo(aTsyReqHandle,
       
   341 				REINTERPRET_CAST(TInt*, dataPtr),
       
   342 				aPackage.Des2n());
       
   343 		case EPacketContextGetPacketFilterInfoCancel:
       
   344 			return GetPacketFilterInfoCancel(aTsyReqHandle);
       
   345 		case EPacketContextAddPacketFilter:
       
   346 			return AddPacketFilter(aTsyReqHandle, aPackage.Des1n());
       
   347 		case EPacketContextAddPacketFilterCancel:
       
   348 			return AddPacketFilterCancel(aTsyReqHandle);
       
   349 		case EPacketContextRemovePacketFilter:
       
   350 			return RemovePacketFilter(aTsyReqHandle,
       
   351 				REINTERPRET_CAST(TInt*, dataPtr));
       
   352 		case EPacketContextRemovePacketFilterCancel:
       
   353 			return RemovePacketFilterCancel(aTsyReqHandle);
       
   354 		case EPacketContextModifyActiveContext:
       
   355 			return ModifyActiveContext(aTsyReqHandle);
       
   356 		case EPacketContextModifyActiveContextCancel:
       
   357 			return ModifyActiveContextCancel(aTsyReqHandle);
       
   358 		case EPacketContextGetDNSInfo:
       
   359 			return GetDnsInfo(aTsyReqHandle, aPackage.Des1n());
       
   360 		case EPacketContextGetDNSInfoCancel:
       
   361 			return GetDnsInfoCancel(aTsyReqHandle);
       
   362 		case EPacketContextCreateNewTFT:  
       
   363 			return CreateNewTFT(aTsyReqHandle,
       
   364 				REINTERPRET_CAST(TInt*, dataPtr));
       
   365 		case EPacketContextDeleteTFT:
       
   366 			return DeleteTFT(aTsyReqHandle);
       
   367 		case EPacketAddMediaAuthorization:
       
   368 			return GetAddMediaAuthorization(aTsyReqHandle, aPackage.Des1n());
       
   369 		case EPacketAddMediaAuthorizationCancel:
       
   370 			return GetAddMediaAuthorizationCancel(aTsyReqHandle);
       
   371 		case EPacketRemoveMediaAuthorization:
       
   372 			return GetRemoveMediaAuthorization(aTsyReqHandle, reinterpret_cast<RPacketContext::TAuthorizationToken*>(dataPtr));
       
   373 		case EPacketRemoveMediaAuthorizationCancel:
       
   374 			return GetRemoveMediaAuthorizationCancel(aTsyReqHandle);
       
   375 #ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   376         case EPacketContextGetConnectionInfo:
       
   377             return GetConnectionInfo( aTsyReqHandle, aPackage.Des1n() ); 
       
   378         case EPacketContextNotifyConnectionInfoChange:
       
   379             return NotifyConnectionInfoChange( aTsyReqHandle, aPackage.Des1n() ); 			
       
   380 #endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   381 		default:
       
   382 			return KErrNotSupported;
       
   383 		}
       
   384 	}
       
   385 
       
   386 TInt CGprsContextDGprsTsy::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
       
   387 /**
       
   388  * CancelService is called by the server when it is "cleaning-up" any still outstanding
       
   389  * asynchronous requests before closing a client's sub-session.
       
   390  * This will happen if a client closes its R-class handle without cancelling outstanding
       
   391  * asynchronous requests.
       
   392  */
       
   393 	{
       
   394 	LOGTEXT(_L8("CGprsContextDGprsTsy: - CancelService called"));
       
   395 	switch (aIpc)
       
   396 		{
       
   397 		case EPacketContextSetConfig:
       
   398 			return SetConfigCancel(aTsyReqHandle);
       
   399 		case EPacketContextGetConfig:
       
   400 			return GetConfigCancel(aTsyReqHandle);
       
   401 		case EPacketContextNotifyConfigChanged:
       
   402 			return NotifyConfigChangedCancel(aTsyReqHandle);
       
   403 		case EPacketContextActivate:
       
   404 			return ActivateCancel(aTsyReqHandle);
       
   405 		case EPacketContextDeactivate:
       
   406 			return DeactivateCancel(aTsyReqHandle);
       
   407 		case EPacketContextDelete:
       
   408 			return DeleteCancel(aTsyReqHandle);
       
   409 		case EPacketContextLoanCommPort:
       
   410 			return LoanCommPortCancel(aTsyReqHandle);
       
   411 		case EPacketContextRecoverCommPort:
       
   412 			return RecoverCommPortCancel(aTsyReqHandle);
       
   413 		case EPacketContextNotifyStatusChange:
       
   414 			return NotifyStatusChangeCancel(aTsyReqHandle);
       
   415 		case EPacketContextNotifyDataTransferred:
       
   416 			return NotifyDataTransferredCancel(aTsyReqHandle);
       
   417 		case EPacketContextNotifyConnectionSpeedChange:
       
   418 			return NotifyConnectionSpeedChangeCancel(aTsyReqHandle);
       
   419 		case EPacketContextGetDataVolumeTransferred:
       
   420 			return GetDataVolumeTransferredCancel(aTsyReqHandle);
       
   421 		case EPacketContextInitialiseContext:
       
   422 			return InitialiseContextCancel(aTsyReqHandle);
       
   423 		case EPacketContextEnumeratePacketFilters:
       
   424 			return EnumeratePacketFiltersCancel(aTsyReqHandle);
       
   425 		case EPacketContextGetPacketFilterInfo:
       
   426 			return GetPacketFilterInfoCancel(aTsyReqHandle);
       
   427 		case EPacketContextAddPacketFilter:
       
   428 			return AddPacketFilterCancel(aTsyReqHandle);
       
   429 		case EPacketContextRemovePacketFilter:
       
   430 			return RemovePacketFilterCancel(aTsyReqHandle);
       
   431 		case EPacketContextModifyActiveContext:
       
   432 			return ModifyActiveContextCancel(aTsyReqHandle);
       
   433 		case EPacketContextGetDNSInfo:
       
   434 			return GetDnsInfoCancel(aTsyReqHandle);
       
   435 		case EPacketContextCreateNewTFT:
       
   436 			return CreateNewTFTCancel(aTsyReqHandle);
       
   437 		case EPacketContextDeleteTFT:
       
   438 			return DeleteTFTCancel(aTsyReqHandle);
       
   439 		case EPacketAddMediaAuthorization:
       
   440 			return GetAddMediaAuthorizationCancel(aTsyReqHandle);
       
   441 		case EPacketRemoveMediaAuthorization:
       
   442 			return GetRemoveMediaAuthorizationCancel(aTsyReqHandle);
       
   443 #ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   444         case EPacketContextGetConnectionInfo:
       
   445             return GetConnectionInfoCancel(aTsyReqHandle);
       
   446         case EPacketContextNotifyConnectionInfoChange:
       
   447             return NotifyConnectionInfoChangeCancel(aTsyReqHandle);            			
       
   448 #endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
   449 		default:
       
   450 			return KErrGeneral; 
       
   451 		} 
       
   452 	}
       
   453 
       
   454 /***********************************************************************************/
       
   455 //
       
   456 // The following methods are called from ExtFunc and/or CancelService.
       
   457 // Each of these will process a TSY request or cancel a TSY request
       
   458 // Here, example values are returned or checked within this dummy TSY in order to ensure
       
   459 // that the integrity of the data passed to/from client is maintained
       
   460 //
       
   461 /***********************************************************************************/
       
   462 
       
   463 TInt CGprsContextDGprsTsy::GetDnsInfo(const TTsyReqHandle aTsyReqHandle, const TDesC8* aDnsInfo)
       
   464 	{
       
   465 /**
       
   466  * GetDnsInfo method to extract DNS server names from context
       
   467  *
       
   468  * @param aStatus TRequestStatus object with which error code is returned
       
   469  * @param aDnsInfo packaged TDnsInfoV2 object passed as TDes8
       
   470  *
       
   471  * GetDNSInfo() is needed when the client uses dynamic IPv4 PDP addresses. 
       
   472  * After the context is activated the client needs to know the actual primary 
       
   473  * and secondary DNS addresses to use when sending packet data. As the network 
       
   474  * may have supplied these addresses there is a need for an API method to get 
       
   475  * these addresses from the TSY.
       
   476  */
       
   477 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetDnsInfo called"));
       
   478 	
       
   479 	User::After(300000); // wait to have KRequestPending
       
   480 	if(!iGetDNSInfo++)
       
   481 		{
       
   482 		RPacketContext::TTDnsInfoV2Pckg* dnsInfoV2Pckg = (RPacketContext::TTDnsInfoV2Pckg*)aDnsInfo;
       
   483 		RPacketContext::TDnsInfoV2& dnsInfoV2 = (*dnsInfoV2Pckg)();
       
   484 
       
   485 		dnsInfoV2.iPrimaryDns = DPCKTTSY_DNS_SERVER1;
       
   486 		dnsInfoV2.iSecondaryDns = DPCKTTSY_DNS_SERVER2;
       
   487 		ReqCompleted(aTsyReqHandle,KErrNone);
       
   488 		}
       
   489 	iTsyAsyncReqHandle = aTsyReqHandle;
       
   490 	return KErrNone;
       
   491 	}
       
   492 
       
   493 TInt CGprsContextDGprsTsy::GetDnsInfoCancel(const TTsyReqHandle aTsyReqHandle) 
       
   494 /**
       
   495  * GetDnsInfoCancel - Cancels an asynchronous GetDnsInfo method.
       
   496  */
       
   497 	{
       
   498 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetDnsInfoCancel called"));
       
   499 	User::After(300000); // wait to have KRequestPending
       
   500 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
   501 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
   502 	else
       
   503 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   504 	return KErrNone;
       
   505 	}
       
   506 
       
   507 
       
   508 TInt CGprsContextDGprsTsy::SetConfig(const TTsyReqHandle aTsyReqHandle,const TDesC8* aConfig)
       
   509 	{
       
   510 	LOGTEXT(_L8("CGprsContextDGprsTsy::SetConfig called"));
       
   511 
       
   512 	User::After(300000); // wait to have KRequestPending
       
   513 	TPckg<TPacketDataConfigBase>* configBasePckg = (TPckg<TPacketDataConfigBase>*)aConfig;
       
   514 	TPacketDataConfigBase& configBase = (*configBasePckg)();
       
   515 
       
   516 	// GPRS configuration
       
   517 	if(configBase.ExtensionId()==TPacketDataConfigBase::KConfigGPRS)
       
   518 		{
       
   519 		TPckg<RPacketContext::TContextConfigGPRS>* contextConfigGPRSPckg = (TPckg<RPacketContext::TContextConfigGPRS>*)aConfig;
       
   520 		RPacketContext::TContextConfigGPRS& contextConfig = (*contextConfigGPRSPckg)();
       
   521 		
       
   522 		if ((contextConfig.iAccessPointName != DPCKTTSY_ACCESS_POINT1)	
       
   523 			||(contextConfig.iAnonymousAccessReqd != DPCKTTSY_ANONYMOUS_ACCESS1)
       
   524 			||(contextConfig.iPdpAddress != DPCKTTSY_PDP_ADDRESS1)
       
   525 			||(contextConfig.iPdpCompression != DPCKTTSY_COMPRESSION1)
       
   526 			||(contextConfig.iPdpType != DPCKTTSY_PDP_TYPE1)
       
   527 			||(contextConfig.iUseEdge != DPCKTTSY_EGPRS_REQUIRED)
       
   528 			||(contextConfig.iProtocolConfigOption.iAuthInfo.iUsername != DPCKTTSY_USER_NAME1)
       
   529 			||(contextConfig.iProtocolConfigOption.iAuthInfo.iPassword != DPCKTTSY_PASSWORD1)
       
   530 			||(contextConfig.iProtocolConfigOption.iAuthInfo.iProtocol != DPCKTTSY_PROTOCOL_TYPE1_0))
       
   531 			ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   532 		else 
       
   533 			{
       
   534 			if(!iSetConfig++)
       
   535 				ReqCompleted(aTsyReqHandle,KErrNone);
       
   536 			else
       
   537 				iSetConfig = 0; //reset for V2 tests
       
   538 			iTsyAsyncReqHandle = aTsyReqHandle;
       
   539 			}
       
   540 		}
       
   541 	else if (configBase.ExtensionId()==TPacketDataConfigBase::KConfigRel99Rel4)
       
   542 		{
       
   543 		TPckg<RPacketContext::TContextConfigR99_R4>* configParam = (TPckg<RPacketContext::TContextConfigR99_R4>*)aConfig;
       
   544 		RPacketContext::TContextConfigR99_R4& contextConfig = (*configParam)();
       
   545 		
       
   546 		if(((contextConfig.iAccessPointName).Compare(DPCKTTSY_ACCESS_POINT1) != KErrNone) ||
       
   547 			   ((contextConfig.iPdpAddress).Compare(DPCKTTSY_PDP_ADDRESS1) != KErrNone) ||
       
   548 			   (contextConfig.iPdpType != DPCKTTSY_PDP_TYPE1) ||
       
   549 			   contextConfig.iUseEdge != DPCKTTSY_EGPRS_REQUIRED)
       
   550 				ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   551 		else
       
   552 			{
       
   553 			if(!iSetConfig++)
       
   554 				ReqCompleted(aTsyReqHandle,KErrNone);
       
   555 			else
       
   556 				iSetConfig = 0; //reset for V2 tests
       
   557 			iTsyAsyncReqHandle = aTsyReqHandle;
       
   558 			}
       
   559 		}
       
   560 	else if (configBase.ExtensionId()==TPacketDataConfigBase::TPacketDataConfigBase::KConfigRel5)
       
   561 		{
       
   562 		TPckg<RPacketContext::TContextConfig_R5>* configParam = (TPckg<RPacketContext::TContextConfig_R5>*)aConfig;
       
   563 		RPacketContext::TContextConfig_R5& contextConfig = (*configParam)();
       
   564 		
       
   565 		if(((contextConfig.iAccessPointName).Compare(DPCKTTSY_ACCESS_POINT1) != KErrNone) ||
       
   566 			((contextConfig.iPdpAddress).Compare(DPCKTTSY_PDP_ADDRESS1) != KErrNone) ||
       
   567 			(contextConfig.iPdpType != DPCKTTSY_PDP_TYPE1) ||
       
   568 			(contextConfig.iUseEdge != DPCKTTSY_EGPRS_REQUIRED) || 
       
   569 			(contextConfig.iPdpDataCompression != DPCKTTSY_DATACOMPRESSION_EV42) ||
       
   570 			(contextConfig.iPdpHeaderCompression != DPCKTTSY_HEADERCOMPRESSION_ERFC1144))
       
   571 				ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   572 		else
       
   573 			{
       
   574 			if(!iSetConfig++)
       
   575 				ReqCompleted(aTsyReqHandle,KErrNone);
       
   576 			else
       
   577 				iSetConfig = 0; //reset for V2 tests
       
   578 			iTsyAsyncReqHandle = aTsyReqHandle;
       
   579 			}
       
   580 		}
       
   581 	else if(configBase.ExtensionId()==TPacketDataConfigBase::KConfigMBMS)
       
   582 		{
       
   583 		TPckg<RPacketMbmsContext::TContextConfigMbmsV1>* contextConfigMbmsPckg = (TPckg<RPacketMbmsContext::TContextConfigMbmsV1>*)aConfig;
       
   584 		RPacketMbmsContext::TContextConfigMbmsV1& contextConfig = (*contextConfigMbmsPckg)();
       
   585 		
       
   586 		if ((contextConfig.iMbmsAccessBearer != DPCKTTSY_MBMS_ACCESSBEARER_ONE)	
       
   587 			||(contextConfig.iMbmsServicePriority != DPCKTTSY_MBMS_SERVICEPRIORITY_ONE)
       
   588 			||(contextConfig.iMbmsServiceMode != DPCKTTSY_MBMS_SERVICEMODE_ONE)
       
   589 			||(contextConfig.iMbmsSessionFlag != DPCKTTSY_MBMS_SESSION_FLAG_TRUE)
       
   590 			||(contextConfig.iTmgi.GetMCC() != DPCKTTSY_MBMS_MCC_ONE)
       
   591 			||(contextConfig.iTmgi.GetMNC() != DPCKTTSY_MBMS_MNC_ONE)
       
   592 			||(contextConfig.iTmgi.GetServiceId() != DPCKTTSY_MBMS_SERVICEID_ONE))
       
   593 			ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   594 		else
       
   595 			{
       
   596 			if(!iSetConfig++)
       
   597 				{
       
   598 				ReqCompleted(aTsyReqHandle,KErrNone);
       
   599 				}
       
   600 			else
       
   601 				{
       
   602 				iSetConfig = 0; //reset for V2 tests
       
   603 				}
       
   604 			iTsyAsyncReqHandle = aTsyReqHandle;
       
   605 			}
       
   606 		}
       
   607 		
       
   608 	return KErrNone;
       
   609 	}
       
   610 
       
   611 TInt CGprsContextDGprsTsy::SetConfigCancel(const TTsyReqHandle aTsyReqHandle)
       
   612 	{
       
   613 	LOGTEXT(_L8("CGprsContextDGprsTsy::SetConfigCancel called"));
       
   614 	User::After(300000); // wait to have KRequestPending
       
   615 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
   616 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
   617 	else
       
   618 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   619 	return KErrNone;
       
   620 	}
       
   621 
       
   622 TInt CGprsContextDGprsTsy::GetConfig(const TTsyReqHandle aTsyReqHandle,TDes8* aConfig)
       
   623 	{
       
   624 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetConfig called"));
       
   625 
       
   626 	User::After(300000); // wait to have KRequestPending
       
   627 	TPckg<TPacketDataConfigBase>* configBasePckg = (TPckg<TPacketDataConfigBase>*)aConfig;
       
   628 	TPacketDataConfigBase& configBase = (*configBasePckg)();
       
   629 
       
   630 	if(!iGetConfig++)
       
   631 		{
       
   632 		if(configBase.ExtensionId()==TPacketDataConfigBase::KConfigGPRS)
       
   633 			{
       
   634 			
       
   635 			TPckg<RPacketContext::TContextConfigGPRS>* contextConfigGPRSPckg = (TPckg<RPacketContext::TContextConfigGPRS>*)aConfig;
       
   636 			RPacketContext::TContextConfigGPRS& contextConfig = (*contextConfigGPRSPckg)();
       
   637 
       
   638 			contextConfig.iAccessPointName = DPCKTTSY_ACCESS_POINT2;
       
   639 			contextConfig.iAnonymousAccessReqd = DPCKTTSY_ANONYMOUS_ACCESS2;
       
   640 			contextConfig.iPdpAddress = DPCKTTSY_PDP_ADDRESS2;
       
   641 			contextConfig.iPdpCompression = DPCKTTSY_COMPRESSION2;
       
   642 			contextConfig.iPdpType = DPCKTTSY_PDP_TYPE2;
       
   643 			contextConfig.iUseEdge = DPCKTTSY_EGPRS_NOTREQUIRED;
       
   644 			contextConfig.iProtocolConfigOption.iAuthInfo.iUsername = DPCKTTSY_USER_NAME1;
       
   645 			contextConfig.iProtocolConfigOption.iAuthInfo.iPassword = DPCKTTSY_PASSWORD1;
       
   646 			contextConfig.iProtocolConfigOption.iAuthInfo.iProtocol = DPCKTTSY_PROTOCOL_TYPE1_0;
       
   647 			contextConfig.iNWIContext = DPCKTTSY_NWICONTEXT_TRUE;
       
   648 			
       
   649 			ReqCompleted(aTsyReqHandle,KErrNone);
       
   650 			}
       
   651 		else if (configBase.ExtensionId()==TPacketDataConfigBase::KConfigRel99Rel4)
       
   652 			{
       
   653 			TPckg<RPacketContext::TContextConfigR99_R4>* contextConfigR99Pckg = (TPckg<RPacketContext::TContextConfigR99_R4>*)aConfig;
       
   654 			RPacketContext::TContextConfigR99_R4& contextConfig = (*contextConfigR99Pckg)();
       
   655 
       
   656 			contextConfig.iAccessPointName = DPCKTTSY_ACCESS_POINT2;
       
   657 			contextConfig.iPdpAddress = DPCKTTSY_PDP_ADDRESS2;
       
   658 			contextConfig.iPdpType = DPCKTTSY_PDP_TYPE2;
       
   659 			contextConfig.iUseEdge = DPCKTTSY_EGPRS_NOTREQUIRED;
       
   660 			contextConfig.iProtocolConfigOption.iAuthInfo.iUsername = DPCKTTSY_USER_NAME1;
       
   661 			contextConfig.iProtocolConfigOption.iAuthInfo.iPassword = DPCKTTSY_PASSWORD1;
       
   662 			contextConfig.iProtocolConfigOption.iAuthInfo.iProtocol = DPCKTTSY_PROTOCOL_TYPE1_0;
       
   663 			contextConfig.iNWIContext = DPCKTTSY_NWICONTEXT_TRUE;
       
   664 			contextConfig.iPFI = DPCKTTSY_PFICONTEXT_SMS;
       
   665 			
       
   666 			ReqCompleted(aTsyReqHandle,KErrNone);
       
   667 			}
       
   668 		else if (configBase.ExtensionId()==TPacketDataConfigBase::KConfigRel5)
       
   669 			{
       
   670 			TPckg<RPacketContext::TContextConfig_R5>* contextConfigR5Pckg = (TPckg<RPacketContext::TContextConfig_R5>*)aConfig;
       
   671 			RPacketContext::TContextConfig_R5& contextConfig = (*contextConfigR5Pckg)();
       
   672 
       
   673 			contextConfig.iAccessPointName = DPCKTTSY_ACCESS_POINT2;
       
   674 			contextConfig.iPdpAddress = DPCKTTSY_PDP_ADDRESS2;
       
   675 			contextConfig.iPdpType = DPCKTTSY_PDP_TYPE2;
       
   676 			contextConfig.iUseEdge = DPCKTTSY_EGPRS_NOTREQUIRED;
       
   677 			contextConfig.iProtocolConfigOption.iAuthInfo.iUsername = DPCKTTSY_USER_NAME1;
       
   678 			contextConfig.iProtocolConfigOption.iAuthInfo.iPassword = DPCKTTSY_PASSWORD1;
       
   679 			contextConfig.iProtocolConfigOption.iAuthInfo.iProtocol = DPCKTTSY_PROTOCOL_TYPE1_0;
       
   680 			contextConfig.iNWIContext = DPCKTTSY_NWICONTEXT_TRUE;
       
   681 			contextConfig.iPFI = DPCKTTSY_PFICONTEXT_SMS;
       
   682 			contextConfig.iPdpDataCompression = DPCKTTSY_DATACOMPRESSION_EV44;
       
   683 			contextConfig.iPdpHeaderCompression = DPCKTTSY_HEADERCOMPRESSION_ERFC2507;
       
   684 			
       
   685 			ReqCompleted(aTsyReqHandle,KErrNone);
       
   686 			}
       
   687 		else if(configBase.ExtensionId()==TPacketDataConfigBase::KConfigMBMS)
       
   688 			{
       
   689 			
       
   690 			TPckg<RPacketMbmsContext::TContextConfigMbmsV1>* contextConfigMbmsPckg = (TPckg<RPacketMbmsContext::TContextConfigMbmsV1>*)aConfig;
       
   691 			RPacketMbmsContext::TContextConfigMbmsV1& contextConfig = (*contextConfigMbmsPckg)();
       
   692 
       
   693 			contextConfig.iMbmsAccessBearer = DPCKTTSY_MBMS_ACCESSBEARER_ONE;	
       
   694 			contextConfig.iMbmsServicePriority = DPCKTTSY_MBMS_SERVICEPRIORITY_ONE;
       
   695 			contextConfig.iMbmsServiceMode = DPCKTTSY_MBMS_SERVICEMODE_ONE;
       
   696 			contextConfig.iTmgi.SetMCC(DPCKTTSY_MBMS_MCC_ONE);
       
   697 			contextConfig.iTmgi.SetMNC(DPCKTTSY_MBMS_MNC_ONE);
       
   698 			contextConfig.iTmgi.SetServiceId(DPCKTTSY_MBMS_SERVICEID_ONE);
       
   699 
       
   700 			ReqCompleted(aTsyReqHandle,KErrNone);
       
   701 			}	
       
   702 		}
       
   703 	iTsyAsyncReqHandle = aTsyReqHandle;
       
   704 	return KErrNone;
       
   705 	}
       
   706 
       
   707 TInt CGprsContextDGprsTsy::GetConfigCancel(const TTsyReqHandle aTsyReqHandle)
       
   708 	{
       
   709 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetConfigCancel called"));
       
   710 	User::After(300000); // wait to have KRequestPending
       
   711 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
   712 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
   713 	else
       
   714 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   715 	return KErrNone;
       
   716 	}
       
   717 
       
   718 TInt CGprsContextDGprsTsy::NotifyConfigChanged(const TTsyReqHandle aTsyReqHandle, TDes8* aConfig)
       
   719 	{
       
   720 	TPckg<TPacketDataConfigBase>* configBasePckg = (TPckg<TPacketDataConfigBase>*)aConfig;
       
   721 	TPacketDataConfigBase& configBase = (*configBasePckg)();
       
   722 
       
   723 	LOGTEXT(_L8("CGprsContextDGprsTsy::NotifyConfigChanged called"));
       
   724 
       
   725 	User::After(300000); // wait to have KRequestPending
       
   726 	if (!iNotifyConfigChanged++)
       
   727 		{
       
   728 		if(configBase.ExtensionId()==TPacketDataConfigBase::KConfigGPRS)
       
   729 			{
       
   730 			TPckg<RPacketContext::TContextConfigGPRS>* contextConfigGPRSPckg = (TPckg<RPacketContext::TContextConfigGPRS>*)aConfig;
       
   731 			RPacketContext::TContextConfigGPRS& contextConfigV1 = (*contextConfigGPRSPckg)();
       
   732 
       
   733 			contextConfigV1.iAccessPointName = DPCKTTSY_ACCESS_POINT1;
       
   734 			contextConfigV1.iAnonymousAccessReqd = DPCKTTSY_ANONYMOUS_ACCESS1;
       
   735 			contextConfigV1.iPdpAddress = DPCKTTSY_PDP_ADDRESS1;
       
   736 			contextConfigV1.iPdpCompression = DPCKTTSY_COMPRESSION1;
       
   737 			contextConfigV1.iPdpType = DPCKTTSY_PDP_TYPE1;
       
   738 			contextConfigV1.iUseEdge = DPCKTTSY_EGPRS_REQUIRED;
       
   739 			contextConfigV1.iProtocolConfigOption.iAuthInfo.iUsername = DPCKTTSY_USER_NAME1;
       
   740 			contextConfigV1.iProtocolConfigOption.iAuthInfo.iPassword = DPCKTTSY_PASSWORD1;
       
   741 			contextConfigV1.iProtocolConfigOption.iAuthInfo.iProtocol = DPCKTTSY_PROTOCOL_TYPE1_0;
       
   742 			contextConfigV1.iNWIContext = DPCKTTSY_NWICONTEXT_TRUE;
       
   743 
       
   744 			ReqCompleted(aTsyReqHandle,KErrNone);
       
   745 			}
       
   746 		else if (configBase.ExtensionId()==TPacketDataConfigBase::KConfigRel99Rel4)
       
   747 			{
       
   748 			TPckg<RPacketContext::TContextConfigR99_R4>* contextConfigR99Pckg = (TPckg<RPacketContext::TContextConfigR99_R4>*)aConfig;
       
   749 			RPacketContext::TContextConfigR99_R4& contextConfigV1 = (*contextConfigR99Pckg)();
       
   750 
       
   751 			contextConfigV1.iAccessPointName = DPCKTTSY_ACCESS_POINT1;
       
   752 			contextConfigV1.iPdpAddress = DPCKTTSY_PDP_ADDRESS1;
       
   753 			contextConfigV1.iPdpType = DPCKTTSY_PDP_TYPE1;
       
   754 			contextConfigV1.iUseEdge = DPCKTTSY_EGPRS_REQUIRED;
       
   755 			contextConfigV1.iProtocolConfigOption.iAuthInfo.iUsername = DPCKTTSY_USER_NAME1;
       
   756 			contextConfigV1.iProtocolConfigOption.iAuthInfo.iPassword = DPCKTTSY_PASSWORD1;
       
   757 			contextConfigV1.iProtocolConfigOption.iAuthInfo.iProtocol = DPCKTTSY_PROTOCOL_TYPE1_0;
       
   758 			contextConfigV1.iNWIContext = DPCKTTSY_NWICONTEXT_TRUE;
       
   759 			contextConfigV1.iPFI = DPCKTTSY_PFICONTEXT_SIG;
       
   760 
       
   761 			ReqCompleted(aTsyReqHandle,KErrNone);
       
   762 			}
       
   763 		else if (configBase.ExtensionId()==TPacketDataConfigBase::KConfigRel5)
       
   764 			{
       
   765 			TPckg<RPacketContext::TContextConfig_R5>* contextConfigR5Pckg = (TPckg<RPacketContext::TContextConfig_R5>*)aConfig;
       
   766 			RPacketContext::TContextConfig_R5& contextConfigV1 = (*contextConfigR5Pckg)();
       
   767 
       
   768 			contextConfigV1.iAccessPointName = DPCKTTSY_ACCESS_POINT1;
       
   769 			contextConfigV1.iPdpAddress = DPCKTTSY_PDP_ADDRESS1;
       
   770 			contextConfigV1.iPdpType = DPCKTTSY_PDP_TYPE1;
       
   771 			contextConfigV1.iUseEdge = DPCKTTSY_EGPRS_REQUIRED;
       
   772 			contextConfigV1.iProtocolConfigOption.iAuthInfo.iUsername = DPCKTTSY_USER_NAME1;
       
   773 			contextConfigV1.iProtocolConfigOption.iAuthInfo.iPassword = DPCKTTSY_PASSWORD1;
       
   774 			contextConfigV1.iProtocolConfigOption.iAuthInfo.iProtocol = DPCKTTSY_PROTOCOL_TYPE1_0;
       
   775 			contextConfigV1.iNWIContext = DPCKTTSY_NWICONTEXT_TRUE;
       
   776 			contextConfigV1.iPFI = DPCKTTSY_PFICONTEXT_SIG;
       
   777 			contextConfigV1.iPdpDataCompression = DPCKTTSY_DATACOMPRESSION_EV42;
       
   778 			contextConfigV1.iPdpHeaderCompression = DPCKTTSY_HEADERCOMPRESSION_ERFC1144;
       
   779 
       
   780 			ReqCompleted(aTsyReqHandle,KErrNone);
       
   781 			}
       
   782 		else if(configBase.ExtensionId()==TPacketDataConfigBase::KConfigMBMS)
       
   783 			{
       
   784 			TPckg<RPacketMbmsContext::TContextConfigMbmsV1>* contextConfigMbmsPckg = (TPckg<RPacketMbmsContext::TContextConfigMbmsV1>*)aConfig;
       
   785 			RPacketMbmsContext::TContextConfigMbmsV1& contextConfig = (*contextConfigMbmsPckg)();
       
   786 
       
   787 			contextConfig.iMbmsAccessBearer = DPCKTTSY_MBMS_ACCESSBEARER_ONE;	
       
   788 			contextConfig.iMbmsServicePriority = DPCKTTSY_MBMS_SERVICEPRIORITY_ONE;
       
   789 			contextConfig.iMbmsServiceMode = DPCKTTSY_MBMS_SERVICEMODE_ONE;
       
   790 			contextConfig.iTmgi.SetMCC(DPCKTTSY_MBMS_MCC_ONE);
       
   791 			contextConfig.iTmgi.SetMNC(DPCKTTSY_MBMS_MNC_ONE);
       
   792 			contextConfig.iTmgi.SetServiceId(DPCKTTSY_MBMS_SERVICEID_ONE);
       
   793 
       
   794 			ReqCompleted(aTsyReqHandle,KErrNone);
       
   795 			}	
       
   796 		}
       
   797 	iTsyAsyncReqHandle = aTsyReqHandle;
       
   798 	return KErrNone;
       
   799 	}
       
   800 
       
   801 TInt CGprsContextDGprsTsy::NotifyConfigChangedCancel(const TTsyReqHandle aTsyReqHandle)
       
   802 	{
       
   803 	LOGTEXT(_L8("CGprsContextDGprsTsy::NotifyConfigChangedCancel called"));
       
   804 	User::After(300000); // wait to have KRequestPending
       
   805 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
   806 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
   807 	else
       
   808 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   809 	return KErrNone;
       
   810 	}
       
   811 
       
   812 TInt CGprsContextDGprsTsy::Deactivate(const TTsyReqHandle aTsyReqHandle)
       
   813 	{
       
   814 	LOGTEXT(_L8("CGprsContextDGprsTsy::Deactivate called"));
       
   815 	User::After(300000); // wait to have KRequestPending
       
   816 	if(!iDeactivate++)
       
   817 		ReqCompleted(aTsyReqHandle,KErrNone);
       
   818 	iTsyAsyncReqHandle = aTsyReqHandle;
       
   819 	return KErrNone;
       
   820 	}
       
   821 
       
   822 TInt CGprsContextDGprsTsy::DeactivateCancel(const TTsyReqHandle aTsyReqHandle)
       
   823 	{
       
   824 	LOGTEXT(_L8("CGprsContextDGprsTsy::DeactivateCancel called"));
       
   825 	User::After(300000); // wait to have KRequestPending
       
   826 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
   827 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
   828 	else
       
   829 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   830 	return KErrNone;
       
   831 	}
       
   832 	
       
   833 TInt CGprsContextDGprsTsy::Activate(const TTsyReqHandle aTsyReqHandle)
       
   834 	{
       
   835 	LOGTEXT(_L8("CGprsContextDGprsTsy::Activate called"));
       
   836 	User::After(300000); // wait to have KRequestPending
       
   837 	if(!iActivate++)
       
   838 		ReqCompleted(aTsyReqHandle,KErrNone);
       
   839 	iTsyAsyncReqHandle = aTsyReqHandle;
       
   840 	return KErrNone;
       
   841 	}
       
   842 
       
   843 TInt CGprsContextDGprsTsy::ActivateCancel(const TTsyReqHandle aTsyReqHandle)
       
   844 	{
       
   845 	LOGTEXT(_L8("CGprsContextDGprsTsy::ActivateCancel called"));
       
   846 	User::After(300000); // wait to have KRequestPending
       
   847 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
   848 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
   849 	else
       
   850 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   851 	return KErrNone;
       
   852 	}
       
   853 
       
   854 TInt CGprsContextDGprsTsy::Delete(const TTsyReqHandle aTsyReqHandle)
       
   855 	{
       
   856 	LOGTEXT(_L8("CGprsContextDGprsTsy::Delete called"));
       
   857 	User::After(300000); // wait to have KRequestPending
       
   858 	if(!iDelete++)
       
   859 		ReqCompleted(aTsyReqHandle,KErrNone);
       
   860 	iTsyAsyncReqHandle = aTsyReqHandle;
       
   861 	return KErrNone;
       
   862 	}
       
   863 
       
   864 TInt CGprsContextDGprsTsy::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
       
   865 	{
       
   866 	LOGTEXT(_L8("CGprsContextDGprsTsy::DeleteCancel called"));
       
   867 	User::After(300000); // wait to have KRequestPending
       
   868 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
   869 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
   870 	else
       
   871 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   872 	return KErrNone;
       
   873 	}
       
   874 
       
   875 TInt CGprsContextDGprsTsy::LoanCommPort(const TTsyReqHandle aTsyReqHandle,RCall::TCommPort* aDataPort)
       
   876 	{
       
   877 	LOGTEXT(_L8("CGprsContextDGprsTsy::LoanCommPort called"));
       
   878 	User::After(300000); // wait to have KRequestPending
       
   879 	if(!iLoanCommPort++)
       
   880 		{
       
   881 		aDataPort->iCsy = DPCKTTSY_CSY;
       
   882 		aDataPort->iPort = DPCKTTSY_PORT;
       
   883 		ReqCompleted(aTsyReqHandle,KErrNone);
       
   884 		}
       
   885 	iTsyAsyncReqHandle = aTsyReqHandle;
       
   886 	return KErrNone;
       
   887 	}
       
   888 
       
   889 TInt CGprsContextDGprsTsy::LoanCommPortCancel(const TTsyReqHandle aTsyReqHandle)
       
   890 	{
       
   891 	LOGTEXT(_L8("CGprsContextDGprsTsy::LoanCommPortCancel called"));
       
   892 	User::After(300000); // wait to have KRequestPending
       
   893 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
   894 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
   895 	else
       
   896 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   897 	return KErrNone;
       
   898 	}
       
   899 
       
   900 TInt CGprsContextDGprsTsy::RecoverCommPort(const TTsyReqHandle aTsyReqHandle)
       
   901 	{
       
   902 	LOGTEXT(_L8("CGprsContextDGprsTsy::RecoverCommPort called"));
       
   903 	User::After(300000); // wait to have KRequestPending
       
   904 	if(!iRecoverCommPort++)
       
   905 		ReqCompleted(aTsyReqHandle,KErrNone);
       
   906 	iTsyAsyncReqHandle = aTsyReqHandle;
       
   907 	return KErrNone;
       
   908 	}
       
   909 
       
   910 TInt CGprsContextDGprsTsy::RecoverCommPortCancel(const TTsyReqHandle aTsyReqHandle)	
       
   911 	{
       
   912 	LOGTEXT(_L8("CGprsContextDGprsTsy::RecoverCommPortCancel called"));
       
   913 	User::After(300000); // wait to have KRequestPending
       
   914 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
   915 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
   916 	else
       
   917 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   918 	return KErrNone;
       
   919 	}
       
   920 
       
   921 TInt CGprsContextDGprsTsy::GetStatus(const TTsyReqHandle aTsyReqHandle,RPacketContext::TContextStatus* aContextStatus)
       
   922 	{
       
   923 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetStatus called"));
       
   924 	User::After(300000); // wait to have KRequestPending
       
   925 	*aContextStatus = DPCKTTSY_CONTEXT_STATUS1;
       
   926 	ReqCompleted(aTsyReqHandle,KErrNone);
       
   927 	return KErrNone;
       
   928 	}
       
   929 
       
   930 TInt CGprsContextDGprsTsy::NotifyStatusChange(const TTsyReqHandle aTsyReqHandle,RPacketContext::TContextStatus* aContextStatus)
       
   931 	{
       
   932 	User::After(300000); // wait to have KRequestPending
       
   933 	if (!iNotifyStatusChange++)
       
   934 		{
       
   935 		LOGTEXT(_L8("CGprsContextDGprsTsy::NotifyStatusChange called"));
       
   936 		*aContextStatus = DPCKTTSY_CONTEXT_STATUS2;
       
   937 		ReqCompleted(aTsyReqHandle,KErrNone);
       
   938 		}
       
   939 	iTsyAsyncReqHandle = aTsyReqHandle;
       
   940 	return KErrNone;
       
   941 	}
       
   942 
       
   943 TInt CGprsContextDGprsTsy::NotifyStatusChangeCancel(const TTsyReqHandle aTsyReqHandle)
       
   944 	{
       
   945 	LOGTEXT(_L8("CGprsContextDGprsTsy::NotifyStatusChangeCancel called"));
       
   946 	User::After(300000); // wait to have KRequestPending
       
   947 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
   948 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
   949 	else
       
   950 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
   951 	return KErrNone;
       
   952 	}
       
   953 
       
   954 TInt CGprsContextDGprsTsy::GetProfileName(const TTsyReqHandle aTsyReqHandle, TName* aQosProfile)
       
   955 	{
       
   956 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetProfileName called"));
       
   957 	User::After(300000); // wait to have KRequestPending
       
   958 	*aQosProfile = DPCKTTSY_PROFILE_NAME;
       
   959 	ReqCompleted(aTsyReqHandle, KErrNone);
       
   960 	return KErrNone;
       
   961 	}
       
   962 
       
   963 
       
   964 TInt CGprsContextDGprsTsy::GetDataVolumeTransferred(const TTsyReqHandle aTsyReqHandle, RPacketContext::TDataVolume* aVolume)
       
   965 /** 
       
   966  * GetDataVolumeTransferred method - Returns the volume of data transferred.
       
   967  * A synchronous and asynchronous variant of this method is now supported - Change 
       
   968  * Request: NDOE-58VF4Q. In the test code, the synchronous method is called first.
       
   969  * Note that the synchronous variant is deprecated.
       
   970  * In the switch statement, cases 0 and 1 implement the synchronous call, while cases 2 and 
       
   971  * 3 implement the asynchronous call.
       
   972  */
       
   973 	{
       
   974 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetDataVolumeTransferred called"));
       
   975 	
       
   976 //	User::After(300000); // wait to have KRequestPending
       
   977 	switch (iGetDataVolumeTransferred++)
       
   978 		{
       
   979 		case 0:
       
   980 		case 1:
       
   981 			aVolume->iBytesSent = DPCKTTSY_BYTES_SENT1;
       
   982 			aVolume->iOverflowCounterSent = DPCKTTSY_OVERFLOW_COUNTER_SENT1;
       
   983 			aVolume->iBytesReceived = DPCKTTSY_BYTES_RCVD1;
       
   984 			aVolume->iOverflowCounterReceived = DPCKTTSY_OVERFLOW_COUNTER_RCVD1;
       
   985 	
       
   986 			ReqCompleted(aTsyReqHandle,KErrNone);
       
   987 			break;
       
   988 		case 2:
       
   989 			aVolume->iBytesSent = DPCKTTSY_BYTES_SENT3;
       
   990 			aVolume->iOverflowCounterSent = DPCKTTSY_OVERFLOW_COUNTER_SENT3;
       
   991 			aVolume->iBytesReceived = DPCKTTSY_BYTES_RCVD3;
       
   992 			aVolume->iOverflowCounterReceived = DPCKTTSY_OVERFLOW_COUNTER_RCVD3;
       
   993 			ReqCompleted(aTsyReqHandle,KErrNone);
       
   994 		case 3:
       
   995 			iTsyAsyncReqHandle = aTsyReqHandle;
       
   996 			break;
       
   997 		default:
       
   998 			LOGTEXT(_L8("CGprsContextDGprsTsy::GetDataVolumeTransferred - Error in switch statement"));
       
   999 			break;
       
  1000 		} // switch
       
  1001 
       
  1002 	return KErrNone;
       
  1003 	}
       
  1004 
       
  1005 TInt CGprsContextDGprsTsy::GetDataVolumeTransferredCancel(const TTsyReqHandle aTsyReqHandle)
       
  1006 	{
       
  1007 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetDataVolumeTransferredCancel called"));
       
  1008 	User::After(300000); // wait to have KRequestPending
       
  1009 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1010 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1011 	else
       
  1012 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1013 	return KErrNone;
       
  1014 	}
       
  1015 
       
  1016 TInt CGprsContextDGprsTsy::GetConnectionSpeed(const TTsyReqHandle aTsyReqHandle,TUint* aRate)
       
  1017 	{
       
  1018 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetConnectionSpeed called"));
       
  1019 	User::After(300000); // wait to have KRequestPending
       
  1020 	*aRate = DPCKTTSY_CONNECTION_RATE;
       
  1021 	ReqCompleted(aTsyReqHandle,KErrNone);
       
  1022 	return KErrNone;
       
  1023 	}
       
  1024 
       
  1025 TInt CGprsContextDGprsTsy::NotifyConnectionSpeedChange(const TTsyReqHandle aTsyReqHandle, TUint* aRate)
       
  1026 	{
       
  1027 	User::After(300000); // wait to have KRequestPending
       
  1028 	if (!iNotifySpeedChange++)
       
  1029 		{
       
  1030 		LOGTEXT(_L8("CGprsContextDGprsTsy::NotifyStatusChange called"));
       
  1031 			*aRate = DPCKTTSY_CONNECTION_RATE;
       
  1032 			ReqCompleted(aTsyReqHandle,KErrNone);
       
  1033 		}
       
  1034     	iTsyAsyncReqHandle = aTsyReqHandle;
       
  1035 		return KErrNone;
       
  1036 	}
       
  1037 
       
  1038 TInt CGprsContextDGprsTsy::NotifyConnectionSpeedChangeCancel(const TTsyReqHandle aTsyReqHandle)
       
  1039 	{
       
  1040 	LOGTEXT(_L8("CGprsContextDGprsTsy::NotifyConnectionSpeedChangeCancel called"));
       
  1041 	User::After(300000); // wait to have KRequestPending
       
  1042 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1043 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1044 	else
       
  1045 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1046 	return KErrNone;
       
  1047 	}
       
  1048 
       
  1049 TInt CGprsContextDGprsTsy::NotifyDataTransferred(const TTsyReqHandle aTsyReqHandle, RPacketContext::TDataVolume* aVolume, RPacketContext::TNotifyDataTransferredRequest* aData)
       
  1050 	{
       
  1051 	User::After(300000); // wait to have KRequestPending
       
  1052 	if ((aData->iRcvdGranularity != DPCKTTSY_RCVD_GRANULARITY) ||
       
  1053 		(aData->iSentGranularity != DPCKTTSY_SENT_GRANULARITY))
       
  1054 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1055 	else
       
  1056 		{
       
  1057 		if (!iNotifyDataTransferred++)
       
  1058 			{
       
  1059 			LOGTEXT(_L8("CGprsContextDGprsTsy::NotifyStatusChange called"));
       
  1060 			aVolume->iBytesSent = DPCKTTSY_BYTES_SENT2;
       
  1061 			aVolume->iOverflowCounterSent = DPCKTTSY_OVERFLOW_COUNTER_SENT2;
       
  1062 			aVolume->iBytesReceived = DPCKTTSY_BYTES_RCVD2;
       
  1063 			aVolume->iOverflowCounterReceived = DPCKTTSY_OVERFLOW_COUNTER_RCVD2;
       
  1064 			ReqCompleted(aTsyReqHandle,KErrNone);
       
  1065 			}
       
  1066 		iTsyAsyncReqHandle = aTsyReqHandle;
       
  1067 		}
       
  1068 	return KErrNone;
       
  1069 	}
       
  1070 
       
  1071 TInt CGprsContextDGprsTsy::NotifyDataTransferredCancel(const TTsyReqHandle aTsyReqHandle)
       
  1072 	{
       
  1073 	LOGTEXT(_L8("CGprsContextDGprsTsy::NotifyDataTransferredCancel called"));
       
  1074 	User::After(300000); // wait to have KRequestPending
       
  1075 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1076 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1077 	else
       
  1078 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1079 	return KErrNone;
       
  1080 	}
       
  1081 
       
  1082 TInt CGprsContextDGprsTsy::GetLastErrorCause(const TTsyReqHandle aTsyReqHandle,TInt* aError)
       
  1083 	{
       
  1084 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetLastErrorCause called"));
       
  1085 	User::After(300000); // wait to have KRequestPending
       
  1086 	*aError = DPCKTTSY_LAST_ERROR_CAUSE;
       
  1087 	ReqCompleted(aTsyReqHandle,KErrNone);
       
  1088 	return KErrNone;
       
  1089 	}
       
  1090 
       
  1091 TInt CGprsContextDGprsTsy::InitialiseContext(const TTsyReqHandle aTsyReqHandle, TDes8* aDataChannel)
       
  1092 /**
       
  1093  * InitialiseContext method - Enables asynchronous resource reservation.
       
  1094  */
       
  1095 	{
       
  1096 	LOGTEXT(_L8("CGprsContextDGprsTsy::InitialiseContext called"));
       
  1097 
       
  1098 	User::After(300000); // wait to have KRequestPending
       
  1099 	RPacketContext::TDataChannelV2Pckg* dataChannelV2Pckg = (RPacketContext::TDataChannelV2Pckg*)aDataChannel;
       
  1100 	RPacketContext::TDataChannelV2& dataChannelV2 = (*dataChannelV2Pckg)();
       
  1101 
       
  1102 	if(!iInitialiseContext++)
       
  1103 		{
       
  1104 		dataChannelV2.iCsy = DPCKTTSY_CSY_ASYNC;
       
  1105 		dataChannelV2.iPort = DPCKTTSY_PORT_ASYNC;
       
  1106 		dataChannelV2.iChannelId = DPCKTTSY_CHANNEL_ID;
       
  1107 		ReqCompleted(aTsyReqHandle,KErrNone);
       
  1108 		}
       
  1109 	iTsyAsyncReqHandle = aTsyReqHandle;
       
  1110 
       
  1111 	return KErrNone;
       
  1112 	}
       
  1113 
       
  1114 TInt CGprsContextDGprsTsy::InitialiseContextCancel(const TTsyReqHandle aTsyReqHandle)
       
  1115 /**
       
  1116  * InitialiseContextCancel - Cancels an asynchronous InitialiseContext() request.
       
  1117  */
       
  1118 	{
       
  1119 	LOGTEXT(_L8("CGprsContextDGprsTsy::InitialiseContextCancel called"));
       
  1120 	User::After(300000); // wait to have KRequestPending
       
  1121 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1122 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1123 	else
       
  1124 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1125 	return KErrNone;
       
  1126 	}
       
  1127 
       
  1128 TInt CGprsContextDGprsTsy::EnumeratePacketFilters(const TTsyReqHandle aTsyReqHandle, TInt* aCount)
       
  1129 /** 
       
  1130  * EnumeratePacketFilters method - Sets the number of packet filters
       
  1131  */
       
  1132 	{
       
  1133 	LOGTEXT(_L8("CGprsContextDGprsTsy::EnumeratePacketFilters called"));
       
  1134 	
       
  1135 	User::After(300000); // wait to have KRequestPending
       
  1136 	if (!iEnumeratePacketFilters++)
       
  1137 		{
       
  1138 		*aCount = DPCKTTSY_NUMBER_OF_PACKET_FILTERS;
       
  1139 		ReqCompleted(aTsyReqHandle,KErrNone);
       
  1140 		}
       
  1141 	
       
  1142 	iTsyAsyncReqHandle = aTsyReqHandle;
       
  1143 	
       
  1144 	return KErrNone;
       
  1145 	}
       
  1146 
       
  1147 TInt CGprsContextDGprsTsy::EnumeratePacketFiltersCancel(const TTsyReqHandle aTsyReqHandle)
       
  1148 /**
       
  1149  * EnumeratePacketFiltersCancel - Cancels asynchronous EnumeratePacketFilters request.
       
  1150  */
       
  1151 	{
       
  1152 	LOGTEXT(_L8("CGprsContextDGprsTsy::EnumeratePacketFiltersCancel called"));
       
  1153 	User::After(300000); // wait to have KRequestPending
       
  1154 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1155 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1156 	else
       
  1157 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1158 	return KErrNone;
       
  1159 	}
       
  1160 	
       
  1161 TInt CGprsContextDGprsTsy::GetPacketFilterInfo(const TTsyReqHandle aTsyReqHandle,TInt* aIndex, TDes8* aPacketFilterInfo)
       
  1162 /**
       
  1163  * GetPacketFilterInfo method - Sets Packet filter information.
       
  1164  */
       
  1165 	{
       
  1166 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetPacketFilterInfo called"));
       
  1167 	
       
  1168 	TPckg<TPacketBase>* packetFilterBasePckg = (TPckg<TPacketBase>*)aPacketFilterInfo;
       
  1169 	TPacketBase& packetFilterBase = (*packetFilterBasePckg)();
       
  1170 
       
  1171 	if (packetFilterBase.ExtensionId() == KETelExtPcktV2)
       
  1172 		{
       
  1173 
       
  1174 		User::After(300000); // wait to have KRequestPending
       
  1175 		RPacketContext::TPacketFilterV2Pckg* packetFilterV2Pckg = (RPacketContext::TPacketFilterV2Pckg*)aPacketFilterInfo;
       
  1176 		RPacketContext::TPacketFilterV2& packetFilterV2 = (*packetFilterV2Pckg)();
       
  1177 		
       
  1178 		if(!iGetPacketFilterInfo++)
       
  1179 			{
       
  1180 			switch (*aIndex)
       
  1181 				{
       
  1182 				case 1:
       
  1183 					packetFilterV2.iId=DPCKTTSY_FILTER_ID1;
       
  1184 					packetFilterV2.iEvaluationPrecedenceIndex=DPCKTTSY_EVALUATION_PRECEDENCE_INDEX1;
       
  1185 					
       
  1186 					packetFilterV2.iSrcAddr[0]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_0;
       
  1187 					packetFilterV2.iSrcAddr[1]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_1;
       
  1188 					packetFilterV2.iSrcAddr[2]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_2;
       
  1189 					packetFilterV2.iSrcAddr[3]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_3;
       
  1190 					
       
  1191 					packetFilterV2.iSrcAddrSubnetMask[0]=DPCKTTSY_DOMAIN_SUBNET_MASK1_0;
       
  1192 					packetFilterV2.iSrcAddrSubnetMask[1]=DPCKTTSY_DOMAIN_SUBNET_MASK1_1;
       
  1193 					packetFilterV2.iSrcAddrSubnetMask[2]=DPCKTTSY_DOMAIN_SUBNET_MASK1_2;
       
  1194 					packetFilterV2.iSrcAddrSubnetMask[3]=DPCKTTSY_DOMAIN_SUBNET_MASK1_3;
       
  1195 					packetFilterV2.iProtocolNumberOrNextHeader=DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER1;
       
  1196 					packetFilterV2.iSrcPortMin=DPCKTTSY_MINIMUM_SOURCE_PORT_NUMBER1;
       
  1197 					packetFilterV2.iSrcPortMax=DPCKTTSY_MAXIMUM_SOURCE_PORT_NUMBER1;
       
  1198 					packetFilterV2.iDestPortMin=DPCKTTSY_MINIMUM_DESTINATION_PORT_NUMBER1;
       
  1199 					packetFilterV2.iDestPortMax=DPCKTTSY_MAXIMUM_DESTINATION_PORT_NUMBER1;
       
  1200 					packetFilterV2.iTOSorTrafficClass=DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS1;
       
  1201 					
       
  1202 					ReqCompleted(aTsyReqHandle,KErrNone);
       
  1203 					break;
       
  1204 				case 2:
       
  1205 					packetFilterV2.iId=DPCKTTSY_FILTER_ID2;
       
  1206 					packetFilterV2.iEvaluationPrecedenceIndex=DPCKTTSY_EVALUATION_PRECEDENCE_INDEX2;
       
  1207 					
       
  1208 					packetFilterV2.iSrcAddr[0]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_0;
       
  1209 					packetFilterV2.iSrcAddr[1]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_1;
       
  1210 					packetFilterV2.iSrcAddr[2]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_2;
       
  1211 					packetFilterV2.iSrcAddr[3]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_3;
       
  1212 					
       
  1213 					packetFilterV2.iSrcAddrSubnetMask[0]=DPCKTTSY_DOMAIN_SUBNET_MASK2_0;
       
  1214 					packetFilterV2.iSrcAddrSubnetMask[1]=DPCKTTSY_DOMAIN_SUBNET_MASK2_1;
       
  1215 					packetFilterV2.iSrcAddrSubnetMask[2]=DPCKTTSY_DOMAIN_SUBNET_MASK2_2;
       
  1216 					packetFilterV2.iSrcAddrSubnetMask[3]=DPCKTTSY_DOMAIN_SUBNET_MASK2_3;
       
  1217 					
       
  1218 					packetFilterV2.iProtocolNumberOrNextHeader=DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER2;
       
  1219 					packetFilterV2.iIPSecSPI=DPCKTTSY_SECURITY_PARAMETER_INDEX2;
       
  1220 					packetFilterV2.iTOSorTrafficClass=DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS2;
       
  1221 
       
  1222 					ReqCompleted(aTsyReqHandle,KErrNone);
       
  1223 					break;
       
  1224 				default:
       
  1225 					ReqCompleted(aTsyReqHandle,KErrArgument);
       
  1226 					break;
       
  1227 				} //switch
       
  1228 			} // if
       
  1229 		}// First if
       
  1230 	
       
  1231 	if (packetFilterBase.ExtensionId() == KETelExtPcktV3)
       
  1232 		{
       
  1233 		User::After(300000); // wait to have KRequestPending
       
  1234 		RPacketContext::TPacketFilterV3Pckg* packetFilterV3Pckg = (RPacketContext::TPacketFilterV3Pckg*)aPacketFilterInfo;
       
  1235 		RPacketContext::TPacketFilterV3& packetFilterV3 = (*packetFilterV3Pckg)();
       
  1236 		
       
  1237 		RPacketContext::TPacketFilterV3 packetFilterV3a(RPacketContext::EPacketFilterTypeOne);
       
  1238 		RPacketContext::TPacketFilterV3 packetFilterV3b(RPacketContext::EPacketFilterTypeTwo);
       
  1239 		
       
  1240 		RPacketContext::TIPAddress srcAddr;
       
  1241 		RPacketContext::TIPAddress srcAddrSubnetMask;
       
  1242 		switch(*aIndex)
       
  1243 			{
       
  1244 			case 3:
       
  1245 				TInt ii;
       
  1246 				for (ii=0; ii<sizeof(RPacketContext::TIPAddress); ii++)
       
  1247 					{
       
  1248 					srcAddr[ii] = 0;	
       
  1249 					}
       
  1250 				srcAddr[0]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_0;
       
  1251 				srcAddr[1]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_1;
       
  1252 				srcAddr[2]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_2;
       
  1253 				srcAddr[3]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_3;
       
  1254 			
       
  1255 				for (ii=0; ii<sizeof(RPacketContext::TIPAddress); ii++)
       
  1256 					{
       
  1257 					srcAddrSubnetMask[ii] = 0;	
       
  1258 					}						
       
  1259 				srcAddrSubnetMask[0]=DPCKTTSY_DOMAIN_SUBNET_MASK1_0;
       
  1260 				srcAddrSubnetMask[1]=DPCKTTSY_DOMAIN_SUBNET_MASK1_1;
       
  1261 				srcAddrSubnetMask[2]=DPCKTTSY_DOMAIN_SUBNET_MASK1_2;
       
  1262 				srcAddrSubnetMask[3]=DPCKTTSY_DOMAIN_SUBNET_MASK1_3;
       
  1263 							
       
  1264 				packetFilterV3a.SetSrcAddr(srcAddr);
       
  1265 				packetFilterV3a.SetSrcAddrSubnetMask(srcAddrSubnetMask);
       
  1266 				packetFilterV3a.SetProtocolNumberOrNextHeader(DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER1);
       
  1267 				packetFilterV3a.SetSrcPortMin(DPCKTTSY_MINIMUM_SOURCE_PORT_NUMBER1);
       
  1268 				packetFilterV3a.SetSrcPortMax(DPCKTTSY_MAXIMUM_SOURCE_PORT_NUMBER1);
       
  1269 				packetFilterV3a.SetDestPortMin(DPCKTTSY_MINIMUM_DESTINATION_PORT_NUMBER1);
       
  1270 				packetFilterV3a.SetDestPortMax(DPCKTTSY_MAXIMUM_DESTINATION_PORT_NUMBER1);
       
  1271 				packetFilterV3a.SetTOSorTrafficClass(DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS1);
       
  1272 				
       
  1273 				packetFilterV3 = packetFilterV3a;
       
  1274 						
       
  1275 				ReqCompleted(aTsyReqHandle,KErrNone);
       
  1276 				break;
       
  1277 			
       
  1278 			case 4:
       
  1279 				srcAddr[0]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_0;
       
  1280 				srcAddr[1]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_1;
       
  1281 				srcAddr[2]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_2;
       
  1282 				srcAddr[3]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_3;
       
  1283 					
       
  1284 				srcAddrSubnetMask[0]=DPCKTTSY_DOMAIN_SUBNET_MASK2_0;
       
  1285 				srcAddrSubnetMask[1]=DPCKTTSY_DOMAIN_SUBNET_MASK2_1;
       
  1286 				srcAddrSubnetMask[2]=DPCKTTSY_DOMAIN_SUBNET_MASK2_2;
       
  1287 				srcAddrSubnetMask[3]=DPCKTTSY_DOMAIN_SUBNET_MASK2_3;
       
  1288 				
       
  1289 				packetFilterV3b.SetSrcAddr(srcAddr);
       
  1290 				packetFilterV3b.SetSrcAddrSubnetMask(srcAddrSubnetMask);
       
  1291 				packetFilterV3b.SetProtocolNumberOrNextHeader(DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER2);
       
  1292 				packetFilterV3b.SetSPI(DPCKTTSY_SECURITY_PARAMETER_INDEX2);
       
  1293 				packetFilterV3b.SetTOSorTrafficClass(DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS2);
       
  1294 				
       
  1295 				packetFilterV3 = packetFilterV3b;
       
  1296 						
       
  1297 				ReqCompleted(aTsyReqHandle,KErrNone);
       
  1298 				break;
       
  1299 				
       
  1300 			default:
       
  1301 				ReqCompleted(aTsyReqHandle,KErrArgument);
       
  1302 				break;
       
  1303 			}//Switch
       
  1304 		}// If 
       
  1305 	
       
  1306 	iTsyAsyncReqHandle = aTsyReqHandle;
       
  1307 
       
  1308 	return KErrNone;
       
  1309 	}
       
  1310 
       
  1311 TInt CGprsContextDGprsTsy::GetPacketFilterInfoCancel(const TTsyReqHandle aTsyReqHandle) 
       
  1312 /**
       
  1313  * GetPacketFilterInfoCancel - Cancels an asynchronous GetPacketFilterInfo method.
       
  1314  */
       
  1315 	{
       
  1316 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetPacketFilterInfoCancel called"));
       
  1317 	User::After(300000); // wait to have KRequestPending
       
  1318 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1319 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1320 	else
       
  1321 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1322 	return KErrNone;
       
  1323 	}
       
  1324 
       
  1325 TInt CGprsContextDGprsTsy::AddPacketFilter(const TTsyReqHandle aTsyReqHandle,const TDesC8* aPacketFilter)
       
  1326 /**
       
  1327  * AddPacketFilter method - Sets the packet filter information.
       
  1328  */
       
  1329 	{
       
  1330 	LOGTEXT(_L8("CGprsContextDGprsTsy::AddPacketFilter called"));
       
  1331 		
       
  1332 	TPckg<TPacketBase>* packetFilterBasePckg = (TPckg<TPacketBase>*)aPacketFilter;
       
  1333 	TPacketBase& packetFilterBase = (*packetFilterBasePckg)();
       
  1334 	
       
  1335 	if (packetFilterBase.ExtensionId() == KETelExtPcktV2)
       
  1336 		{
       
  1337 		User::After(300000); // wait to have KRequestPending
       
  1338 		RPacketContext::TPacketFilterV2Pckg* packetFilterV2Pckg = (RPacketContext::TPacketFilterV2Pckg*)aPacketFilter;
       
  1339 		RPacketContext::TPacketFilterV2& packetFilterV2 = (*packetFilterV2Pckg)();
       
  1340 
       
  1341 		if(!iAddPacketFilter++)
       
  1342 			{
       
  1343 			if ((packetFilterV2.iId<0) || (packetFilterV2.iId>8))
       
  1344 				ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1345 			else
       
  1346 				ReqCompleted(aTsyReqHandle,KErrNone);
       
  1347 			}
       
  1348 		
       
  1349 		}
       
  1350 	if (packetFilterBase.ExtensionId() == KETelExtPcktV3)
       
  1351 		{
       
  1352 		User::After(300000); // wait to have KRequestPending
       
  1353 		RPacketContext::TPacketFilterV3Pckg* packetFilterV3Pckg = (RPacketContext::TPacketFilterV3Pckg*)aPacketFilter;
       
  1354 		RPacketContext::TPacketFilterV3& packetFilterV3 = (*packetFilterV3Pckg)();
       
  1355 		
       
  1356 		RPacketContext::TIPAddress srcAddr;
       
  1357 		RPacketContext::TIPAddress srcAddrSubnetMask;
       
  1358 		
       
  1359 		TInt ii;
       
  1360 		for (ii=0; ii<sizeof(RPacketContext::TIPAddress); ii++)
       
  1361 			{
       
  1362 			srcAddr[ii] = 0;	
       
  1363 			}
       
  1364 		srcAddr[0]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_0;
       
  1365 		srcAddr[1]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_1;
       
  1366 		srcAddr[2]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_2;
       
  1367 		srcAddr[3]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_3;
       
  1368 		
       
  1369 		for (ii=0; ii<sizeof(RPacketContext::TIPAddress); ii++)
       
  1370 			{
       
  1371 			srcAddrSubnetMask[ii] = 0;	
       
  1372 			}					
       
  1373 		srcAddrSubnetMask[0]=DPCKTTSY_DOMAIN_SUBNET_MASK1_0;
       
  1374 		srcAddrSubnetMask[1]=DPCKTTSY_DOMAIN_SUBNET_MASK1_1;
       
  1375 		srcAddrSubnetMask[2]=DPCKTTSY_DOMAIN_SUBNET_MASK1_2;
       
  1376 		srcAddrSubnetMask[3]=DPCKTTSY_DOMAIN_SUBNET_MASK1_3;
       
  1377 				
       
  1378 		switch(iAddPacketFilter++)
       
  1379 			{
       
  1380 			case 2:
       
  1381 				if ((packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcAddr)) &&
       
  1382 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcAddrSubnetMask)) &&
       
  1383 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterProtocolNumberOrNextHeader)) && 
       
  1384 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcPortMin)) && 
       
  1385 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcPortMax)) && 
       
  1386 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterDestPortMin)) &&
       
  1387 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterDestPortMax)) && 
       
  1388 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterIPSecSPI)) && 
       
  1389 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterTOSorTrafficClass)) && 
       
  1390 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterFlowLabel)))
       
  1391 					{
       
  1392 					if ((packetFilterV3.iId>=0) && (packetFilterV3.iId<8) &&
       
  1393 						(packetFilterV3.iEvaluationPrecedenceIndex>=0) && (packetFilterV3.iEvaluationPrecedenceIndex<255) &&
       
  1394 						!(Mem::Compare(packetFilterV3.SrcAddr(),sizeof(RPacketContext::TIPAddress),srcAddr,sizeof(RPacketContext::TIPAddress))) &&
       
  1395 						!(Mem::Compare(packetFilterV3.SrcAddrSubnetMask(),sizeof(RPacketContext::TIPAddress),srcAddrSubnetMask,sizeof(RPacketContext::TIPAddress))) &&
       
  1396 						(packetFilterV3.ProtocolNumberOrNextHeader() == DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER1) &&
       
  1397 						(packetFilterV3.SrcPortMin() == DPCKTTSY_MINIMUM_SOURCE_PORT_NUMBER1) &&
       
  1398 						(packetFilterV3.SrcPortMax() == DPCKTTSY_MAXIMUM_SOURCE_PORT_NUMBER1) &&
       
  1399 						(packetFilterV3.DestPortMin() == DPCKTTSY_MINIMUM_DESTINATION_PORT_NUMBER1) &&
       
  1400 						(packetFilterV3.DestPortMax() == DPCKTTSY_MAXIMUM_DESTINATION_PORT_NUMBER1) &&
       
  1401 						(packetFilterV3.TOSorTrafficClass() == DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS1))
       
  1402 						{
       
  1403 						ReqCompleted(aTsyReqHandle,KErrNone);
       
  1404 						}
       
  1405 					else
       
  1406 						{
       
  1407 						ReqCompleted(aTsyReqHandle,KErrCorrupt);	
       
  1408 						}
       
  1409 					}
       
  1410 				else
       
  1411 					{
       
  1412 					ReqCompleted(aTsyReqHandle,KErrCorrupt);	
       
  1413 					}
       
  1414 				break;
       
  1415 					
       
  1416 			case 3:
       
  1417 				if ((packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcAddr)) &&
       
  1418 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcAddrSubnetMask)) &&
       
  1419 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterProtocolNumberOrNextHeader)) && 
       
  1420 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcPortMin)) && 
       
  1421 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcPortMax)) && 
       
  1422 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterDestPortMin)) &&
       
  1423 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterDestPortMax)) && 
       
  1424 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterIPSecSPI)) && 
       
  1425 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterTOSorTrafficClass)) && 
       
  1426 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterFlowLabel)))
       
  1427 					{
       
  1428 					if ((packetFilterV3.iId>=0) && (packetFilterV3.iId<8) &&
       
  1429 						(packetFilterV3.iEvaluationPrecedenceIndex>=0) && (packetFilterV3.iEvaluationPrecedenceIndex<255) &&
       
  1430 						!(Mem::Compare(packetFilterV3.SrcAddr(),sizeof(RPacketContext::TIPAddress),srcAddr,sizeof(RPacketContext::TIPAddress))) &&
       
  1431 						!(Mem::Compare(packetFilterV3.SrcAddrSubnetMask(),sizeof(RPacketContext::TIPAddress),srcAddrSubnetMask,sizeof(RPacketContext::TIPAddress))) &&
       
  1432 						(packetFilterV3.ProtocolNumberOrNextHeader() == DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER1) &&
       
  1433 						(packetFilterV3.SPI() == DPCKTTSY_SECURITY_PARAMETER_INDEX2) &&
       
  1434 						(packetFilterV3.TOSorTrafficClass() == DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS1))
       
  1435 						{
       
  1436 						ReqCompleted(aTsyReqHandle,KErrNone);
       
  1437 						}
       
  1438 					else
       
  1439 						{
       
  1440 						ReqCompleted(aTsyReqHandle,KErrCorrupt);	
       
  1441 						}
       
  1442 					}
       
  1443 				else
       
  1444 					{
       
  1445 					ReqCompleted(aTsyReqHandle,KErrCorrupt);	
       
  1446 					}
       
  1447 				break;
       
  1448 					
       
  1449 			case 4:
       
  1450 				if ((packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcAddr)) &&
       
  1451 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcAddrSubnetMask)) &&
       
  1452 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterProtocolNumberOrNextHeader)) && 
       
  1453 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcPortMin)) && 
       
  1454 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcPortMax)) && 
       
  1455 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterDestPortMin)) &&
       
  1456 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterDestPortMax)) && 
       
  1457 					(!packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterIPSecSPI)) && 
       
  1458 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterTOSorTrafficClass)) && 
       
  1459 					(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterFlowLabel)))
       
  1460 					{
       
  1461 					if ((packetFilterV3.iId>=0) && (packetFilterV3.iId<8) &&
       
  1462 						(packetFilterV3.iEvaluationPrecedenceIndex>=0) && (packetFilterV3.iEvaluationPrecedenceIndex<255) &&
       
  1463 						!(Mem::Compare(packetFilterV3.SrcAddr(),sizeof(RPacketContext::TIPAddress),srcAddr,sizeof(RPacketContext::TIPAddress))) &&
       
  1464 						!(Mem::Compare(packetFilterV3.SrcAddrSubnetMask(),sizeof(RPacketContext::TIPAddress),srcAddrSubnetMask,sizeof(RPacketContext::TIPAddress))) &&
       
  1465 						(packetFilterV3.TOSorTrafficClass() == DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS1) &&
       
  1466 						(packetFilterV3.FlowLabel() == DPCKTTSY_FLOW_LABEL))
       
  1467 						{
       
  1468 						ReqCompleted(aTsyReqHandle,KErrNone);
       
  1469 						}
       
  1470 					else
       
  1471 						{
       
  1472 						ReqCompleted(aTsyReqHandle,KErrCorrupt);	
       
  1473 						}
       
  1474 					}
       
  1475 				else
       
  1476 					{
       
  1477 					ReqCompleted(aTsyReqHandle,KErrCorrupt);	
       
  1478 					}
       
  1479 				break;
       
  1480 			
       
  1481 			case 5:
       
  1482 				break;
       
  1483 				
       
  1484 			default:
       
  1485 				ReqCompleted(aTsyReqHandle,KErrArgument);
       
  1486 				break;
       
  1487 			} //switch
       
  1488 		} //if
       
  1489 		
       
  1490 	
       
  1491 	iTsyAsyncReqHandle = aTsyReqHandle;
       
  1492 	return KErrNone;
       
  1493 	}
       
  1494 
       
  1495 TInt CGprsContextDGprsTsy::AddPacketFilterCancel(const TTsyReqHandle aTsyReqHandle)
       
  1496 /**
       
  1497  * AddPacketFilterInfoCancel - Cancels an asynchronous AddPacketFilterInfo request.
       
  1498  */
       
  1499 	{
       
  1500 	LOGTEXT(_L8("CGprsContextDGprsTsy::AddPacketFilterCancel called"));
       
  1501 	User::After(300000); // wait to have KRequestPending
       
  1502 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1503 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1504 	else
       
  1505 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1506 	return KErrNone;
       
  1507 	}
       
  1508 
       
  1509 TInt CGprsContextDGprsTsy::RemovePacketFilter(const TTsyReqHandle aTsyReqHandle, TInt* aId)
       
  1510 /**
       
  1511  * RemovePacketFilter - removes the packet filter depending on the index argument.
       
  1512  */
       
  1513 	{
       
  1514 	LOGTEXT(_L8("CGprsContextDGprsTsy::RemovePacketFilter called"));
       
  1515 
       
  1516 	User::After(300000); // wait to have KRequestPending
       
  1517 	if(!iRemovePacketFilter++)
       
  1518 		{
       
  1519 			if ((*aId<0) || (*aId>8))
       
  1520 				ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1521 			else
       
  1522 				ReqCompleted(aTsyReqHandle,KErrNone);
       
  1523 		}
       
  1524 
       
  1525 	iTsyAsyncReqHandle = aTsyReqHandle;
       
  1526 
       
  1527 	return KErrNone;
       
  1528 	}
       
  1529 
       
  1530 TInt CGprsContextDGprsTsy::RemovePacketFilterCancel(const TTsyReqHandle aTsyReqHandle)
       
  1531 /**
       
  1532  * RemovePacketFilterCancel - Cancels an asynchronous RemovePacketFilter method.
       
  1533  */
       
  1534 	{
       
  1535 	LOGTEXT(_L8("CGprsContextDGprsTsy::RemovePacketFilterCancel called"));
       
  1536 	User::After(300000); // wait to have KRequestPending
       
  1537 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1538 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1539 	else
       
  1540 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1541 	return KErrNone;
       
  1542 	}
       
  1543 
       
  1544 TInt CGprsContextDGprsTsy::ModifyActiveContext(const TTsyReqHandle aTsyReqHandle)
       
  1545 /**
       
  1546  * ModifyActiveContext method.
       
  1547  */
       
  1548 	{
       
  1549 	LOGTEXT(_L8("CGprsContextDGprsTsy::ModifyActiveContext called"));
       
  1550 
       
  1551 	User::After(300000); // wait to have KRequestPending
       
  1552 	if(!iModifyActiveContext++)
       
  1553 		ReqCompleted(aTsyReqHandle,KErrNone);
       
  1554 
       
  1555 	iTsyAsyncReqHandle = aTsyReqHandle;
       
  1556 
       
  1557 	return KErrNone;
       
  1558 	}
       
  1559 
       
  1560 TInt CGprsContextDGprsTsy::ModifyActiveContextCancel(const TTsyReqHandle aTsyReqHandle)
       
  1561 /**
       
  1562  * ModifyActiveContextCancel - Cancels an asynchronous ModifyActiveContext request.
       
  1563  */
       
  1564 	{
       
  1565 	LOGTEXT(_L8("CGprsContextDGprsTsy::ModifyActiveContextCancel called"));
       
  1566 	User::After(300000); // wait to have KRequestPending
       
  1567 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1568 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1569 	else
       
  1570 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1571 	return KErrNone;
       
  1572 	}
       
  1573 
       
  1574 TInt CGprsContextDGprsTsy::CreateNewTFT(const TTsyReqHandle aTsyReqHandle,const TInt* aSize)
       
  1575 /**
       
  1576  * CreateNewTFT - create new Traffic Flow Template (TFT)
       
  1577  */
       
  1578 	{
       
  1579 	LOGTEXT(_L8("CGprsDGprsTsy::CreateNewTFT called"));
       
  1580 	User::After(300000); // wait to have KRequestPending
       
  1581 	if (!iCreateNewTFT++)
       
  1582 		{
       
  1583 		
       
  1584 		if (*aSize != DPCKTTSY_TFT_NO_FILTERS)
       
  1585 			ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1586 		else
       
  1587 			ReqCompleted(aTsyReqHandle,KErrNone);
       
  1588 		}	
       
  1589 	iTsyAsyncReqHandle = aTsyReqHandle;
       
  1590 	return KErrNone;
       
  1591 	}
       
  1592 	
       
  1593 TInt CGprsContextDGprsTsy::CreateNewTFTCancel(const TTsyReqHandle aTsyReqHandle) 
       
  1594 /**
       
  1595  * CreateNewTFTCancel - Cancels an asynchronous CreateNewTFT request
       
  1596  */
       
  1597 	{
       
  1598 	LOGTEXT(_L8("CGprsDGprsTsy::CreateNewTFTCancel called"));
       
  1599 	User::After(300000); // wait to have KRequestPending
       
  1600 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1601 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1602 	else
       
  1603 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1604 	return KErrNone;
       
  1605 	}
       
  1606 	
       
  1607 TInt CGprsContextDGprsTsy::DeleteTFT(const TTsyReqHandle aTsyReqHandle)
       
  1608 /**
       
  1609  * DeleteTFT - delete TFT
       
  1610  */
       
  1611 	{
       
  1612 	LOGTEXT(_L8("CGprsDGprsTsy::DeleteTFT called"));
       
  1613 	User::After(300000); // wait to have KRequestPending
       
  1614 	if (!iDeleteTFT++)
       
  1615 		{
       
  1616 		ReqCompleted(aTsyReqHandle,KErrNone);
       
  1617 		}	
       
  1618 	iTsyAsyncReqHandle = aTsyReqHandle;
       
  1619 	return KErrNone;	
       
  1620 	}
       
  1621 	
       
  1622 TInt CGprsContextDGprsTsy::DeleteTFTCancel(const TTsyReqHandle aTsyReqHandle) 
       
  1623 /**
       
  1624  * CreateNewTFTCancel - Cancels an asynchronous CreateNewTFT request
       
  1625  */
       
  1626 	{
       
  1627 	LOGTEXT(_L8("CGprsDGprsTsy::DeleteTFTCancel called"));
       
  1628 	User::After(300000); // wait to have KRequestPending
       
  1629 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1630 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1631 	else
       
  1632 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1633 	return KErrNone;
       
  1634 	}
       
  1635 
       
  1636 TInt CGprsContextDGprsTsy::GetAddMediaAuthorization(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
       
  1637 	{
       
  1638 	LOGTEXT(_L8("CGprsDGprsTsy::GetAddMediaAuthorization called"));
       
  1639 	User::After(300000); // wait to have KRequestPending
       
  1640 	
       
  1641 	if(!iAddMediaAuthorization++)
       
  1642 		{
       
  1643 		RPacketContext::CTFTMediaAuthorizationV3* iMediaAuthV3 = RPacketContext::CTFTMediaAuthorizationV3::NewL();
       
  1644 		CleanupStack::PushL(iMediaAuthV3);
       
  1645 		iMediaAuthV3->InternalizeL(*aBuffer);
       
  1646 		
       
  1647 
       
  1648 		if (!(iMediaAuthV3->iAuthorizationToken).Compare(DPCKTTSY_AUTH_TOKEN) &&
       
  1649 			(iMediaAuthV3->iFlowIds[0].iMediaComponentNumber == DPCKTTSY_COMP_NUMBER1) &&
       
  1650 			(iMediaAuthV3->iFlowIds[0].iIPFlowNumber == DPCKTTSY_IPFLOW_NUMBER1) &&
       
  1651 			(iMediaAuthV3->iFlowIds[1].iMediaComponentNumber == DPCKTTSY_COMP_NUMBER2) &&
       
  1652 			(iMediaAuthV3->iFlowIds[1].iIPFlowNumber == DPCKTTSY_IPFLOW_NUMBER2))
       
  1653 			{
       
  1654 			ReqCompleted(aTsyReqHandle,KErrNone);
       
  1655 			CleanupStack::Pop(iMediaAuthV3);
       
  1656 			}
       
  1657 		else
       
  1658 			{
       
  1659 			ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1660 			CleanupStack::Pop(iMediaAuthV3);	
       
  1661 			}
       
  1662 		}
       
  1663 	
       
  1664 	iTsyAsyncReqHandle = aTsyReqHandle;
       
  1665 	return KErrNone;
       
  1666 	
       
  1667  	}
       
  1668 
       
  1669 TInt CGprsContextDGprsTsy::GetRemoveMediaAuthorization(const TTsyReqHandle aTsyReqHandle, RPacketContext::TAuthorizationToken* aAuthorizationToken)
       
  1670 	{
       
  1671 	LOGTEXT(_L8("CGprsDGprsTsy::GetRemoveMediaAuthorization called"));
       
  1672 	User::After(300000); // wait to have KRequestPending
       
  1673 
       
  1674 	if(!iRemoveMediaAuthorization++)
       
  1675 		{
       
  1676 		if (!((*aAuthorizationToken).Compare(DPCKTTSY_AUTH_TOKEN)))
       
  1677 			{
       
  1678 			ReqCompleted(aTsyReqHandle,KErrNone);
       
  1679 			}
       
  1680 		else
       
  1681 			{
       
  1682 			ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1683 			}
       
  1684 		}
       
  1685 	
       
  1686 	iTsyAsyncReqHandle = aTsyReqHandle;
       
  1687 	return KErrNone;
       
  1688 	
       
  1689 	}
       
  1690 
       
  1691 TInt CGprsContextDGprsTsy::GetAddMediaAuthorizationCancel(const TTsyReqHandle aTsyReqHandle) 
       
  1692 /**
       
  1693  * GetAddMediaAuthorizationCancel - Cancels an asynchronous GetAddMediaAuthorization request
       
  1694  */
       
  1695 	{
       
  1696 	LOGTEXT(_L8("CGprsDGprsTsy::GetAddMediaAuthorizationCancel called"));
       
  1697 	User::After(300000); // wait to have KRequestPending
       
  1698 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1699 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1700 	else
       
  1701 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1702 	return KErrNone;
       
  1703 	}
       
  1704 
       
  1705 TInt CGprsContextDGprsTsy::GetRemoveMediaAuthorizationCancel(const TTsyReqHandle aTsyReqHandle) 
       
  1706 /**
       
  1707  * GetRemoveMediaAuthorizationCancel - Cancels an asynchronous GetRemoveMediaAuthorization request
       
  1708  */
       
  1709 	{
       
  1710 	LOGTEXT(_L8("CGprsDGprsTsy::GetRemoveMediaAuthorizationCancel called"));
       
  1711 	User::After(300000); // wait to have KRequestPending
       
  1712 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1713 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1714 	else
       
  1715 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1716 	return KErrNone;
       
  1717 	}
       
  1718 	
       
  1719 #ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
  1720 TInt CGprsContextDGprsTsy::GetConnectionInfo(const TTsyReqHandle aTsyReqHandle, TDes8* aInfo)
       
  1721 /** 
       
  1722  * GetConnectionInfo method - Returns the connection info.
       
  1723  * A asynchronous variant of this method is supported.
       
  1724  * In the switch statement, case 0 is completed right away, while case 1 implements the asynchronous call.
       
  1725  */
       
  1726 	{
       
  1727 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetConnectionInfo called"));
       
  1728 	
       
  1729 	User::After(300000); // wait to have KRequestPending
       
  1730 	switch (iGetConnectionInfo++)
       
  1731 		{
       
  1732 		case 0:
       
  1733             {
       
  1734             TInt ret = FillConnectionInfo(aInfo);
       
  1735             ReqCompleted(aTsyReqHandle,ret);
       
  1736             break;       
       
  1737             }
       
  1738 		case 1:
       
  1739 			iTsyAsyncReqHandle = aTsyReqHandle;
       
  1740 			break;
       
  1741 		default:
       
  1742 			LOGTEXT(_L8("CGprsContextDGprsTsy::GetConnectionInfo - Error in switch statement"));
       
  1743 			ReqCompleted(aTsyReqHandle, KErrArgument);
       
  1744 			break;
       
  1745 		} // switch
       
  1746 
       
  1747 	return KErrNone;
       
  1748 	}
       
  1749 	
       
  1750 TInt CGprsContextDGprsTsy::GetConnectionInfoCancel(const TTsyReqHandle aTsyReqHandle)
       
  1751 /** 
       
  1752  * GetConnectionInfoCancel method - Cancel active connection info request.
       
  1753  */     
       
  1754 	{
       
  1755 	LOGTEXT(_L8("CGprsContextDGprsTsy::GetConnectionInfoCancel called"));
       
  1756 	User::After(300000); // wait to have KRequestPending
       
  1757 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1758 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1759 	else
       
  1760 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1761 	return KErrNone;
       
  1762 	}
       
  1763 	
       
  1764 TInt CGprsContextDGprsTsy::FillConnectionInfo(TDes8* aInfo) 
       
  1765 /** 
       
  1766  * FillConnectionInfo method - Fill connection information into TConnectionInfoVXX structure.
       
  1767  */    
       
  1768 	{
       
  1769 	TPckg<TConnectionInfoBase>* infoBasePckg = (TPckg<TConnectionInfoBase>*)aInfo;
       
  1770 	TConnectionInfoBase& infoBase = (*infoBasePckg)();
       
  1771     
       
  1772 	TInt ret = KErrNone;
       
  1773     if ( TConnectionInfoBase::KConnectionInfoV1 == infoBase.ExtensionId() )
       
  1774         {
       
  1775 		TPckg<RPacketContext::TConnectionInfoV1>* infoV1Pckg = (TPckg<RPacketContext::TConnectionInfoV1>*)aInfo;
       
  1776 		RPacketContext::TConnectionInfoV1& infoV1 = (*infoV1Pckg)();	            
       
  1777             
       
  1778         infoV1.iValid = RPacketContext::KHSDPACategory | RPacketContext::KHSUPACategory;
       
  1779         infoV1.iHSDPACategory = DPCKTTSY_HSDPA_CATEGORY;     
       
  1780         infoV1.iHSUPACategory = DPCKTTSY_HSUPA_CATEGORY;                     
       
  1781         }
       
  1782     else
       
  1783         {
       
  1784         ret = KErrNotSupported;
       
  1785         }   
       
  1786     return ret;    
       
  1787 	}		
       
  1788 	
       
  1789 TInt CGprsContextDGprsTsy::NotifyConnectionInfoChange(const TTsyReqHandle aTsyReqHandle, TDes8* aInfo)
       
  1790 /** 
       
  1791  * NotifyConnectionInfoChangeChange method - Notify client when the connection info changes.
       
  1792  * In the switch statement, case 0 is completed right away, while case 1 implements the asynchronous call.
       
  1793  */	 	
       
  1794 	{ 
       
  1795 	LOGTEXT(_L8("CGprsContextDGprsTsy::NotifyConnectionInfoChange called"));	      
       
  1796 	User::After(300000); // wait to have KRequestPending
       
  1797 	switch (iNotifyConnectionInfoChange++)
       
  1798 		{
       
  1799 		case 0:
       
  1800             {
       
  1801             TInt ret = FillConnectionInfo(aInfo);
       
  1802             ReqCompleted(aTsyReqHandle,ret);
       
  1803             break;       
       
  1804             }
       
  1805 		case 1:
       
  1806 			iTsyAsyncReqHandle = aTsyReqHandle;
       
  1807 			break;
       
  1808 		default:
       
  1809 			LOGTEXT(_L8("CGprsContextDGprsTsy::NotifyConnectionInfoChange - Error in switch statement"));
       
  1810 			ReqCompleted(aTsyReqHandle, KErrArgument);
       
  1811 			break;
       
  1812 		} // switch
       
  1813 		
       
  1814     return KErrNone;
       
  1815 	}
       
  1816 
       
  1817 TInt CGprsContextDGprsTsy::NotifyConnectionInfoChangeCancel(const TTsyReqHandle aTsyReqHandle)
       
  1818 /** 
       
  1819  * NotifyConnectionInfoChangeCancel method - Cancel active notify connection info request.
       
  1820  */    
       
  1821 	{
       
  1822 	LOGTEXT(_L8("CGprsContextDGprsTsy::NotifyConnectionInfoChangeCancel called"));
       
  1823 	User::After(300000); // wait to have KRequestPending
       
  1824 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  1825 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  1826 	else
       
  1827 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1828 	return KErrNone;
       
  1829 	}	
       
  1830 #endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
       
  1831 	
       
  1832 //
       
  1833 CMbmsContextDMbmsTsy* CMbmsContextDMbmsTsy::NewL(CGprsDGprsTsy *aGprs,CPhoneFactoryDummyBase* aFac)
       
  1834 /**
       
  1835  * NewL method - Standard 2-phase constructor
       
  1836  */
       
  1837 	{
       
  1838 	LOGTEXT(_L8("CMbmsContextDMbmsTsy: NewL() method"));
       
  1839 
       
  1840 	CMbmsContextDMbmsTsy* subsession=new(ELeave) CMbmsContextDMbmsTsy(aGprs,aFac);
       
  1841 	CleanupStack::PushL(subsession);
       
  1842 	subsession->ConstructL();
       
  1843 	CleanupStack::Pop();
       
  1844 	return subsession;
       
  1845 	}
       
  1846 
       
  1847 CMbmsContextDMbmsTsy::CMbmsContextDMbmsTsy(CGprsDGprsTsy *aGprs,CPhoneFactoryDummyBase* aFac)
       
  1848 	:CGprsContextDGprsTsy(aFac),iGprs(aGprs)
       
  1849 	{
       
  1850 	}
       
  1851 
       
  1852 void CMbmsContextDMbmsTsy::ConstructL()
       
  1853 /**
       
  1854  * ConstructL method
       
  1855  */
       
  1856 	{
       
  1857 	LOGTEXT(_L8("CMbmsContextDMbmsTsy: Entered constructor"));
       
  1858 	iMbmsSessionList = new CArrayPtrFlat<CListReadAllAttempt>(1);
       
  1859 	}
       
  1860 
       
  1861 CMbmsContextDMbmsTsy::~CMbmsContextDMbmsTsy()
       
  1862 /**
       
  1863  * Destructor
       
  1864  */
       
  1865 	{
       
  1866 	LOGTEXT(_L8("CMbmsContextDMbmsTsy: Entered destructor"));
       
  1867 	if(iMbmsSessionList)
       
  1868 		{
       
  1869 		iMbmsSessionList->ResetAndDestroy();
       
  1870 		delete iMbmsSessionList;
       
  1871 		}
       
  1872 	}
       
  1873 
       
  1874 TInt CMbmsContextDMbmsTsy::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,const TDataPackage& aPackage)
       
  1875 /**
       
  1876  * ExtFunc is called by the server when it has a "extended", i.e. non-core ETel request 
       
  1877  * for the TSY to process. A request handle, request type and request data are passed 
       
  1878  * to the TSY
       
  1879  */
       
  1880 	{
       
  1881 	LOGTEXT(_L8("CMbmsContextDMbmsTsy: ExtFunc() called"));
       
  1882 
       
  1883 	TAny* dataPtr=aPackage.Ptr1();
       
  1884 	TAny* dataPtr2=aPackage.Ptr2();
       
  1885 
       
  1886 	switch (aIpc)
       
  1887 		{
       
  1888 	case EPacketContextUpdateMbmsSessionList:
       
  1889 		return UpdateMbmsSessionList(aTsyReqHandle,
       
  1890 		reinterpret_cast<TMbmsAction*>(dataPtr),
       
  1891 		reinterpret_cast<TUint*>(dataPtr2));	
       
  1892 	case EPacketGetMbmsSessionListPhase1:
       
  1893 		return GetMbmsSessionsPhase1(aTsyReqHandle, 
       
  1894 		reinterpret_cast<TClientId*>(dataPtr), 
       
  1895 		reinterpret_cast<TUint*>(dataPtr2));
       
  1896 	case EPacketGetMbmsSessionListPhase2:
       
  1897 		return GetMbmsSessionsPhase2(aTsyReqHandle, 
       
  1898 		reinterpret_cast<TClientId*>(dataPtr), aPackage.Des2n());		
       
  1899 	default:
       
  1900 		return CGprsContextDGprsTsy::ExtFunc( aTsyReqHandle,aIpc,aPackage);
       
  1901 		}
       
  1902 	}
       
  1903 CTelObject::TReqMode CMbmsContextDMbmsTsy::ReqModeL(const TInt aIpc)
       
  1904 /**
       
  1905  * ReqModeL is called from the server's CTelObject::ReqAnalyserL in order to check the 
       
  1906  * type of request it has. The following are example request types for this dummy TSY
       
  1907  * All TSYs do not have to have these request types but they have been given
       
  1908  * "sensible" values in this dummy TSY code.
       
  1909  */	
       
  1910 	{
       
  1911 	LOGTEXT(_L8("CMbmsContextDMbmsTsy: ReqModeL() method"));
       
  1912 	CTelObject::TReqMode ret=0;
       
  1913 	switch (aIpc)
       
  1914 		{
       
  1915 	case EPacketContextUpdateMbmsSessionList:
       
  1916 	case EPacketGetMbmsSessionListPhase1:
       
  1917 	case EPacketGetMbmsSessionListPhase2:
       
  1918 		break;
       
  1919 	default:
       
  1920 		CGprsContextDGprsTsy::ReqModeL(aIpc);
       
  1921 		break;
       
  1922 		}
       
  1923 	return ret;
       
  1924 	}
       
  1925 
       
  1926 TInt CMbmsContextDMbmsTsy::CancelService(const TInt aIpc, const TTsyReqHandle aTsyReqHandle)
       
  1927 /**
       
  1928  * CancelService is called by the server when it is "cleaning-up" any still outstanding
       
  1929  * asynchronous requests before closing a client's sub-session.
       
  1930  * This will happen if a client closes its R-class handle without cancelling outstanding
       
  1931  * asynchronous requests.
       
  1932  */
       
  1933 	{
       
  1934 	LOGTEXT(_L8("CMbmsContextDMbmsTsy: - CancelService called"));
       
  1935 	switch (aIpc)
       
  1936 		{
       
  1937 	case EPacketContextUpdateMbmsSessionList:
       
  1938 		return UpdateMbmsSessionListCancel(aTsyReqHandle);		
       
  1939 	case EPacketGetMbmsSessionListPhase1:
       
  1940 	case EPacketGetMbmsSessionListPhase2:
       
  1941 		return GetMbmsSessionsCancel(aTsyReqHandle);
       
  1942 	default:
       
  1943 		return CGprsContextDGprsTsy::CancelService(aIpc, aTsyReqHandle);
       
  1944 		}
       
  1945 	}
       
  1946 
       
  1947 CTelObject* CMbmsContextDMbmsTsy::OpenNewObjectByNameL(const TDesC& /*aName*/)
       
  1948 /**
       
  1949  * Opening object(s) from RPacketContext is not supported.
       
  1950  */
       
  1951 	{
       
  1952 	LOGTEXT(_L8("CMbmsContextDMbmsTsy: OpenNewObjectByNameL() method - Not supported"));
       
  1953 
       
  1954 	User::Leave(KErrNotSupported);
       
  1955 	return NULL;
       
  1956 	}
       
  1957 
       
  1958 CTelObject* CMbmsContextDMbmsTsy::OpenNewObjectL(TDes& /*aNewName*/)
       
  1959 	{
       
  1960 	LOGTEXT(_L8("CMbmsContextDMbmsTsy: OpenNewObjectL() method"));
       
  1961 	return NULL;
       
  1962 	}
       
  1963 	
       
  1964 TInt CMbmsContextDMbmsTsy::UpdateMbmsSessionList(const TTsyReqHandle aTsyReqHandle,TMbmsAction* aAction, TMbmsSessionId* aSessionId)
       
  1965 	{
       
  1966 	LOGTEXT(_L8("CMbmsContextDMbmsTsy::UpdateMbmsSessionList called"));
       
  1967 	iTsyAsyncReqHandle = aTsyReqHandle;
       
  1968 	switch(*aAction)
       
  1969 		{
       
  1970 	case DPCKTTSY_MBMS_ACTION_ADD:
       
  1971 		if(*aSessionId != DPCKTTSY_MBMS_SESSIONID_ONE)
       
  1972 			{
       
  1973 			ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1974 			}
       
  1975 		else
       
  1976 			{
       
  1977 			iGprs->AddDelayedReq(aTsyReqHandle, this);
       
  1978 			}
       
  1979 		break;
       
  1980 	case DPCKTTSY_MBMS_ACTION_REMOVE:
       
  1981 		if((*aSessionId != DPCKTTSY_MBMS_SESSIONID_ONE) && (*aSessionId != DPCKTTSY_MBMS_SESSIONID_INVALID))
       
  1982 			{
       
  1983 			ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  1984 			}
       
  1985 		if(*aSessionId == DPCKTTSY_MBMS_SESSIONID_INVALID)
       
  1986 			{
       
  1987 			ReqCompleted(aTsyReqHandle, KErrNotFound);
       
  1988 			}
       
  1989 		else
       
  1990 			{
       
  1991 			iGprs->AddDelayedReq(aTsyReqHandle, this);
       
  1992 			}
       
  1993 		break;
       
  1994 	case DPCKTTSY_MBMS_ACTION_REMOVEALL:
       
  1995 		switch(iRemoveAllCount)
       
  1996 			{
       
  1997 		case 0:
       
  1998 			iGprs->AddDelayedReq(aTsyReqHandle, this);
       
  1999 			iRemoveAllCount++;
       
  2000 			break;
       
  2001 		default:
       
  2002 		case 1:
       
  2003 			ReqCompleted(aTsyReqHandle,KErrMbmsImpreciseServiceEntries);
       
  2004 			iRemoveAllCount = 0;
       
  2005 			break;
       
  2006 			}
       
  2007 		break;
       
  2008 		}
       
  2009 	return KErrNone;	
       
  2010 	}
       
  2011 	
       
  2012 TInt CMbmsContextDMbmsTsy::UpdateMbmsSessionListCancel(const TTsyReqHandle aTsyReqHandle)
       
  2013 	{
       
  2014 	LOGTEXT(_L8("CMbmsContextDMbmsTsy::UpdateMbmsSessionListCancel called"));
       
  2015 	iGprs->RemoveDelayedReq(aTsyReqHandle);
       
  2016 	if(aTsyReqHandle == iTsyAsyncReqHandle)
       
  2017 		{
       
  2018 		ReqCompleted(aTsyReqHandle,KErrCancel);
       
  2019 		}
       
  2020 	else
       
  2021 		{
       
  2022 		ReqCompleted(aTsyReqHandle,KErrCorrupt);
       
  2023 		}
       
  2024 	return KErrNone;
       
  2025 	}
       
  2026 
       
  2027 TInt CMbmsContextDMbmsTsy::GetMbmsSessionsPhase1(const TTsyReqHandle aTsyReqHandle, TClientId* aClient, TUint* aBufSize)
       
  2028 	{
       
  2029 	LOGTEXT(_L8("CMbmsContextDMbmsTsy::GetMbmsSessionsPhase1 called"));
       
  2030 	iTsyAsyncReqHandle = aTsyReqHandle;
       
  2031 	TInt ret=KErrNone;
       
  2032 	TInt leaveCode=KErrNone;
       
  2033 	TRAP(leaveCode, ret=ProcessGetMbmsSessionsPhase1L(aTsyReqHandle, aClient, aBufSize););
       
  2034 	if (leaveCode != KErrNone)
       
  2035 		{
       
  2036 		ReqCompleted(aTsyReqHandle,leaveCode);
       
  2037 		}
       
  2038 	return ret;
       
  2039 	}	
       
  2040 
       
  2041 TInt CMbmsContextDMbmsTsy::ProcessGetMbmsSessionsPhase1L(const TTsyReqHandle aTsyReqHandle, 
       
  2042 													 TClientId* aClient, 
       
  2043 													 TUint* aBufSize)
       
  2044 
       
  2045 	{
       
  2046 	// Retrieve MBMS session list,
       
  2047 	// Store the sessions and then return the size of the buffer to the client
       
  2048 	LOGTEXT(_L8("CMbmsContextDMbmsTsy::ProcessGetMbmsSessionsPhase1L called"));	
       
  2049 	RPacketMbmsContext::CMbmsSession* mbmsSession=RPacketMbmsContext::CMbmsSession::NewL();
       
  2050 	CleanupStack::PushL(mbmsSession);
       
  2051 	mbmsSession->iSessionIdList.Append(DPCKTTSY_MBMS_CONTEXT_SESSION_ID_ONE);
       
  2052 	mbmsSession->iSessionIdList.Append(DPCKTTSY_MBMS_CONTEXT_SESSION_ID_TWO);
       
  2053 	mbmsSession->iSessionIdList.Append(DPCKTTSY_MBMS_CONTEXT_SESSION_ID_THREE);
       
  2054 	// Store the streamed list and the client ID
       
  2055 	CListReadAllAttempt* read=CListReadAllAttempt::NewL(aClient,aTsyReqHandle);
       
  2056 	CleanupStack::PushL(read);
       
  2057 	
       
  2058 	HBufC8* iBuff=NULL;
       
  2059 	mbmsSession->ExternalizeL(iBuff);	
       
  2060 	CleanupStack::PushL(iBuff);
       
  2061 		
       
  2062 	CBufFlat* buf=CBufFlat::NewL(iBuff->Length());
       
  2063 	CleanupStack::PushL(buf);
       
  2064 	buf->InsertL(0,*iBuff);	
       
  2065 	
       
  2066 	read->iListBuf = buf;
       
  2067 	CleanupStack::Pop(buf);	
       
  2068 	CleanupStack::PopAndDestroy(iBuff);
       
  2069 	
       
  2070 	iMbmsSessionList->AppendL(read);
       
  2071 	CleanupStack::Pop(); // pop the CListReadAllAttempt
       
  2072 	
       
  2073 	// return the CBufBase’s size to client
       
  2074 	*aBufSize=(read->iListBuf)->Size();
       
  2075 	CleanupStack::PopAndDestroy(mbmsSession);
       
  2076 	
       
  2077 	// Complete first phase of list retrieval
       
  2078 	iGprs->AddDelayedReq(aTsyReqHandle,this);
       
  2079 	return KErrNone;
       
  2080 	}
       
  2081 
       
  2082 TInt CMbmsContextDMbmsTsy::GetMbmsSessionsPhase2(const TTsyReqHandle aTsyReqHandle,TClientId* aClient, TDes8* aBuf)
       
  2083 	{
       
  2084 	LOGTEXT(_L8("CMbmsContextDMbmsTsy::GetMbmsSessionsPhase2 called"));
       
  2085 	CListReadAllAttempt* read=NULL;
       
  2086 	// Find the get Mbms monitored services from this client
       
  2087 	for (TInt i=0; i<iMbmsSessionList->Count(); ++i)
       
  2088 		{
       
  2089 		read = iMbmsSessionList->At(i);
       
  2090 		if ((read->iClient.iSessionHandle==aClient->iSessionHandle) &&
       
  2091 		    (read->iClient.iSubSessionHandle==aClient->iSubSessionHandle))
       
  2092 			{
       
  2093 			TPtr8 bufPtr((read->iListBuf)->Ptr(0));
       
  2094 			// Copy the streamed list to the client
       
  2095 			aBuf->Copy(bufPtr);
       
  2096 			delete read;
       
  2097 			iMbmsSessionList->Delete(i);
       
  2098 			ReqCompleted(aTsyReqHandle,KErrNone);
       
  2099 			return KErrNone;
       
  2100 			}
       
  2101 		}
       
  2102 	// Should handle error case of not finding the matching client from read all phase 1
       
  2103 	ReqCompleted(aTsyReqHandle,KErrBadHandle);
       
  2104 	return KErrNone;
       
  2105 	}
       
  2106 	
       
  2107 TInt CMbmsContextDMbmsTsy::GetMbmsSessionsCancel(const TTsyReqHandle aTsyReqHandle)
       
  2108 	{
       
  2109 	LOGTEXT(_L8("CMbmsContextDMbmsTsy::GetPreferredWlanSIDsCancel called"));
       
  2110 	// Remove the MBMS sessions from iMbmsSessionList
       
  2111 	iGprs->RemoveDelayedReq(aTsyReqHandle);
       
  2112 	CListReadAllAttempt* read=NULL;
       
  2113 	for (TInt i=0; i<iMbmsSessionList->Count(); ++i)
       
  2114 		{
       
  2115 		read = iMbmsSessionList->At(i);
       
  2116 		if (read->iReqHandle == aTsyReqHandle)
       
  2117 			{
       
  2118 			delete read;
       
  2119 			iMbmsSessionList->Delete(i);
       
  2120 			break;
       
  2121 			}
       
  2122 		}
       
  2123 	ReqCompleted(aTsyReqHandle,KErrCancel);
       
  2124 	return KErrNone;
       
  2125 	}
       
  2126 
       
  2127