satengine/satserver/Commands/OpenChannelCmd/src/COpenChannelHandler.cpp
changeset 33 8d5d7fcf9b59
child 51 12bc758d6a02
equal deleted inserted replaced
32:1f002146abb4 33:8d5d7fcf9b59
       
     1 /*
       
     2 * Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Handles OpenChannel command
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include    <etelpckt.h>
       
    20 #include    <etelmmerr.h>
       
    21 
       
    22 #include    "COpenChannelHandler.h"
       
    23 #include    "MSatApi.h"
       
    24 #include    "MSatUtils.h"
       
    25 #include    "MSatUiSession.h"
       
    26 #include    "MSatSystemState.h"
       
    27 #include    "MSatApnHandler.h"
       
    28 #include    "SatSOpcodes.h"
       
    29 #include    "MSatSUiClientHandler.h"
       
    30 #include    "SatLog.h"
       
    31 #include    "extendedconnpref.h"
       
    32 
       
    33 const TUint8 KChannelStatusLength( 2 );
       
    34 
       
    35 // ======== MEMBER FUNCTIONS ========
       
    36 
       
    37 // -----------------------------------------------------------------------------
       
    38 // Two-phased constructor.
       
    39 // -----------------------------------------------------------------------------
       
    40 //
       
    41 COpenChannelHandler* COpenChannelHandler::NewL( MSatUtils* aUtils )
       
    42     {
       
    43     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::NewL calling" )
       
    44 
       
    45     COpenChannelHandler* self = new( ELeave ) COpenChannelHandler;
       
    46 
       
    47     CleanupStack::PushL( self );
       
    48     self->BaseConstructL( aUtils );
       
    49     self->ConstructL();
       
    50     CleanupStack::Pop( self );
       
    51 
       
    52     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::NewL exiting" )
       
    53     return self;
       
    54     }
       
    55 
       
    56 // -----------------------------------------------------------------------------
       
    57 // Destructor
       
    58 // -----------------------------------------------------------------------------
       
    59 //
       
    60 COpenChannelHandler::~COpenChannelHandler()
       
    61     {
       
    62     LOG( SIMPLE,
       
    63         "OPENCHANNEL: COpenChannelHandler::~COpenChannelHandler calling" )
       
    64 
       
    65     Cancel();
       
    66     iDataChannel = NULL;
       
    67 
       
    68     delete iConnectionInfo.iOverrideSet;
       
    69 
       
    70     LOG( SIMPLE,
       
    71         "OPENCHANNEL: COpenChannelHandler::~CCloseChannelHandler exiting" )
       
    72     }
       
    73 
       
    74 // ---------------------------------------------------------------------------
       
    75 // From class MSatCommand.
       
    76 // Response from the client.
       
    77 // ---------------------------------------------------------------------------
       
    78 //
       
    79 void COpenChannelHandler::ClientResponse()
       
    80     {
       
    81     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::ClientResponse calling" )
       
    82 
       
    83     // Query response from client.
       
    84     if ( !iQueryRsp.iAccepted ) // Not accepted by user
       
    85         {
       
    86         // Close data channel
       
    87         CloseChannel();
       
    88 
       
    89         if ( iQueryRsp.iSessionTerminatedByUser ) // Terminated by user
       
    90             {
       
    91             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::ClientResponse \
       
    92                 Session terminated by user" )
       
    93             // Notify sim session end command that next sim session end
       
    94             // should close the ui session.
       
    95             iUtils->NotifyEvent( MSatUtils::ESessionTerminatedByUser );
       
    96 
       
    97             // Terminal response, SimSessionTerminatedByUser
       
    98             iOpenChannelRsp.iGeneralResult = RSat::KPSessionTerminatedByUser;
       
    99             }
       
   100         else
       
   101             {
       
   102             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::ClientResponse \
       
   103                 User not accept command" )
       
   104 
       
   105             // Send terminal response -> User not accepted
       
   106             iOpenChannelRsp.iGeneralResult = RSat::KPCmdNotAcceptedByUser;
       
   107             }
       
   108 
       
   109         iOpenChannelRsp.iInfoType = RSat::KNoAdditionalInfo;
       
   110         iOpenChannelRsp.iAdditionalInfo.Zero();
       
   111         iOpenChannelRsp.SetPCmdNumber( iOpenChannelData.PCmdNumber() );
       
   112         TerminalRsp( iPCmd, iOpenChannelRspPckg );
       
   113         }
       
   114     else // Accepted by user
       
   115         {
       
   116         LOG( NORMAL,
       
   117             "OPENCHANNEL: COpenChannelHandler::ClientResponse User accepted" )
       
   118         // User accepted
       
   119         const TInt linkEst( iOpenChannelData.iLinkEst );
       
   120 
       
   121         // SetUp channel if activation is on demand
       
   122         if ( ( RSat::EOnDemand == linkEst ) && ( KErrNone != SetUpChannel() ) )
       
   123             {
       
   124             // Close channel and send error if setup failed
       
   125             CloseChannel();
       
   126             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::ClientResponse \
       
   127                 SetUp failed" )
       
   128             iOpenChannelRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
       
   129             iOpenChannelRsp.iInfoType = RSat::KNoAdditionalInfo;
       
   130             iOpenChannelRsp.iAdditionalInfo.Zero();
       
   131             iOpenChannelRsp.SetPCmdNumber( iOpenChannelData.PCmdNumber() );
       
   132             TerminalRsp( iPCmd, iOpenChannelRspPckg );
       
   133             }
       
   134         else
       
   135             {
       
   136             // Send terminal response
       
   137             SendSuccessTerminalRsp();
       
   138             }
       
   139 
       
   140         }
       
   141 
       
   142     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::ClientResponse exiting" )
       
   143     }
       
   144 
       
   145 // -----------------------------------------------------------------------------
       
   146 // From class MSatConnectionObserver.
       
   147 // Notification from the connection.
       
   148 // -----------------------------------------------------------------------------
       
   149 //
       
   150 void COpenChannelHandler::ConnectionNotification( TInt aError )
       
   151     {
       
   152     LOG2( SIMPLE, "OPENCHANNEL: COpenChannelHandler::ConnectionNotification\
       
   153          calling with code %i", aError )
       
   154 
       
   155     // Check connection status
       
   156     if ( KErrNone == aError )
       
   157         {
       
   158         // If information indication to the user is needed, show it now.
       
   159         if ( iNeedUiSession )
       
   160             {
       
   161             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::HandleCommand \
       
   162                 Sending UI Notification" )
       
   163 
       
   164             // Send confirmation to UI and wait for client response
       
   165             SendConfirmToUi();
       
   166             }
       
   167         else
       
   168             {
       
   169             // Send successfull terminal response
       
   170             SendSuccessTerminalRsp();
       
   171             }
       
   172         }
       
   173     else
       
   174         {
       
   175         // Activation failed, Close channel and send error
       
   176         LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::ConnectionNotification \
       
   177             Channel activation failed" )
       
   178 
       
   179         // Close channel
       
   180         CloseChannel();
       
   181 
       
   182         // PDP Activation failed
       
   183         iOpenChannelRsp.iGeneralResult = RSat::KBearerIndepProtocolError;
       
   184         iOpenChannelRsp.iInfoType = RSat::KMeProblem;
       
   185         iOpenChannelRsp.iAdditionalInfo.SetLength( 1 );
       
   186         iOpenChannelRsp.iAdditionalInfo[0] = RSat::KNoSpecificBIPError;
       
   187         iOpenChannelRsp.SetPCmdNumber( iOpenChannelData.PCmdNumber() );
       
   188         TerminalRsp( iPCmd, iOpenChannelRspPckg );
       
   189         }
       
   190 
       
   191     LOG( SIMPLE,
       
   192         "OPENCHANNEL: COpenChannelHandler::ConnectionNotification exiting" )
       
   193     }
       
   194 
       
   195 // -----------------------------------------------------------------------------
       
   196 // From class CSatCommandHandler.
       
   197 // Event notification.
       
   198 // -----------------------------------------------------------------------------
       
   199 //
       
   200 void COpenChannelHandler::Event( TInt aEvent )
       
   201     {
       
   202     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::Event calling" )
       
   203 
       
   204     // Check event
       
   205     if ( MSatUtils::ESatUiLaunched == aEvent )
       
   206         {
       
   207         LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::Event ESatUiLaunched" )
       
   208         iUtils->UnregisterEvent( this, MSatUtils::ESatUiLaunched );
       
   209 
       
   210         // Send confirm to UI
       
   211         SendConfirmToUi();
       
   212         }
       
   213 
       
   214     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::Event exiting" )
       
   215     }
       
   216 
       
   217 // -----------------------------------------------------------------------------
       
   218 // From class CActive.
       
   219 // Cancels the sat request.
       
   220 // -----------------------------------------------------------------------------
       
   221 //
       
   222 void COpenChannelHandler::DoCancel()
       
   223     {
       
   224     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::DoCancel calling" )
       
   225 
       
   226     iUtils->USatAPI().NotifyOpenChannelCancel();
       
   227 
       
   228     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::DoCancel exiting" )
       
   229     }
       
   230 
       
   231 // -----------------------------------------------------------------------------
       
   232 // From class CSatCommandHandler.
       
   233 // Requests the command notification.
       
   234 // -----------------------------------------------------------------------------
       
   235 //
       
   236 void COpenChannelHandler::IssueUSATRequest( TRequestStatus& aStatus )
       
   237     {
       
   238     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::IssueUSATRequest calling" )
       
   239 
       
   240     // Reset values
       
   241     iDataChannel = NULL;
       
   242     iSetUpWithModifications = EFalse;
       
   243     iNeedUiSession = EFalse;
       
   244 
       
   245     // Reset open channel data.
       
   246     new (&iOpenChannelData) RSat::TOpenGprsChannelV4();
       
   247     new (&iQueryData) TSatQueryV1();
       
   248 
       
   249     iUtils->USatAPI().NotifyOpenChannel( aStatus, iOpenChannelPckg );
       
   250     iUtils->NotifyEvent( MSatUtils::EBipCommandDoneExecuting );
       
   251 
       
   252     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::IssueUSATRequest exiting" )
       
   253     }
       
   254 
       
   255 // -----------------------------------------------------------------------------
       
   256 // From class CSatCommandHandler.
       
   257 // OpenChannel command is not allowed in following situations:
       
   258 //      - Phone is not registered to homenetwork and roaming.
       
   259 //      - phone is ringing, alerting or call is on and OpenChannel command
       
   260 //        is "make call only if not busy", "make call only if not busy wiht
       
   261 //        redial" or "Call type not set".
       
   262 // -----------------------------------------------------------------------------
       
   263 //
       
   264 TBool COpenChannelHandler::CommandAllowed()
       
   265     {
       
   266     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::CommandAllowed calling" )
       
   267 
       
   268     // Define the PCmd here since this is the first place after notification
       
   269     iPCmd = RSat::EOpenChannelGprs; // Other possible values
       
   270                                     // RSat::EOpenChannelCs
       
   271                                     // RSat::EOpenChannelLocal
       
   272 
       
   273     // Check parameters here, because every terminal response must contain info
       
   274     // about Bearer Set and BufferSize.
       
   275     TBool result( CheckParameters() );
       
   276 
       
   277     // Indicates channel activation type
       
   278     const TBool activateImmediately(
       
   279         RSat::EImmediate == iOpenChannelData.iLinkEst );
       
   280 
       
   281     //lint -e{961} Else block not needed.
       
   282     if ( ( RSat::EAlphaIdProvided != iOpenChannelData.iAlphaId.iStatus ) &&
       
   283          ( RSat::ESelfExplanatory == iOpenChannelData.iIconId.iQualifier ||
       
   284            RSat::ENotSelfExplanatory == iOpenChannelData.iIconId.iQualifier ) )
       
   285         {
       
   286         iOpenChannelRsp.iGeneralResult = RSat::KCmdDataNotUnderstood;
       
   287         iOpenChannelRsp.iInfoType = RSat::KNoAdditionalInfo;
       
   288         iOpenChannelRsp.iAdditionalInfo.Zero();
       
   289         result = EFalse;
       
   290         LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CommandAllowed \
       
   291             icon received without alpha id" )
       
   292         }
       
   293     // If parameters are OK, check rest.
       
   294     else if ( result && activateImmediately )
       
   295         {
       
   296         // Set result to False. If checks goes OK, this is set to ETrue.
       
   297         result = EFalse;
       
   298 
       
   299         RMobilePhone::TMobilePhoneRegistrationStatus registrationStatus(
       
   300             iUtils->SystemState().GetNetworkRegistrationStatus() );
       
   301 
       
   302         // Indicates is there service on network
       
   303         const TBool noService(
       
   304             ( RMobilePhone::ERegisteredOnHomeNetwork != registrationStatus ) &&
       
   305             ( RMobilePhone::ERegisteredRoaming != registrationStatus ) );
       
   306 
       
   307         if ( RMobilePhone::ERegistrationUnknown == registrationStatus )
       
   308             {
       
   309             LOG( NORMAL,
       
   310                 "OPENCHANNEL: COpenChannelHandler::CommandAllowed \
       
   311                 NetworkRegStatus not available" )
       
   312             iOpenChannelRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
       
   313             iOpenChannelRsp.iInfoType = RSat::KMeProblem;
       
   314             iOpenChannelRsp.iAdditionalInfo.SetLength( 1 );
       
   315             iOpenChannelRsp.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
       
   316             }
       
   317         // Check registration status
       
   318         else if ( noService )
       
   319             {
       
   320             // No service
       
   321             LOG( NORMAL,
       
   322                 "OPENCHANNEL: COpenChannelHandler::CommandAllowed No service" )
       
   323 
       
   324             iOpenChannelRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
       
   325             iOpenChannelRsp.iInfoType = RSat::KMeProblem;
       
   326             iOpenChannelRsp.iAdditionalInfo.SetLength( 1 );
       
   327             iOpenChannelRsp.iAdditionalInfo[0] = RSat::KNoService;
       
   328             }
       
   329         else
       
   330             {
       
   331             // Command allowed
       
   332             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CommandAllowed \
       
   333                 Command is allowed Immediate activation" )
       
   334             result = ETrue;
       
   335             }
       
   336         }
       
   337 
       
   338     if ( !result ) // Send Terminal response, if result is not OK
       
   339         {
       
   340         LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CommandAllowed \
       
   341         result not OK" )
       
   342         iOpenChannelRsp.SetPCmdNumber( iOpenChannelData.PCmdNumber() );
       
   343         TerminalRsp( iPCmd, iOpenChannelRspPckg );
       
   344         }
       
   345     else
       
   346         {
       
   347         // Register to handle UI commands.
       
   348         TRAPD( err, iUtils->RegisterServiceRequestL( ESatSProactiveQuery,
       
   349             ESatSProactiveQueryResponse, this ) );
       
   350 
       
   351         LOG2( NORMAL, "OPENCHANNEL: COpenChannelHandler::CommandAllowed \
       
   352         err: %d", err )
       
   353         // Above function leaves only when there is not enough memory to
       
   354         // allocate new object. So this case is very rare.
       
   355         if ( KErrNone != err )
       
   356             {
       
   357             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CommandAllowed \
       
   358                  Error while registering service request" )
       
   359 
       
   360             // Send general terminal response (no BIP specific)
       
   361             iOpenChannelRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
       
   362             iOpenChannelRsp.iInfoType = RSat::KMeProblem;
       
   363             iOpenChannelRsp.iAdditionalInfo.SetLength( 1 );
       
   364             iOpenChannelRsp.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
       
   365             iOpenChannelRsp.SetPCmdNumber( iOpenChannelData.PCmdNumber() );
       
   366             TerminalRsp( iPCmd, iOpenChannelRspPckg );
       
   367 
       
   368             // Cannot complete, there are some major memory problems
       
   369             result = EFalse;
       
   370             }
       
   371         // Set icon command flag whether icon data was received and 
       
   372         // set qualifier to no icon id
       
   373         // To be removed when icons are allowed in this command
       
   374         else if ( ( RSat::ESelfExplanatory ==
       
   375             iOpenChannelData.iIconId.iQualifier ) ||
       
   376             ( RSat::ENotSelfExplanatory ==
       
   377             iOpenChannelData.iIconId.iQualifier ) )
       
   378             {
       
   379             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CommandAllowed \
       
   380                  ENoIconId" )
       
   381             iIconCommand = ETrue;
       
   382             iOpenChannelData.iIconId.iQualifier = RSat::ENoIconId;
       
   383             }
       
   384         else
       
   385             {
       
   386             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CommandAllowed \
       
   387                  others" )
       
   388             iIconCommand = EFalse;
       
   389             }
       
   390         }
       
   391 
       
   392     LOG2( SIMPLE, "OPENCHANNEL: COpenChannelHandler::CommandAllowed exiting,\
       
   393     result: %d", result )
       
   394     return result;
       
   395     }
       
   396 
       
   397 // -----------------------------------------------------------------------------
       
   398 // From class CSatCommandHandler.
       
   399 // Need for ui session.
       
   400 // -----------------------------------------------------------------------------
       
   401 //
       
   402 TBool COpenChannelHandler::NeedUiSession()
       
   403     {
       
   404     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::NeedUiSession calling" )
       
   405 
       
   406     // UI is NOT needed in case where AlphaID is provided and it is a NULL
       
   407     iNeedUiSession =
       
   408         !( RSat::EAlphaIdNull == iOpenChannelData.iAlphaId.iStatus );
       
   409 
       
   410     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::NeedUiSession exiting" )
       
   411     // We do not need UI session at this point, but we will launch it by
       
   412     // ourselves when we do.
       
   413     return EFalse;
       
   414     }
       
   415 
       
   416 // -----------------------------------------------------------------------------
       
   417 // From class CSatCommandHandler.
       
   418 // Called when USAT API notifies that command.
       
   419 // -----------------------------------------------------------------------------
       
   420 //
       
   421 void COpenChannelHandler::HandleCommand()
       
   422     {
       
   423     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::HandleCommand calling" )
       
   424 
       
   425     // Notify others
       
   426     iUtils->NotifyEvent( MSatUtils::EOpenChannelExecuting );
       
   427     iUtils->NotifyEvent( MSatUtils::EBipCommandExecuting );
       
   428 
       
   429     TInt error( MSatBIPUtils::ESatBIPNoChannelAvail ); // By default, negative
       
   430 
       
   431     // Create data channel
       
   432     TRAPD( leaveErr,
       
   433         iDataChannel = iUtils->BipUtils().CreateChannelL(
       
   434             iBearerType, error ) );
       
   435 
       
   436     // Check the channel creation
       
   437     if ( ( MSatBIPUtils::ESatBIPSuccess != error ) || 
       
   438          ( KErrNone != leaveErr ) )
       
   439         {
       
   440         LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::HandleCommand\
       
   441             Channel creation failed" )
       
   442 
       
   443         // Channel creation failed -> Send terminal response
       
   444         iOpenChannelRsp.iGeneralResult = RSat::KBearerIndepProtocolError;
       
   445         iOpenChannelRsp.iInfoType = RSat::KMeProblem;
       
   446         iOpenChannelRsp.iAdditionalInfo.SetLength( 1 );
       
   447         iOpenChannelRsp.iAdditionalInfo[0] = RSat::KNoChannelAvailable;
       
   448         iOpenChannelRsp.SetPCmdNumber( iOpenChannelData.PCmdNumber() );
       
   449         TerminalRsp( iPCmd, iOpenChannelRspPckg );
       
   450 
       
   451         LOG( SIMPLE, "OPENCHANNEL: COpenChannel::HandleCommand exiting" )
       
   452         return;
       
   453         }
       
   454 
       
   455     LOG( NORMAL,
       
   456         "OPENCHANNEL: COpenChannelHandler::HandleCommand Channel creation OK" )
       
   457 
       
   458     // Open channel or request confirmation from user
       
   459     const TInt linkEst( iOpenChannelData.iLinkEst );
       
   460 
       
   461     // If not confirmation to user or immediate activation, open channel
       
   462     if ( ( !iNeedUiSession || RSat::EImmediate == linkEst )
       
   463            && KErrNone != SetUpChannel() )
       
   464         {
       
   465         // Setup failed, close channel and send error
       
   466         LOG( NORMAL,
       
   467             "OPENCHANNEL: COpenChannelHandler::HandleCommand SetUp failed" )
       
   468 
       
   469         // Close channel, there was an error
       
   470         CloseChannel();
       
   471 
       
   472         // Channel setup failed
       
   473         iOpenChannelRsp.iGeneralResult = RSat::KBearerIndepProtocolError;
       
   474         iOpenChannelRsp.iInfoType = RSat::KMeProblem;
       
   475         iOpenChannelRsp.iAdditionalInfo.SetLength( 1 );
       
   476         iOpenChannelRsp.iAdditionalInfo[0] = RSat::KNoSpecificBIPError;
       
   477         iOpenChannelRsp.SetPCmdNumber( iOpenChannelData.PCmdNumber() );
       
   478         TerminalRsp( iPCmd, iOpenChannelRspPckg );
       
   479 
       
   480         LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::HandleCommand \
       
   481             exiting" )
       
   482         return;
       
   483         }
       
   484 
       
   485     // If immediate activation, activate.
       
   486     if ( RSat::EImmediate == linkEst )
       
   487         {
       
   488         LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::HandleCommand \
       
   489              immediate activation" )
       
   490         // Check activation
       
   491         TInt activateError = ActivateChannel();
       
   492         if ( KErrNone != activateError )
       
   493             {
       
   494             // Activation failed, Close channel and send error
       
   495             LOG2( NORMAL, "OPENCHANNEL: COpenChannelHandler::HandleCommand \
       
   496                 Channel activation failed error = %i", activateError )
       
   497             // Close channel
       
   498             CloseChannel();
       
   499 
       
   500             // Check is there a call ongoing
       
   501             const TBool callIsOngoing( iUtils->SystemState().IsCallActive() ||
       
   502                 iUtils->SystemState().IsCallIncoming() );
       
   503 
       
   504             iOpenChannelRsp.iGeneralResult = RSat::KBearerIndepProtocolError;
       
   505 
       
   506             // Map the error to correct response
       
   507             if ( KErrGprsUserAuthenticationFailure == activateError )
       
   508                 {
       
   509                 LOG( DETAILED, 
       
   510                 "OPENCHANNEL: COpenChannelHandler::HandleCommand Security \
       
   511                 error" )
       
   512                 activateError = RSat::KSecurityError;
       
   513                 }
       
   514             else if ( KErrGprsServicesNotAllowed == activateError || callIsOngoing )
       
   515                 {
       
   516                 LOG( DETAILED, 
       
   517                 "OPENCHANNEL: COpenChannelHandler::HandleCommand Busy on \
       
   518                 call or CC on GPRS" )
       
   519                 activateError = RSat::KMeBusyOnCall;
       
   520                 iOpenChannelRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
       
   521                 }
       
   522             else if ( ( KErrMMEtelActivationBlockedByCallControlNoText ==
       
   523                             activateError ) ||
       
   524                       ( KErrMMEtelActivationBlockedByCallControlWithText ==
       
   525                             activateError ) )
       
   526                 {
       
   527                 iOpenChannelRsp.iGeneralResult = RSat::KInteractionWithCCPermanentError;
       
   528                 activateError = RSat::KActionNotAllowed;
       
   529 
       
   530                 LOG( DETAILED, 
       
   531                 "OPENCHANNEL: COpenChannelHandler::HandleCommand CC on GPRS \
       
   532                 not allowed" )
       
   533                 }
       
   534             else
       
   535                 {
       
   536                 LOG( DETAILED, 
       
   537                 "OPENCHANNEL: COpenChannelHandler::HandleCommand No specific \
       
   538                 BIP error" )
       
   539                 activateError = RSat::KNoSpecificBIPError;
       
   540                 }
       
   541 
       
   542             // PDP Activation failed
       
   543             iOpenChannelRsp.iInfoType = RSat::KMeProblem;
       
   544             iOpenChannelRsp.iAdditionalInfo.SetLength( 1 );
       
   545             iOpenChannelRsp.iAdditionalInfo[0] =
       
   546                 static_cast<TUint16>( activateError );
       
   547             iOpenChannelRsp.SetPCmdNumber( iOpenChannelData.PCmdNumber() );
       
   548             TerminalRsp( iPCmd, iOpenChannelRspPckg );
       
   549             }
       
   550         }
       
   551     else // OnDemand. Send terminal response or confirm to UI
       
   552         {
       
   553         // If information indication to the user is needed, show it now.
       
   554         if ( iNeedUiSession )
       
   555             {
       
   556             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::HandleCommand \
       
   557                 Sending UI Notification" )
       
   558             // Send confirmation to UI and wait for client response
       
   559             SendConfirmToUi();
       
   560             }
       
   561         else
       
   562             {
       
   563             // Send successfull terminal response
       
   564             SendSuccessTerminalRsp();
       
   565             }
       
   566         }
       
   567 
       
   568     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::HandleCommand exiting" )
       
   569     }
       
   570 
       
   571 // -----------------------------------------------------------------------------
       
   572 // From class CSatCommandHandler.
       
   573 // Indicates the failure of launching ui client.
       
   574 // -----------------------------------------------------------------------------
       
   575 //
       
   576 void COpenChannelHandler::UiLaunchFailed()
       
   577     {
       
   578     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::UiLaunchFailed calling" )
       
   579 
       
   580     iOpenChannelRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
       
   581     iOpenChannelRsp.iInfoType = RSat::KMeProblem;
       
   582     iOpenChannelRsp.iAdditionalInfo.SetLength( 1 );
       
   583     iOpenChannelRsp.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
       
   584     iOpenChannelRsp.SetPCmdNumber( iOpenChannelData.PCmdNumber() );
       
   585     TerminalRsp( iPCmd, iOpenChannelRspPckg );
       
   586 
       
   587     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::UiLaunchFailed exiting" )
       
   588     }
       
   589 
       
   590 // -----------------------------------------------------------------------------
       
   591 // C++ default constructor can NOT contain any code, that
       
   592 // might leave.
       
   593 // -----------------------------------------------------------------------------
       
   594 //
       
   595 //lint -e{1403, 1769} Can not be initialized.
       
   596 COpenChannelHandler::COpenChannelHandler() :
       
   597     CSatCommandHandler(),
       
   598     iOpenChannelData(),
       
   599     iOpenChannelPckg( iOpenChannelData ),
       
   600     iOpenChannelRsp(),
       
   601     iOpenChannelRspPckg( iOpenChannelRsp ),
       
   602     iQueryData(),
       
   603     iQueryPckg( iQueryData ),
       
   604     iQueryRsp(),
       
   605     iQueryRspPckg( iQueryRsp ),
       
   606     // To be removed when icons are allowed in this command
       
   607     iIconCommand( EFalse )
       
   608     {
       
   609     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::COpenChannelHandler \
       
   610         calling - exiting" )
       
   611     }
       
   612 
       
   613 // -----------------------------------------------------------------------------
       
   614 // Symbian 2nd phase constructor can leave.
       
   615 // -----------------------------------------------------------------------------
       
   616 //
       
   617 void COpenChannelHandler::ConstructL()
       
   618     {
       
   619     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::ConstructL calling" )
       
   620 
       
   621     iUtils->RegisterServiceRequestL( ESatSProactiveQuery,
       
   622         ESatSProactiveQueryResponse, this );
       
   623 
       
   624     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::ConstructL exiting" )
       
   625     }
       
   626 
       
   627 // -----------------------------------------------------------------------------
       
   628 // Sets new connection settings for channel to open.
       
   629 // -----------------------------------------------------------------------------
       
   630 //
       
   631 void COpenChannelHandler::SetConnectionSettingsL(
       
   632     MSatBIPUtils::TSatBearerType aBearerType )
       
   633     {
       
   634     LOG2( SIMPLE,
       
   635         "OPENCHANNEL: COpenChannelHandler::SetConnectionSettingsL calling,\
       
   636         aBearerType: %d", aBearerType )
       
   637 
       
   638     RPacketContext::TProtocolType pdpType = RPacketContext::EPdpTypeIPv4;
       
   639     TUint32 defaultId( 0 );
       
   640     switch ( aBearerType )
       
   641         {
       
   642         case MSatBIPUtils::ESatGPRS:
       
   643             {
       
   644             // Resolve override settings
       
   645             if ( iOpenChannelData.iAccessName.Length() > 0 )
       
   646                 {
       
   647                 LOG( NORMAL, 
       
   648                 "OPENCHANNEL: COpenChannelHandler::SetConnectionSettingsL \
       
   649                 Getting APN" )
       
   650 
       
   651                 TUint32 iapId( 0 );
       
   652                 TUint32 nwId( 0 );
       
   653                 TBool apnCreated( EFalse );
       
   654 
       
   655                 pdpType = RPacketContext::EPdpTypeIPv6;
       
   656 
       
   657                 if ( RSat::EIPv4Address ==
       
   658                     iOpenChannelData.iDestinationAddress.iType )
       
   659                     {
       
   660                     LOG( NORMAL, 
       
   661                     "OPENCHANNEL: COpenChannelHandler::SetConnectionSettingsL \
       
   662                     IPV4 Address" )
       
   663                     pdpType = RPacketContext::EPdpTypeIPv4;
       
   664                     }
       
   665                 iUtils->BipUtils().ApnHandler().GetApnInfoL
       
   666                     (
       
   667                     iOpenChannelData.iAccessName,
       
   668                     iOpenChannelData.iUserLogin,
       
   669                     iOpenChannelData.iUserPassword,
       
   670                     iapId,
       
   671                     nwId,
       
   672                     apnCreated,
       
   673                     pdpType, // IPv6 or IPv4
       
   674                     iOpenChannelData.iLocalAddress.iAddress
       
   675                     );
       
   676 
       
   677                 if ( apnCreated )
       
   678                     {
       
   679                     LOG( NORMAL, 
       
   680                     "OPENCHANNEL: COpenChannelHandler::SetConnectionSettingsL \
       
   681                     APN created by SAT" )
       
   682                     // Store APN Id for later use
       
   683                     iConnectionInfo.iCreatedApnId = nwId;
       
   684                     }
       
   685 
       
   686                 SetOverrideSettingsL( iapId );
       
   687                 }
       
   688             else
       
   689                 {
       
   690                 LOG( NORMAL, "OPENCHANNEL: SetConnectionSettingsL \
       
   691                 No APN, using defaults" )
       
   692                 // No APN, use default settings
       
   693                 TRAPD( err, defaultId = 
       
   694                 iUtils->BipUtils().ApnHandler().FindDefaultApL( pdpType ) );
       
   695                 LOG2( NORMAL, "OPENCHANNEL: SetConnectionSettingsL \
       
   696                     No APN, using defaults err = %i", err )
       
   697                 SetOverrideSettingsL( defaultId );
       
   698                 }
       
   699             break;
       
   700             }
       
   701 
       
   702         default:
       
   703             {
       
   704             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::\
       
   705                 SetConnectionSettingsL exiting default" )
       
   706             // Leave if not supported
       
   707             User::Leave( KErrNotSupported );
       
   708             }
       
   709         }
       
   710 
       
   711 #ifdef SAT_USE_DUMMY_TSY
       
   712     // No APN, use default settings
       
   713     TRAPD( err, 
       
   714     defaultId = iUtils->BipUtils().ApnHandler().FindDefaultApL( pdpType ) );
       
   715     LOG2( NORMAL, "OPENCHANNEL: COpenChannelHandler::SetConnectionSettingsL \
       
   716         No APN, using defaults err = %i", err )
       
   717     SetOverrideSettingsL( defaultId );
       
   718 #endif // SAT_USE_DUMMY_TSY
       
   719 
       
   720     LOG( SIMPLE,
       
   721         "OPENCHANNEL: COpenChannelHandler::SetConnectionSettingsL exiting" )
       
   722     }
       
   723 
       
   724 // -----------------------------------------------------------------------------
       
   725 // Sets override settings into connection information.
       
   726 // -----------------------------------------------------------------------------
       
   727 //
       
   728 void COpenChannelHandler::SetOverrideSettingsL( const TUint32 aIapId )
       
   729     {
       
   730     
       
   731     LOG2( SIMPLE,
       
   732     "OPENCHANNEL: COpenChannelHandler::SetOverrideSettingsL aIapId: %i", 
       
   733     aIapId )
       
   734 
       
   735     delete iConnectionInfo.iOverrideSet;
       
   736     iConnectionInfo.iOverrideSet = NULL;
       
   737 
       
   738     // Override connection preferences
       
   739     TExtendedConnPref* overrideSettings = new( ELeave ) TExtendedConnPref;
       
   740     overrideSettings->SetIapId( aIapId );
       
   741     overrideSettings->SetNoteBehaviour( 
       
   742             TExtendedConnPref::ENoteBehaviourConnSilent );
       
   743     iConnectionInfo.iOverrideSet = overrideSettings;
       
   744 
       
   745     LOG( SIMPLE,
       
   746         "OPENCHANNEL: COpenChannelHandler::SetOverrideSettingsL exiting" )
       
   747     }
       
   748 
       
   749 // -----------------------------------------------------------------------------
       
   750 // Sets up data channel. Does not activate context.
       
   751 // -----------------------------------------------------------------------------
       
   752 //
       
   753 TInt COpenChannelHandler::SetUpChannel()
       
   754     {
       
   755     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::SetUpChannel calling" )
       
   756 
       
   757     // get connection settings from CommDB and
       
   758     // set connection settings to data channel
       
   759     TRAPD( status,
       
   760            SetConnectionSettingsL( iBearerType );
       
   761            iDataChannel->SetupConnectionL( iConnectionInfo ); );
       
   762 
       
   763     LOG2( SIMPLE,
       
   764         "OPENCHANNEL: COpenChannelHandler::SetUpChannel exiting with status %i",
       
   765         status )
       
   766     return status;
       
   767     }
       
   768 
       
   769 // -----------------------------------------------------------------------------
       
   770 // Activates context.
       
   771 // -----------------------------------------------------------------------------
       
   772 //
       
   773 TInt COpenChannelHandler::ActivateChannel()
       
   774     {
       
   775     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::ActivateChannel calling" )
       
   776 
       
   777     // Activate the connection
       
   778     TRAPD( err, iDataChannel->ActivateConnectionL( this ) );
       
   779 
       
   780     LOG2( SIMPLE, "OPENCHANNEL: COpenChannelHandler::ActivateChannel exiting\
       
   781         with error %i:", err )
       
   782     return err;
       
   783     }
       
   784 
       
   785 // -----------------------------------------------------------------------------
       
   786 // Creates and sends the terminal response on successful cases.
       
   787 // -----------------------------------------------------------------------------
       
   788 //
       
   789 void COpenChannelHandler::SendSuccessTerminalRsp()
       
   790     {
       
   791     LOG( SIMPLE,
       
   792         "OPENCHANNEL: COpenChannelHandler::SendSuccessTerminalRsp calling" )
       
   793 
       
   794     iDataChannel->GetNegotiatedQoSParams( iOpenChannelRsp.iBearer.iParams );
       
   795 
       
   796     // Get the channel status
       
   797     RSat::TChannelStatus channelStatus;
       
   798     TRAPD( err, channelStatus = iUtils->BipUtils().GenerateChannelStatusL(
       
   799             iDataChannel->ChannelId(), 0 ) );
       
   800     LOG2( SIMPLE, "OPENCHANNEL: COpenChannelHandler::SendSuccessTerminalRsp \
       
   801           error: %i", err )
       
   802     
       
   803     if ( KErrNone == err )
       
   804         {
       
   805         iOpenChannelRsp.iInfoType = RSat::KChannelStatusInfo;
       
   806         iOpenChannelRsp.iAdditionalInfo.SetLength( KChannelStatusLength );
       
   807 
       
   808         // Channel ID + PDP context status
       
   809         iOpenChannelRsp.iAdditionalInfo[0] = channelStatus[0];
       
   810 
       
   811         // Channel status
       
   812         iOpenChannelRsp.iAdditionalInfo[1] = channelStatus[1];
       
   813         iOpenChannelRsp.SetPCmdNumber( iOpenChannelData.PCmdNumber() );
       
   814 
       
   815         // Define the result of this command handling
       
   816         if ( iSetUpWithModifications )
       
   817             {
       
   818             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::HandleCommand\
       
   819                 Channel setup modified" )
       
   820             iOpenChannelRsp.iGeneralResult = RSat::KPerformedWithModifications;
       
   821             }
       
   822         else if ( !iQueryRsp.iRequestedIconDisplayed &&
       
   823             ( ( RSat::ESelfExplanatory ==
       
   824             iOpenChannelData.iIconId.iQualifier ) ||
       
   825             ( RSat::ENotSelfExplanatory ==
       
   826             iOpenChannelData.iIconId.iQualifier ) ) )
       
   827             {
       
   828             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::HandleCommand\
       
   829                 Open channel successful, no icon displayed" )
       
   830             iOpenChannelRsp.iGeneralResult =
       
   831                 RSat::KSuccessRequestedIconNotDisplayed;
       
   832             }
       
   833         else
       
   834             {
       
   835             LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::HandleCommand\
       
   836                 Open channel successful" )
       
   837             iOpenChannelRsp.iGeneralResult = RSat::KSuccess;
       
   838             }
       
   839         }
       
   840     else
       
   841         {
       
   842         LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::HandleCommand\
       
   843             Channel not found!" )
       
   844         iOpenChannelRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
       
   845         iOpenChannelRsp.iInfoType = RSat::KMeProblem;
       
   846         iOpenChannelRsp.iAdditionalInfo.SetLength( 1 );
       
   847         iOpenChannelRsp.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
       
   848         }
       
   849 
       
   850     // If command had icon data and was done succesfully, report that icon
       
   851     // was not shown
       
   852     // To be removed when icons are allowed in this command
       
   853     if ( ( RSat::KSuccess == iOpenChannelRsp.iGeneralResult ) &&
       
   854         iIconCommand )
       
   855         {
       
   856         LOG( SIMPLE, "COpenChannelHandler::SendSuccessTerminalRsp requested\
       
   857              icon not displayed" )
       
   858         iOpenChannelRsp.iGeneralResult =
       
   859             RSat::KSuccessRequestedIconNotDisplayed;
       
   860         }
       
   861 
       
   862     // Sending terminal response
       
   863     TerminalRsp( iPCmd, iOpenChannelRspPckg );
       
   864 
       
   865     LOG( SIMPLE,
       
   866         "OPENCHANNEL: COpenChannelHandler::SendSuccessTerminalRsp exiting" )
       
   867     }
       
   868 
       
   869 // -----------------------------------------------------------------------------
       
   870 // Sends confirmation query to UI.
       
   871 // -----------------------------------------------------------------------------
       
   872 //
       
   873 void COpenChannelHandler::SendConfirmToUi()
       
   874     {
       
   875     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::SendConfirmToUi calling" )
       
   876 
       
   877     // Command Duration for Mediator Client
       
   878     TUint8 commandDuration( KSatDurationNotSet );
       
   879 
       
   880     // Launch UI of not launched. This function is called again when UI is
       
   881     // launched.
       
   882     if ( !LaunchUiSession() )
       
   883         {
       
   884         LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::SendConfirmToUi \
       
   885              not launch UI" )
       
   886         // Create IPC data to UI
       
   887         iQueryData.iCommand = ESatOpenChannelQuery;
       
   888         iQueryData.iQueryText = iOpenChannelData.iAlphaId.iAlphaId;
       
   889         iQueryData.iIconId.iIdentifier = iOpenChannelData.iIconId.iIdentifier;
       
   890         LOG2( SIMPLE, "COpenChannelHandler::SendConfirmToUi \
       
   891              iOpenChannelData.iIconId.iQualifier:%d",
       
   892              iOpenChannelData.iIconId.iQualifier )
       
   893         // Check Icon
       
   894         switch ( iOpenChannelData.iIconId.iQualifier )
       
   895             {
       
   896             case RSat::ESelfExplanatory:
       
   897                 {
       
   898                 // Icon qualifier is self explanatory (to display instead
       
   899                 // of the alpha id or text string).
       
   900                 iQueryData.iIconId.iIconQualifier = ESatSelfExplanatory;
       
   901                 break;
       
   902                 }
       
   903 
       
   904             case RSat::ENotSelfExplanatory:
       
   905                 {
       
   906                 // Icon qualifier is not self explanatory.
       
   907                 iQueryData.iIconId.iIconQualifier = ESatNotSelfExplanatory;
       
   908                 break;
       
   909                 }
       
   910 
       
   911             default:
       
   912                 {
       
   913                 // Icon qualifier not present
       
   914                 iQueryData.iIconId.iIconQualifier = ESatENoIconId;
       
   915                 break;
       
   916                 }
       
   917             }
       
   918         LOG2( SIMPLE, "COpenChannelHandler::SendConfirmToUi \
       
   919              iOpenChannelData.iAlphaId.iStatus:%d",
       
   920              iOpenChannelData.iAlphaId.iStatus )
       
   921         // Define AlphaID status
       
   922         switch ( iOpenChannelData.iAlphaId.iStatus )
       
   923             {
       
   924             case RSat::EAlphaIdNotPresent:
       
   925                 {
       
   926                 iQueryData.iAlphaIdStatus = ESatAlphaIdNotProvided;
       
   927                 commandDuration = KSatLongDuration;
       
   928                 break;
       
   929                 }
       
   930 
       
   931             case RSat::EAlphaIdProvided:
       
   932                 {
       
   933                 iQueryData.iAlphaIdStatus = ESatAlphaIdNotNull;
       
   934                 commandDuration = KSatLongDuration;
       
   935                 break;
       
   936                 }
       
   937 
       
   938             default:
       
   939                 {
       
   940                 iQueryData.iAlphaIdStatus = ESatAlphaIdNull;
       
   941                 commandDuration = KSatDurationNotSet;
       
   942                 break;
       
   943                 }
       
   944             }
       
   945 
       
   946         // Send notification to Mediator client if Cover UI is supported
       
   947         if ( iUtils->CoverUiSupported() )
       
   948             {
       
   949             LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::SendConfirmToUi \
       
   950                  CoverUiSupported" )
       
   951             TSatCommandData medEventData;
       
   952             medEventData.iPCmdNumber = iPCmd;
       
   953             medEventData.iAlphaId = iOpenChannelData.iAlphaId;
       
   954             medEventData.iDuration.iTimeUnit = RSat::ESeconds;
       
   955             medEventData.iDuration.iNumOfUnits = commandDuration;
       
   956             medEventData.iIconID = iOpenChannelData.iIconId;
       
   957             TSatCommandPckg tPckg( medEventData );
       
   958             iUtils->RaiseSatEvent( tPckg );
       
   959             }
       
   960         // Send notification to UI
       
   961         MSatUiSession* session = iUtils->SatUiHandler().UiSession();
       
   962         session->SendCommand(
       
   963             &iQueryPckg, &iQueryRspPckg, ESatSProactiveQuery );
       
   964         }
       
   965 
       
   966     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::SendConfirmToUi exiting" )
       
   967     }
       
   968 
       
   969 // -----------------------------------------------------------------------------
       
   970 // Closes the channel in error cases.
       
   971 // -----------------------------------------------------------------------------
       
   972 //
       
   973 void COpenChannelHandler::CloseChannel()
       
   974     {
       
   975     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::CloseChannel calling" )
       
   976 
       
   977     // If data channel is not null, close it
       
   978     if ( iDataChannel )
       
   979         {
       
   980         LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::CloseChannel have\
       
   981              channel" )
       
   982         iUtils->BipUtils().CloseChannel( iDataChannel->ChannelId() );
       
   983         }
       
   984 
       
   985     if ( iConnectionInfo.iCreatedApnId > 0 )
       
   986         {
       
   987         LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::CloseChannel delete\
       
   988              APN" )
       
   989         // APN created -> Remove it
       
   990         TRAP_IGNORE( iUtils->BipUtils().ApnHandler().DeleteApnL(
       
   991             iConnectionInfo.iCreatedApnId ) )
       
   992         }
       
   993 
       
   994     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::CloseChannel exiting" )
       
   995     }
       
   996 
       
   997 // -----------------------------------------------------------------------------
       
   998 // Checks parameters from SIM and makes modifications, if needed.
       
   999 // -----------------------------------------------------------------------------
       
  1000 //
       
  1001 TBool COpenChannelHandler::CheckParameters()
       
  1002     {
       
  1003     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::CheckParameters calling" )
       
  1004     // Return variable. Indicates is the context activation possible with
       
  1005     // given / modified parameters.
       
  1006     TBool paramsOk( EFalse );
       
  1007 
       
  1008     // Check buffer size
       
  1009     if ( KSatBIPMaxBufferSize < iOpenChannelData.iBufferSize ||
       
  1010          0 == iOpenChannelData.iBufferSize )
       
  1011         {
       
  1012         LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CheckParameters \
       
  1013             Changing buffersize" )
       
  1014         // Too big requested buffer size -> set to max
       
  1015         iConnectionInfo.iBufferSize = KSatBIPMaxBufferSize;
       
  1016         // put modified buffer size to terminal response
       
  1017         iOpenChannelRsp.iBufferSize = KSatBIPMaxBufferSize;
       
  1018         // Modified parameters
       
  1019         iSetUpWithModifications = ETrue;
       
  1020         }
       
  1021     else
       
  1022         {
       
  1023         iConnectionInfo.iBufferSize = iOpenChannelData.iBufferSize;
       
  1024         iOpenChannelRsp.iBufferSize = iOpenChannelData.iBufferSize;
       
  1025         }
       
  1026 
       
  1027     // Set bearer for the terminal response. This information is mandatory to
       
  1028     // each terminal response.
       
  1029     iOpenChannelRsp.iBearer = iOpenChannelData.iBearer;
       
  1030 
       
  1031     // Indicates is there destination address defined
       
  1032     const TBool destinationAddressNotDefined
       
  1033         (
       
  1034         RSat::EIPv4Address != iOpenChannelData.iDestinationAddress.iType &&
       
  1035         RSat::EIPv6Address != iOpenChannelData.iDestinationAddress.iType
       
  1036         );
       
  1037 
       
  1038     // Indicates is there a transport protocol defined
       
  1039     const TBool transportProtoNotDefined
       
  1040         (
       
  1041         RSat::ETcp != iOpenChannelData.iSimMeInterface.iTransportProto &&
       
  1042         RSat::EUdp != iOpenChannelData.iSimMeInterface.iTransportProto
       
  1043         );
       
  1044 
       
  1045     // Indicates is there a transport port number defined
       
  1046     const TBool transportPortNumberNotDefined
       
  1047         (
       
  1048         0 == iOpenChannelData.iSimMeInterface.iPrtNumber
       
  1049         );
       
  1050 
       
  1051     // Indicates is selected bearer supported
       
  1052     const TBool bearerNotSupported
       
  1053         (
       
  1054         RSat::EPCmdTypeNotSet != iOpenChannelData.iPCmdType &&
       
  1055         RSat::EGprsBearer != iOpenChannelData.iPCmdType &&
       
  1056         RSat::EAnyBearer != iOpenChannelData.iPCmdType
       
  1057         );
       
  1058 
       
  1059     // Check parameters
       
  1060     paramsOk = !( destinationAddressNotDefined ||
       
  1061                   transportProtoNotDefined ||
       
  1062                   bearerNotSupported ||
       
  1063                   transportPortNumberNotDefined );
       
  1064 
       
  1065     // Check is connection possible
       
  1066     if ( paramsOk )
       
  1067         {
       
  1068         LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CheckParameters \
       
  1069         Bearer type is GPRS" )
       
  1070         // Bearer type is GPRS
       
  1071         iBearerType = MSatBIPUtils::ESatGPRS;
       
  1072         // Set bearer type for the terminal response in case it was not defined
       
  1073         iOpenChannelRsp.iBearer.iType = RSat::EGPRSBearer;
       
  1074         // Destination address
       
  1075         iConnectionInfo.iDestination = iOpenChannelData.iDestinationAddress;
       
  1076         // Local address
       
  1077         iConnectionInfo.iSource = iOpenChannelData.iLocalAddress;
       
  1078         // Bearer parameters
       
  1079         iConnectionInfo.iBearerParams = iOpenChannelData.iBearer.iParams;
       
  1080         // Set protocol info to connection data
       
  1081         iConnectionInfo.iProtocol = iOpenChannelData.iSimMeInterface;
       
  1082         }
       
  1083     else if ( transportProtoNotDefined ||
       
  1084               bearerNotSupported ||
       
  1085               transportPortNumberNotDefined )
       
  1086         {
       
  1087         // Fail
       
  1088         LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CheckParameters \
       
  1089         Unable to connect" )
       
  1090         // If parameters are not OK, send terminal response
       
  1091         LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CommandAllowed \
       
  1092             Not valid parameters" )
       
  1093         iOpenChannelRsp.iGeneralResult = RSat::KCmdBeyondMeCapabilities;
       
  1094         iOpenChannelRsp.iInfoType = RSat::KNoAdditionalInfo;
       
  1095         iOpenChannelRsp.iAdditionalInfo.Zero();
       
  1096         }
       
  1097     else if ( destinationAddressNotDefined )
       
  1098         {
       
  1099         // Fail
       
  1100         LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CheckParameters \
       
  1101         Destination not set" )
       
  1102         iOpenChannelRsp.iGeneralResult = RSat::KErrorRequiredValuesMissing;
       
  1103         iOpenChannelRsp.iInfoType = RSat::KNoAdditionalInfo;
       
  1104         iOpenChannelRsp.iAdditionalInfo.Zero();
       
  1105         }
       
  1106     else
       
  1107         {
       
  1108         // Fail
       
  1109         LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CheckParameters \
       
  1110         Unable to connect" )
       
  1111         // If parameters are not OK, send terminal response
       
  1112         LOG( NORMAL, "OPENCHANNEL: COpenChannelHandler::CheckParameters \
       
  1113             Not valid parameters" )
       
  1114         iOpenChannelRsp.iGeneralResult = RSat::KCmdBeyondMeCapabilities;
       
  1115         iOpenChannelRsp.iInfoType = RSat::KNoAdditionalInfo;
       
  1116         iOpenChannelRsp.iAdditionalInfo.Zero();
       
  1117         }
       
  1118 
       
  1119     LOG2( SIMPLE, "OPENCHANNEL: COpenChannelHandler::CheckParameters exiting,\
       
  1120           paramsOk: %d", paramsOk )
       
  1121     return paramsOk;
       
  1122     }
       
  1123 
       
  1124 // -----------------------------------------------------------------------------
       
  1125 // Launches UI if it not active.
       
  1126 // -----------------------------------------------------------------------------
       
  1127 //
       
  1128 TBool COpenChannelHandler::LaunchUiSession()
       
  1129     {
       
  1130     LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::LaunchUiSession calling" )
       
  1131     TBool retVal( EFalse );
       
  1132 
       
  1133     // If ui session is not availabe, SATUI has to be
       
  1134     // launched.
       
  1135     if ( NULL == iUtils->SatUiHandler().UiSession() )
       
  1136         {
       
  1137         TRAPD( err,
       
  1138                iUtils->RegisterL( this, MSatUtils::ESatUiLaunched );
       
  1139                // Try to launch the ui client.
       
  1140                iUtils->SatUiHandler().LaunchSatUiL();
       
  1141              ); // End of TRAPD
       
  1142 
       
  1143         if ( KErrNone != err )
       
  1144             {
       
  1145             LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::LaunchUiSession \
       
  1146                  Ui launch failed" )
       
  1147             // Ui launch failed, unregister event
       
  1148             iUtils->UnregisterEvent( this, MSatUtils::ESatUiLaunched );
       
  1149             // Notify SIM that ui launch failed.
       
  1150             UiLaunchFailed();
       
  1151             }
       
  1152         else
       
  1153             {
       
  1154             LOG( SIMPLE, "OPENCHANNEL: COpenChannelHandler::LaunchUiSession \
       
  1155                  Ui launch successfully" )
       
  1156             // Return true indicating that we had to launch UI
       
  1157             retVal = ETrue;
       
  1158             }
       
  1159         }
       
  1160 
       
  1161     LOG2( SIMPLE, "OPENCHANNEL: COpenChannelHandler::LaunchUiSession exiting,\
       
  1162           retVal: %d", retVal )
       
  1163     return retVal;
       
  1164     }