satengine/SatServer/Commands/SetUpCallCmd/src/CSetUpCallHandler.cpp
changeset 19 e44a8c097b15
parent 12 ae8abd0db65c
child 31 a2467631ae02
--- a/satengine/SatServer/Commands/SetUpCallCmd/src/CSetUpCallHandler.cpp	Mon May 03 13:01:45 2010 +0300
+++ b/satengine/SatServer/Commands/SetUpCallCmd/src/CSetUpCallHandler.cpp	Fri May 14 16:24:46 2010 +0300
@@ -41,6 +41,20 @@
 const TUint8 KWildChar( 0x77 );
 const TUint8 KExpansionChar( 0x2E );
 
+/** Maximum name length. */ 
+const TInt KSatMaximumNameLength = 50;
+
+/** Maximum phone number length same as  used by phone. */ 
+const TInt KSatMaximumPhoneNumberLength = 100;
+
+/** The subaddress length, see ITU-T I.330 and 3GPP TS 11.14. */ 
+const TInt KSatSubAddressLength = 21;
+
+/** The maximum bearer length. The bearer capabilities as 
+defined in GSM 04.08. */ 
+const TInt KSatBearerLength = 14;
+
+
 _LIT( KFixedSimEmergencyNumber, "112" );
 
 // ======== MEMBER FUNCTIONS ========
@@ -606,70 +620,60 @@
 // Performs the request to dial
 // -----------------------------------------------------------------------------
 //
-//ETel MM API Usage for SAT Todo
-//
-//2 RSAT::TSetUpCallV6 iCapabilityConfigParams we only have one TCcp and there
-//  are two in RMobilePhone::TMobileCallParamsV7 ( according the study of tommi
-//  the second TCcp in in TMobileCallParamsV7 will be ignored )
-//3 RMobilePhone::TMobileCallParamsV7 has TBCRepeatIndicator iBCRepeatIndicator
-//  RSat::TSetUpCallV6 don't have it. Does it needed from RSat
-//4 RMobilePhone::TMobileCallParamsV7 has TMobileCallMulticallBearerMode
-//  iBearerMode, RSat::TSetUpCallV6 does not have it. can we just use the
-//  default value?
-//5 SetShowNumber in AIW not provided by ETel MM, support needed?
-//6 SetAllowMach in AIW not provided by ETel MM, support needed?
-//8 Convert the return value from RMobilePhone::DialNoFdnCheck to the SAT error
-//  code, the return value is not enough, we need get more information from
-//  GetLineInfo.
-
-
 void CSetUpCallHandler::DoSetupCall( CSetupCallRequestHandler& aHandler )
     {
     LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::DoSetupCallL calling" )
-
-    RSat::TSetUpCallType callType( iSetUpCallData.iType );
-
-    TDes& telNumber( iSetUpCallData.iAddress.iTelNumber );
-    CheckNumber( telNumber );
-
-    RMobileCall::TMobileCallParamsV7 dialParams;
-    RMobileCall::TMobileCallParamsV7Pckg package( dialParams );
+    
+    if( CheckSetupCallParam () )
+        {
 
-    //Redail has been removed from MCL, no redail support.
-    dialParams.iAutoRedial = EFalse;
-    //TODO: check do we need to set bearer model
-    dialParams.iBearerMode = RMobileCall::EMulticallNewBearer;
-    dialParams.iCallParamOrigin = RMobileCall::EOriginatorSIM;
-    dialParams.iSubAddress = iSetUpCallData.iSubAddress;
-    dialParams.iBearerCap1 = iSetUpCallData.iCapabilityConfigParams;
+        RSat::TSetUpCallType callType( iSetUpCallData.iType );
     
-    dialParams.iBCRepeatIndicator = RMobileCall::EBCAlternateMode;
-    
-    dialParams.iIconId.iQualifier = RMobileCall::ENoIconId;
-    
+        TDes& telNumber( iSetUpCallData.iAddress.iTelNumber );
+        CheckNumber( telNumber );
+
+        RMobileCall::TMobileCallParamsV7 dialParams;
+        RMobileCall::TMobileCallParamsV7Pckg package( dialParams );
     
-    dialParams.iAlphaId = iSetUpCallData.iAlphaIdCallSetUpPhase.iAlphaId;
-    LOG2( NORMAL, 
-        "SETUPCALL: CSetUpCallHandler::DoSetupCallL id:%S",
-        &dialParams.iAlphaId )
-    
-    LOG2( NORMAL, 
-        "SETUPCALL: CSetUpCallHandler::DoSetupCallL number:%S",
-        &iSetUpCallData.iAddress.iTelNumber )
-    
-    TBool terminateOtherCall( EFalse );
-    // check if we need to disconnect other calls
-    if ( ( RSat::EDisconnectOtherCalls == callType ) ||
-         ( RSat::EDisconnectOtherCallsWithRedial == callType ) )
+        //Redail has been removed from MCL, no redail support.
+        dialParams.iAutoRedial = EFalse;
+        dialParams.iBearerMode = RMobileCall::EMulticallNewBearer;
+        dialParams.iCallParamOrigin = RMobileCall::EOriginatorSIM;
+        dialParams.iSubAddress = iSetUpCallData.iSubAddress;
+        dialParams.iBearerCap1 = iSetUpCallData.iCapabilityConfigParams;
+        
+        dialParams.iBCRepeatIndicator = RMobileCall::EBCAlternateMode;
+        
+        dialParams.iIconId.iQualifier = RMobileCall::ENoIconId;
+        
+        
+        dialParams.iAlphaId = iSetUpCallData.iAlphaIdCallSetUpPhase.iAlphaId;
+        LOG2( NORMAL, 
+            "SETUPCALL: CSetUpCallHandler::DoSetupCallL id:%S",
+            &dialParams.iAlphaId )
+        
+        LOG2( NORMAL, 
+            "SETUPCALL: CSetUpCallHandler::DoSetupCallL number:%S",
+            &iSetUpCallData.iAddress.iTelNumber )
+        
+        TBool terminateOtherCall( EFalse );
+        // check if we need to disconnect other calls
+        if ( ( RSat::EDisconnectOtherCalls == callType ) ||
+             ( RSat::EDisconnectOtherCallsWithRedial == callType ) )
+            {
+            LOG( SIMPLE, 
+            "SETUPCALL: CSetUpCallHandler::DoSetupCallL end other call" )
+            terminateOtherCall = ETrue ;
+            }
+        
+        aHandler.DialNumber( package, iSetUpCallData.iAddress.iTelNumber,
+                terminateOtherCall, iUtils->CreateAsyncToSyncHelper() );
+        }
+    else
         {
-        LOG( SIMPLE, 
-        "SETUPCALL: CSetUpCallHandler::DoSetupCallL end other call" )
-        terminateOtherCall = ETrue ;
+        CompleteSetupCallWithStatus( KErrArgument );
         }
     
-    aHandler.DialNumber( package, iSetUpCallData.iAddress.iTelNumber,
-            terminateOtherCall, iUtils->CreateAsyncToSyncHelper() );
-    
     LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::DoSetupCallL exiting" )
     }
 
@@ -733,6 +737,7 @@
                 }
 
             case KErrGeneral:
+            case KErrArgument:
                 {
                 LOG( SIMPLE, 
                 "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus Data \
@@ -895,7 +900,7 @@
 void CSetUpCallHandler::CheckNumber( TDes& aNumber ) const
     {
     LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckNumber calling" )
-
+    
     for ( TInt i = 0; i < aNumber.Length(); i++ )
         {
         // check values
@@ -954,4 +959,42 @@
     LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CreateEmergencyCall exiting" )    
     }
 
+// -----------------------------------------------------------------------------
+// check setup call param.
+// -----------------------------------------------------------------------------
+//
+TBool CSetUpCallHandler::CheckSetupCallParam()
+    {
+    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckSetupCallParam calling" )
+
+    TBool valid( ETrue );
+    if ( iSetUpCallData.iAddress.iTelNumber.Length()
+          > KSatMaximumPhoneNumberLength )
+        {
+        LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckSetupCallParam num" )
+        valid = EFalse;
+        }    
+    else if ( iSetUpCallData.iAlphaIdCallSetUpPhase.iAlphaId.Length()
+               > KSatMaximumNameLength )
+        {
+        LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckSetupCallParam name" )
+        valid = EFalse;
+        }    
+    else if ( iSetUpCallData.iSubAddress.Length() > KSatSubAddressLength )
+        {
+        LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckSetupCallParam sub" )
+        valid = EFalse;
+        }    
+    else if ( iSetUpCallData.iCapabilityConfigParams.Length()
+               > KSatBearerLength )
+        {
+        LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckSetupCallParam bear" )
+        valid = EFalse;
+        }    
+    LOG2( SIMPLE, 
+    "SETUPCALL: CSetUpCallHandler::CheckSetupCallParam exiting %d", valid )
+    return valid;        
+    }
+
+
 // End Of File