adaptationlayer/tsy/simatktsy_dll/src/satmosmsctrl.cpp
changeset 9 8486d82aef45
parent 8 6295dc2169f3
equal deleted inserted replaced
8:6295dc2169f3 9:8486d82aef45
    26 
    26 
    27 #include <pn_const.h>           // server id constants
    27 #include <pn_const.h>           // server id constants
    28 #include <tisi.h>               // isi message
    28 #include <tisi.h>               // isi message
    29 #include <uiccisi.h>            // UICC server
    29 #include <uiccisi.h>            // UICC server
    30 #include <smsisi.h>             // sms server
    30 #include <smsisi.h>             // sms server
    31 #include <atk_sharedisi.h>
       
    32 #include "OstTraceDefinitions.h"
    31 #include "OstTraceDefinitions.h"
    33 #ifdef OST_TRACE_COMPILER_IN_USE
    32 #ifdef OST_TRACE_COMPILER_IN_USE
    34 #include "satmosmsctrlTraces.h"
    33 #include "satmosmsctrlTraces.h"
    35 #endif
    34 #endif
    36 
    35 
    44 const TUint8 KMaxLengthOfResourceReq    = 255;
    43 const TUint8 KMaxLengthOfResourceReq    = 255;
    45 const TUint8 KSmControlAllowed          = 0;
    44 const TUint8 KSmControlAllowed          = 0;
    46 const TUint8 KSmControlNotAllowed       = 1;
    45 const TUint8 KSmControlNotAllowed       = 1;
    47 const TUint8 KSmControlAllowedWithModif = 2;
    46 const TUint8 KSmControlAllowedWithModif = 2;
    48 const TUint8 KSmsSubmitAddrDataIndex    = 3;
    47 const TUint8 KSmsSubmitAddrDataIndex    = 3;
       
    48 const TUint8 KMessageParamsIndex        = 0;
       
    49 const TUint8 KCommandTypeMask           = 0x03;
       
    50 const TUint8 KSmsCommandAddrIndex       = 5;
       
    51 const TUint8 KSmsSubmitAddrIndex        = 2;
       
    52 const TUint8 KTpDaTonNpiIndex           = 1;
       
    53 const TUint8 KTpDaTonNpiSize            = 1;
    49 
    54 
    50 // ==================== MEMBER FUNCTIONS ====================================
    55 // ==================== MEMBER FUNCTIONS ====================================
    51 
    56 
    52 // -----------------------------------------------------------------------------
    57 // -----------------------------------------------------------------------------
    53 // CSatMoSmsCtrl::CSatMoSmsCtrl
    58 // CSatMoSmsCtrl::CSatMoSmsCtrl
    67         iIsMoSmsCtrlActivated( EFalse ),
    72         iIsMoSmsCtrlActivated( EFalse ),
    68         iMoSmsCtrlEnvelopeTransactionId( KZero ),
    73         iMoSmsCtrlEnvelopeTransactionId( KZero ),
    69         iMoSmsCtrlReqTransactionId( KZero ),
    74         iMoSmsCtrlReqTransactionId( KZero ),
    70         iSenderObject( KZero )
    75         iSenderObject( KZero )
    71     {
    76     {
    72     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CSATMOSMSCTRL, "CSatMoSmsCtrl::CSatMoSmsCtrl" );
    77     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_CSATMOSMSCTRL_TD, "CSatMoSmsCtrl::CSatMoSmsCtrl" );
    73     }
    78     }
    74 
    79 
    75 
    80 
    76 // -----------------------------------------------------------------------------
    81 // -----------------------------------------------------------------------------
    77 // CSatMoSmsCtrl::ConstructL
    82 // CSatMoSmsCtrl::ConstructL
    78 // Symbian 2nd phase constructor can leave.
    83 // Symbian 2nd phase constructor can leave.
    79 // -----------------------------------------------------------------------------
    84 // -----------------------------------------------------------------------------
    80 //
    85 //
    81 void CSatMoSmsCtrl::ConstructL()
    86 void CSatMoSmsCtrl::ConstructL()
    82     {
    87     {
    83     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CONSTRUCTL, "CSatMoSmsCtrl::ConstructL" );
    88     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_CONSTRUCTL_TD, "CSatMoSmsCtrl::ConstructL" );
    84 #ifdef INFO_PP_ATK_MO_SM_CONTROL
    89 /*#ifdef INFO_PP_ATK_MO_SM_CONTROL
    85     // Check MO SMS control is supported by ME's Product Profile
    90     // Check MO SMS control is supported by ME's Product Profile
    86     iSatMessHandler->InfoPpReadReq( INFO_PP_ATK_MO_SM_CONTROL );
    91     iSatMessHandler->InfoPpReadReq( INFO_PP_ATK_MO_SM_CONTROL );
    87 #else
    92 #else
    88     // Check if MO-SMS control should be activated in SMS server
    93     // Check if MO-SMS control should be activated in SMS server
    89     // This is done by sending a request SimReadTableReq to Sim server, with
    94     // This is done by sending a request SimReadTableReq to Sim server, with
    90     // service type KSimStMoSmsSimControlAvail
    95     // service type KSimStMoSmsSimControlAvail
    91     iSatMessHandler->SimReadTableReq( SIM_ST_MO_SMS_SIM_CONTROL_AVAIL );
    96     iSatMessHandler->SimReadTableReq( SIM_ST_MO_SMS_SIM_CONTROL_AVAIL );
    92 #endif // INFO_PP_ATK_MO_SM_CONTROL
    97 #endif // INFO_PP_ATK_MO_SM_CONTROL*/
    93     }
    98     }
    94 
    99 
    95 
   100 
    96 // -----------------------------------------------------------------------------
   101 // -----------------------------------------------------------------------------
    97 // CSatMoSmsCtrl::NewL
   102 // CSatMoSmsCtrl::NewL
   102         (
   107         (
   103         CSatMessHandler*    aSatMessHandler,
   108         CSatMessHandler*    aSatMessHandler,
   104         CTsySatMessaging*   aSatMessaging
   109         CTsySatMessaging*   aSatMessaging
   105         )
   110         )
   106     {
   111     {
   107     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_NEWL, "CSatMoSmsCtrl::NewL" );
   112     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_NEWL_TD, "CSatMoSmsCtrl::NewL" );
   108     TFLOGSTRING("TSY: CSatMoSmsCtrl::NewL");
   113     TFLOGSTRING("TSY: CSatMoSmsCtrl::NewL");
   109 
   114 
   110     CSatMoSmsCtrl* self =
   115     CSatMoSmsCtrl* self =
   111         new( ELeave ) CSatMoSmsCtrl( aSatMessHandler, aSatMessaging );
   116         new( ELeave ) CSatMoSmsCtrl( aSatMessHandler, aSatMessaging );
   112 
   117 
   123 // Destructor
   128 // Destructor
   124 // -----------------------------------------------------------------------------
   129 // -----------------------------------------------------------------------------
   125 //
   130 //
   126 CSatMoSmsCtrl::~CSatMoSmsCtrl()
   131 CSatMoSmsCtrl::~CSatMoSmsCtrl()
   127     {
   132     {
   128     OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_CSATMOSMSCTRL, "CSatMoSmsCtrl::~CSatMoSmsCtrl" );
   133     OstTrace0( TRACE_NORMAL,  DUP1_CSATMOSMSCTRL_CSATMOSMSCTRL_TD, "CSatMoSmsCtrl::~CSatMoSmsCtrl" );
   129     TFLOGSTRING("TSY: CSatMoSmsCtrl::~CSatMoSmsCtrl");
   134     TFLOGSTRING("TSY: CSatMoSmsCtrl::~CSatMoSmsCtrl");
   130     }
   135     }
   131 
   136 
   132 
   137 
   133 // -----------------------------------------------------------------------------
   138 // -----------------------------------------------------------------------------
   135 // Returns ETrue if MO-SMS Control is activated
   140 // Returns ETrue if MO-SMS Control is activated
   136 // -----------------------------------------------------------------------------
   141 // -----------------------------------------------------------------------------
   137 //
   142 //
   138 TBool CSatMoSmsCtrl::IsActivated()
   143 TBool CSatMoSmsCtrl::IsActivated()
   139     {
   144     {
   140     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_ISACTIVATED, "CSatMoSmsCtrl::IsActivated" );
   145     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_ISACTIVATED_TD, "CSatMoSmsCtrl::IsActivated" );
   141     TFLOGSTRING("TSY: CSatMoSmsCtrl::IsActivated");
   146     TFLOGSTRING("TSY: CSatMoSmsCtrl::IsActivated");
   142     return iIsMoSmsCtrlActivated;
   147     return iIsMoSmsCtrlActivated;
   143     }
   148     }
   144 
   149 
   145 // -----------------------------------------------------------------------------
   150 // -----------------------------------------------------------------------------
   147 // Set iIsMoSmsCtrlActivated to ETrue if MO-SMS Control has to be activated
   152 // Set iIsMoSmsCtrlActivated to ETrue if MO-SMS Control has to be activated
   148 // -----------------------------------------------------------------------------
   153 // -----------------------------------------------------------------------------
   149 //
   154 //
   150 void CSatMoSmsCtrl::Activate()
   155 void CSatMoSmsCtrl::Activate()
   151     {
   156     {
   152     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_ACTIVATE, "CSatMoSmsCtrl::Activate" );
   157     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_ACTIVATE_TD, "CSatMoSmsCtrl::Activate" );
   153     TFLOGSTRING("TSY: CSatMoSmsCtrl::Activate");
   158     TFLOGSTRING("TSY: CSatMoSmsCtrl::Activate");
   154     iIsMoSmsCtrlActivated = ETrue;
   159     iIsMoSmsCtrlActivated = ETrue;
   155     }
   160     }
   156 
   161 
   157 // -----------------------------------------------------------------------------
   162 // -----------------------------------------------------------------------------
   159 // Set iIsMoSmsCtrlActivated to EFalse if MO-SMS Control has to be deactivated
   164 // Set iIsMoSmsCtrlActivated to EFalse if MO-SMS Control has to be deactivated
   160 // -----------------------------------------------------------------------------
   165 // -----------------------------------------------------------------------------
   161 //
   166 //
   162 void CSatMoSmsCtrl::Deactivate()
   167 void CSatMoSmsCtrl::Deactivate()
   163     {
   168     {
   164     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_DEACTIVATE, "CSatMoSmsCtrl::Deactivate" );
   169     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_DEACTIVATE_TD, "CSatMoSmsCtrl::Deactivate" );
   165     TFLOGSTRING("TSY: CSatMoSmsCtrl::Deactivate");
   170     TFLOGSTRING("TSY: CSatMoSmsCtrl::Deactivate");
   166     iIsMoSmsCtrlActivated = EFalse;
   171     iIsMoSmsCtrlActivated = EFalse;
   167     }
   172     }
   168 
   173 
   169 // -----------------------------------------------------------------------------
   174 // -----------------------------------------------------------------------------
   174 TInt CSatMoSmsCtrl::UiccCatRespEnvelopeReceived
   179 TInt CSatMoSmsCtrl::UiccCatRespEnvelopeReceived
   175         (
   180         (
   176         const TIsiReceiveC& aIsiMessage //Received data notification
   181         const TIsiReceiveC& aIsiMessage //Received data notification
   177         )
   182         )
   178     {
   183     {
   179     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_UICCCATRESPENVELOPERECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived" );
   184     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_UICCCATRESPENVELOPERECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived" );
   180     TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived");
   185     TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived");
   181     TBuf8<KMaxLengthOfAtkSwDataNtf> addr1;
   186     TBuf8<KMaxLengthOfAtkSwDataNtf> addr1;
   182     TBuf8<KMaxLengthOfAtkSwDataNtf> addr2;
   187     TBuf8<KMaxLengthOfAtkSwDataNtf> addr2;
   183     iWaitingForEnvelopeResp = EFalse;
   188     iWaitingForEnvelopeResp = EFalse;
   184 
   189 
   219             atkResult = TSatUtility::Sw1Sw2Check( sw1, sw2 );
   224             atkResult = TSatUtility::Sw1Sw2Check( sw1, sw2 );
   220 
   225 
   221             if ( KError != atkResult ) // If ATK result is OK
   226             if ( KError != atkResult ) // If ATK result is OK
   222                 {
   227                 {
   223                 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Ok");
   228                 TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Ok");
   224                 OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Ok" );
   229                 OstTrace0( TRACE_NORMAL,  DUP1_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Ok" );
   225                 RSat::TAlphaId alphaId;
   230                 RSat::TAlphaId alphaId;
   226                 alphaId.iAlphaId.Zero();
   231                 alphaId.iAlphaId.Zero();
   227                 TBool isAlphaIdEmpty( EFalse );
   232                 TBool isAlphaIdEmpty( EFalse );
   228 
   233 
   229                 if ( KMaxLengthOfAtkSwDataNtf < apduLength ) // If data length greater than 255
   234                 if ( KMaxLengthOfAtkSwDataNtf < apduLength ) // If data length greater than 255
   230                     {
   235                     {
   231                     TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, the length of Sim resp data is > 255" );
   236                     TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, the length of Sim resp data is > 255" );
   232                     OstTrace0( TRACE_NORMAL, DUP2_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, the length of Sim resp data is > 255" );
   237                     OstTrace0( TRACE_NORMAL,  DUP2_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, the length of Sim resp data is > 255" );
   233                     // Data is not consistent, so not allowed condition
   238                     // Data is not consistent, so not allowed condition
   234                     if( KSmControlNotAllowed == apduData[0] )
   239                     if( KSmControlNotAllowed == apduData[0] )
   235                         {
   240                         {
   236                         resourceStatus = SMS_RESOURCE_DENIED;
   241                         resourceStatus = SMS_RESOURCE_DENIED;
   237                         }
   242                         }
   251                         iSenderObject ) );
   256                         iSenderObject ) );
   252                     }
   257                     }
   253                 else if ( apduLength ) // If data length in non zero and less than 255
   258                 else if ( apduLength ) // If data length in non zero and less than 255
   254                     {
   259                     {
   255                     TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()!=0 ");
   260                     TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()!=0 ");
   256                     OstTrace0( TRACE_NORMAL, DUP3_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()!=0 " );
   261                     OstTrace0( TRACE_NORMAL,  DUP3_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()!=0 " );
   257 
   262 
   258                     // Note: The alpha id can be provided by the SIM even if the addresses
   263                     // Note: The alpha id can be provided by the SIM even if the addresses
   259                     // have not been modified.
   264                     // have not been modified.
   260                     ParseAtkSwDataNtf( apduData, addr1, addr2, alphaId, isAlphaIdEmpty );
   265                     ParseAtkSwDataNtf( apduData, addr1, addr2, alphaId, isAlphaIdEmpty );
   261 
   266 
   273                             {
   278                             {
   274                             resourceStatus  = SMS_RESOURCE_ALLOWED;
   279                             resourceStatus  = SMS_RESOURCE_ALLOWED;
   275                             }
   280                             }
   276                         FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 );
   281                         FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 );
   277                         TFLOGSTRING2("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, apduData[0]: %d",apduData[0] );
   282                         TFLOGSTRING2("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, apduData[0]: %d",apduData[0] );
   278                         OstTrace1( TRACE_NORMAL, DUP4_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, apduData[0]: %d", apduData[0] );
   283                         OstTrace1( TRACE_NORMAL,  DUP4_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, apduData[0]: %d", apduData[0] );
   279                        }
   284                        }
   280                     else
   285                     else
   281                        {
   286                        {
   282                        TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Sim response data not consistent" );
   287                        TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Sim response data not consistent" );
   283                        OstTrace0( TRACE_NORMAL, DUP5_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Sim response data not consistent" );
   288                        OstTrace0( TRACE_NORMAL,  DUP5_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Sim response data not consistent" );
   284                        if( KSmControlNotAllowed == apduData[0] )
   289                        if( KSmControlNotAllowed == apduData[0] )
   285                            {
   290                            {
   286                            resourceStatus = SMS_RESOURCE_DENIED;
   291                            resourceStatus = SMS_RESOURCE_DENIED;
   287                            }
   292                            }
   288                        else
   293                        else
   303                         }
   308                         }
   304                     } // end of if statement for data length nonzero and less than 255
   309                     } // end of if statement for data length nonzero and less than 255
   305                 else  // block for data length zero
   310                 else  // block for data length zero
   306                     {
   311                     {
   307                     TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()=0 ");
   312                     TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()=0 ");
   308                     OstTrace0( TRACE_NORMAL, DUP6_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()=0" );
   313                     OstTrace0( TRACE_NORMAL,  DUP6_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()=0" );
   309                     TUint8 resourceStatus( SMS_RESOURCE_ALLOWED );
   314                     TUint8 resourceStatus( SMS_RESOURCE_ALLOWED );
   310                     FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 );
   315                     FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 );
   311                     }// end of block with data length zero
   316                     }// end of block with data length zero
   312 
   317 
   313                 // If AlphaID is present, the client SatServer
   318                 // If AlphaID is present, the client SatServer
   347                 }
   352                 }
   348             }
   353             }
   349         else // else for UICC status not ok
   354         else // else for UICC status not ok
   350             {
   355             {
   351             TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, KAtkError = atkResult ");
   356             TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, KAtkError = atkResult ");
   352             OstTrace0( TRACE_NORMAL, DUP7_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, KAtkError = atkResult" );
   357             OstTrace0( TRACE_NORMAL,  DUP7_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, KAtkError = atkResult" );
   353             TUint8 resourceStatus = SMS_RESOURCE_DENIED;
   358             TUint8 resourceStatus = SMS_RESOURCE_DENIED;
   354             FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 );
   359             FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 );
   355             }
   360             }
   356         } // end if if UICC status is ok
   361         } // end if if UICC status is ok
   357 
   362 
   375         (
   380         (
   376         const TIsiReceiveC& aIsiMessage //Received data notification
   381         const TIsiReceiveC& aIsiMessage //Received data notification
   377         )
   382         )
   378     {
   383     {
   379     TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceivedL");
   384     TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceivedL");
   380     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SMSRESOURCEINDRECEIVEDL, "CSatMoSmsCtrl::SmsResourceIndReceivedL" );
   385     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_SMSRESOURCEINDRECEIVEDL_TD, "CSatMoSmsCtrl::SmsResourceIndReceivedL" );
   381 
   386 
   382     TUint sbOffset;
   387     TUint sbOffset;
   383 
   388 
   384     // Save the transaction id, which is going to
   389     // Save the transaction id, which is going to
   385     // be re-used in the resp.
   390     // be re-used in the resp.
   451      else
   456      else
   452          {
   457          {
   453          iUserDataSubblock.Zero();
   458          iUserDataSubblock.Zero();
   454          }
   459          }
   455 
   460 
   456      //Check if location data is present. Otherwise response to SmsResourceInd
   461     //Check if location data is present. Otherwise response to SmsResourceInd
   457      //is always ALLOWED.
   462     //is always ALLOWED.
   458      if ( !iSatMessHandler->ServiceAvailable() )
   463     if ( !iSatMessHandler->ServiceAvailable() )
   459          {
   464         {
   460          TBuf8<KMaxLengthOfResourceReq> dataResp;
   465         TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceivedL: Not Allowed Condition, Send response to SMS server");
   461          TIsiSend resourceReq( dataResp );
   466         OstTrace0( TRACE_NORMAL,  DUP1_CSATMOSMSCTRL_SMSRESOURCEINDRECEIVEDL_TD, "CSatMoSmsCtrl::SmsResourceIndReceivedL: Not Allowed conditon, Send response to SMS server" );
   462 
   467 
   463          dataResp.AppendFill( KPadding, 1);       // filer byte
   468         SendSmsResourceReq(
   464          dataResp.Append( 5 );                // no of Subblocks
   469             SMS_RESOURCE_ALLOWED,
   465 
   470             SMS_CAUSE_TYPE_COMMON,
   466          // Add first SB Resource Subblock
   471             SMS_OK );
   467          TIsiSubBlock resource( dataResp, SMS_SB_RESOURCE ,
   472         }
   468              EIsiSubBlockTypeId16Len16 );                      // Message ID and Subblock length
   473     else
   469 
   474         {
   470          dataResp.Append( iResourceId >> 8 );        // SMS Resource IDs MSB
       
   471 
       
   472          dataResp.Append( iResourceId );           // SMS resource IDs LSB
       
   473 
       
   474          dataResp.AppendFill( KPadding,2 );           // Filler Bytes
       
   475          resource.CompleteSubBlock();
       
   476 
       
   477          // Add 2nd resource sequence ID subblock
       
   478 
       
   479          TIsiSubBlock resourceSeqId( dataResp, SMS_SB_RESOURCE_SEQ_ID ,
       
   480              EIsiSubBlockTypeId16Len16 );
       
   481          dataResp.Append(iSequenceId);                // Sequence ID
       
   482          dataResp.AppendFill( KPadding, 3 );
       
   483          resourceSeqId.CompleteSubBlock();
       
   484 
       
   485 
       
   486          // Add Third subblock SMS_SB_RESOURCE_STATUS
       
   487 
       
   488          TIsiSubBlock resourceStatus( dataResp, SMS_SB_RESOURCE_STATUS ,
       
   489              EIsiSubBlockTypeId16Len16 );
       
   490          dataResp.Append( SMS_RESOURCE_ALLOWED );            // Resource status
       
   491          dataResp.AppendFill( KPadding, 3 );
       
   492          resourceStatus.CompleteSubBlock();
       
   493 
       
   494          // Add 4th subblock SMS_SB_ADDRESS (SMSC)
       
   495          TIsiSubBlock addressSb( dataResp, SMS_SB_ADDRESS ,
       
   496              EIsiSubBlockTypeId16Len16 );
       
   497          dataResp.Append( SMS_SMSC_ADDRESS );            // Addrees Type
       
   498          dataResp.Append( iAddressSubblock.Length() );
       
   499          dataResp.Append( iAddressSubblock );
       
   500 
       
   501          // Filler bytes calculation for SMSC address subblock
       
   502          TUint8 fillbytes = 0;
       
   503          while(( iAddressSubblock.Length()+ 6 + fillbytes )%4)
       
   504              {
       
   505              fillbytes++;
       
   506              }
       
   507 
       
   508          dataResp.AppendFill( KPadding,fillbytes );
       
   509          addressSb.CompleteSubBlock();
       
   510 
       
   511    // Add 5th Subblock SMS_SB_TPDU (Destination address)
       
   512 
       
   513          TIsiSubBlock userDataSb( dataResp, SMS_SB_TPDU ,
       
   514              EIsiSubBlockTypeId16Len16 );
       
   515          dataResp.Append( iUserDataSubblock.Length() );            // Addrees Length
       
   516          dataResp.Append( KPadding );
       
   517          dataResp.Append( iUserDataSubblock );
       
   518 
       
   519          // Filler bytes calculation for user data subblock
       
   520          fillbytes = 0;
       
   521          while(( iUserDataSubblock.Length()+ 6 + fillbytes )%4 )
       
   522              {
       
   523              fillbytes++;
       
   524              }
       
   525 
       
   526          dataResp.AppendFill( KPadding,fillbytes );
       
   527          userDataSb.CompleteSubBlock();
       
   528 
       
   529           TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceived: Not Allowed Condition, Send response to SMS server");
       
   530           OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_SMSRESOURCEINDRECEIVED, "CSatMoSmsCtrl::SmsResourceIndReceived: Not Allowed conditon, Send response to SMS server" );
       
   531 
       
   532           // Send Req to Sms server with allowed status
       
   533           iSatMessHandler->SendSmsResourceReq(
       
   534               iMoSmsCtrlReqTransactionId,
       
   535               dataResp,
       
   536               iSenderObject );
       
   537          }
       
   538      else
       
   539          {
       
   540         if( iIsMoSmsCtrlActivated )    // Check is MO SMS is activated or not
   475         if( iIsMoSmsCtrlActivated )    // Check is MO SMS is activated or not
   541             {
   476             {
   542             TPtrC8 addressData2;
   477 TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceivedL, Send envelope");
   543 
   478 OstTrace0( TRACE_NORMAL,  DUP3_CSATMOSMSCTRL_SMSRESOURCEINDRECEIVEDL_TD, "CSatMoSmsCtrl::SmsResourceIndReceivedL, Send envelope" );
   544             if ( iUserDataSubblock.Length() )
       
   545                 {
       
   546                 // check for message type
       
   547                 // Whether its a command type message or Submit type
       
   548                 if(KSmsCommandType == ( iUserDataSubblock[0]& 0x03 ))
       
   549                     {
       
   550                     iMessageType = KSmsCommandType;
       
   551                     TPtrC8 phoneNumber = &iUserDataSubblock[5];
       
   552                     // Addition of two for Type of number semi octet
       
   553                     addressData2.Set(
       
   554                         phoneNumber.Mid( 1, (iUserDataSubblock[5]/2)+1 ) );
       
   555                     }
       
   556                 else if( KSmsSubmitType == ( iUserDataSubblock[0] & 0x03 ) )
       
   557                     {
       
   558                     iMessageType = KSmsSubmitType;
       
   559                     TPtrC8 phoneNumber = &iUserDataSubblock[2];
       
   560                     // Addition of two for Type of number semi octet
       
   561                     addressData2.Set(
       
   562                         phoneNumber.Mid( 1, (iUserDataSubblock[2]/2)+1 ) );
       
   563                     }
       
   564                 }
       
   565             // Dialled Number String, the length has to be removed (first byte)
       
   566 
   479 
   567             iMoSmsCtrlEnvelopeTransactionId = iSatMessaging->GetTransactionId();
   480             iMoSmsCtrlEnvelopeTransactionId = iSatMessaging->GetTransactionId();
   568 
   481             FormMoSmsCtrlEnvelope();
   569 TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceived, Send envelope");
       
   570 OstTrace0( TRACE_NORMAL, DUP3_CSATMOSMSCTRL_SMSRESOURCEINDRECEIVED, "CSatMoSmsCtrl::SmsResourceIndReceived, Send envelope" );
       
   571 
       
   572             // The envelope is sent if MO SMS is activated
       
   573             // iAddressSubblock is not sent as it's received
       
   574             // from SMS server because of iAddressSubblock's first
       
   575             // byte is length of the address data and MO SMS Control envelope
       
   576             // is NOT allowed to contain that in address data. So length
       
   577             // field is skipped
       
   578             SendMoSmsCtrlEnvelope(
       
   579                 iMoSmsCtrlEnvelopeTransactionId,
       
   580                 iAddressSubblock.Mid( 1, iAddressSubblock.Length() - 1 ),
       
   581                 addressData2
       
   582                 );
       
   583             }
   482             }
   584         else        // If MO SMS is not activated
   483         else        // If MO SMS is not activated
   585             {
   484             {
   586             TBuf8<KMaxLengthOfResourceReq> dataResp;
   485             SendSmsResourceReq(
   587             TIsiSend resourceReq( dataResp );
   486                 SMS_RESOURCE_DENIED,
   588 
   487                 SMS_CAUSE_TYPE_COMMON,
   589             dataResp.AppendFill( KPadding, 1 );       // filer byte
   488                 SMS_ERR_ROUTE_NOT_ALLOWED );
   590             dataResp.Append( 4 );                // no of Subblocks
   489             }
   591 
   490         }
   592             // Add first SB Resource Subblock
       
   593             TIsiSubBlock resource( dataResp, SMS_SB_RESOURCE ,
       
   594                 EIsiSubBlockTypeId16Len16 );          // Message ID and Subblock length
       
   595 
       
   596             dataResp.Append( iResourceId >> 8 );        // SMS Resource IDs MSB
       
   597 
       
   598             dataResp.Append( iResourceId );             // SMS resource IDs LSB
       
   599 
       
   600             dataResp.AppendFill( KPadding, 2 );         // Filler Bytes
       
   601             resource.CompleteSubBlock();
       
   602 
       
   603             // Add 2nd resource sequence ID subblock
       
   604 
       
   605             TIsiSubBlock resourceSeqId( dataResp, SMS_SB_RESOURCE_SEQ_ID ,
       
   606                 EIsiSubBlockTypeId16Len16 );
       
   607             dataResp.Append( iSequenceId );              // Sequence ID
       
   608             dataResp.AppendFill( KPadding, 3 );
       
   609             resourceSeqId.CompleteSubBlock();
       
   610 
       
   611             // Add Third subblock
       
   612 
       
   613             TIsiSubBlock resourceStatus( dataResp, SMS_SB_RESOURCE_STATUS ,
       
   614                 EIsiSubBlockTypeId16Len16 );
       
   615             dataResp.Append( SMS_RESOURCE_DENIED );      // Resource status
       
   616             dataResp.AppendFill( KPadding, 3 );
       
   617             resourceStatus.CompleteSubBlock();
       
   618 
       
   619             // No address and User data Subblocks because Here resource ID is not the activated
       
   620 
       
   621             // Add cause subblock
       
   622 
       
   623             TIsiSubBlock sbCause( dataResp,SMS_SB_CAUSE,
       
   624                     EIsiSubBlockTypeId16Len16 );
       
   625 
       
   626             dataResp.Append( SMS_CAUSE_TYPE_COMMON );
       
   627             dataResp.Append( SMS_ERR_ROUTE_NOT_ALLOWED );
       
   628             dataResp.Append( KPadding, 2 );
       
   629 
       
   630             // Send resp to Sms server with not allowed status
       
   631             iSatMessHandler->SendSmsResourceReq(
       
   632                 iMoSmsCtrlReqTransactionId,
       
   633                 dataResp,
       
   634                 iSenderObject );
       
   635 
       
   636             }
       
   637         }
       
   638 
       
   639     }
   491     }
   640 
   492 
   641 // -----------------------------------------------------------------------------
   493 // -----------------------------------------------------------------------------
   642 // CSatMoSmsCtrl::SendMoSmsCtrlEnvelope
   494 // CSatMoSmsCtrl::SendMoSmsCtrlEnvelope
   643 // Send an envelope to SIM server in order to check wheter the SMS
   495 // Send an envelope to SIM server in order to check wheter the SMS
   650         TUint8 aTraId,
   502         TUint8 aTraId,
   651         const TDesC8& aAddressData1,
   503         const TDesC8& aAddressData1,
   652         const TDesC8& aAddressData2
   504         const TDesC8& aAddressData2
   653         )
   505         )
   654     {
   506     {
   655     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SENDMOSMSCTRLENVELOPE, "CSatMoSmsCtrl::SendMoSmsCtrlEnvelope" );
   507     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_SENDMOSMSCTRLENVELOPE_TD, "CSatMoSmsCtrl::SendMoSmsCtrlEnvelope" );
   656     TFLOGSTRING("TSY:CSatMoSmsCtrl::SendMoSmsCtrlEnvelope");
   508     TFLOGSTRING("TSY:CSatMoSmsCtrl::SendMoSmsCtrlEnvelope");
   657 
   509 
   658     // Get location info
   510     // Get location info
   659     const CSatMessHandler::TLocationInfo& locInfo
   511     const CSatMessHandler::TLocationInfo& locInfo
   660         = iSatMessHandler->LocationInfo();
   512         = iSatMessHandler->LocationInfo();
   709         TDes8& aAddr2,
   561         TDes8& aAddr2,
   710         RSat::TAlphaId& aAlphaId,
   562         RSat::TAlphaId& aAlphaId,
   711         TBool& aEmptyAlphaId
   563         TBool& aEmptyAlphaId
   712         )
   564         )
   713     {
   565     {
   714     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_PARSEATKSWDATANTF, "CSatMoSmsCtrl::ParseAtkSwDataNtf" );
   566     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_PARSEATKSWDATANTF_TD, "CSatMoSmsCtrl::ParseAtkSwDataNtf" );
   715     TFLOGSTRING("TSY:CSatMoSmsCtrl::ParseAtkSwDataNtf");
   567     TFLOGSTRING("TSY:CSatMoSmsCtrl::ParseAtkSwDataNtf");
   716 
   568 
   717     // Input data:
   569     // Input data:
   718     // aAtkData[0] : result
   570     // aAtkData[0] : result
   719     // aAtkData[1][2] : length of BER-TLV, set n=1 if aAtkData[1]=0x81
   571     // aAtkData[1][2] : length of BER-TLV, set n=1 if aAtkData[1]=0x81
   736     TUint8 tag( aAtkData[indexInBerTlv] );
   588     TUint8 tag( aAtkData[indexInBerTlv] );
   737     TUint8 lengthBerTlv( 0 );
   589     TUint8 lengthBerTlv( 0 );
   738     TInt n( (KTwoByteLengthCoding == tag)?1:0 );
   590     TInt n( (KTwoByteLengthCoding == tag)?1:0 );
   739     lengthBerTlv = aAtkData[1 + n];
   591     lengthBerTlv = aAtkData[1 + n];
   740     indexInBerTlv = 2 + n;
   592     indexInBerTlv = 2 + n;
   741 
   593     // MO SMS control result
       
   594     TUint8 moSmsResult( aAtkData[0] );
   742     // Extract TLVs and fill in output variables
   595     // Extract TLVs and fill in output variables
   743     TBool address1_got( EFalse );
   596     TBool address1_got( EFalse );
   744     while( lengthBerTlv )
   597     while( lengthBerTlv )
   745         {
   598         {
   746         // Get tag value without 'comprehension required' bit
   599         // Get tag value without 'comprehension required' bit
   749         TInt nn( ( KTwoByteLengthCoding == aAtkData[indexInBerTlv+1] )?1:0 );
   602         TInt nn( ( KTwoByteLengthCoding == aAtkData[indexInBerTlv+1] )?1:0 );
   750         // Length of TLV
   603         // Length of TLV
   751         TInt lengthTlv( aAtkData[indexInBerTlv+nn+1] );
   604         TInt lengthTlv( aAtkData[indexInBerTlv+nn+1] );
   752         // Check what TLV is received
   605         // Check what TLV is received
   753         if ( ( KTlvAddressTag == tag )
   606         if ( ( KTlvAddressTag == tag )
   754             && ( !address1_got ) )
   607             && ( !address1_got )
       
   608             && KSmControlAllowedWithModif == moSmsResult )
   755             {
   609             {
   756             // RP address first
   610             // RP address first
   757             address1_got = ETrue;
   611             address1_got = ETrue;
   758             // Copy data to output variable
   612             // Copy data to output variable
   759             aAddr1.Copy( aAtkData.Mid( indexInBerTlv + nn + 2,
   613             aAddr1.Copy( aAtkData.Mid( indexInBerTlv + nn + 2,
   762                  KReservedTonNpi1!=aAddr1[0] && KReservedTonNpi2!=aAddr1[0] )
   616                  KReservedTonNpi1!=aAddr1[0] && KReservedTonNpi2!=aAddr1[0] )
   763                 {
   617                 {
   764                 CleanAddressData( aAddr1 );
   618                 CleanAddressData( aAddr1 );
   765                 }
   619                 }
   766             }
   620             }
   767         else if ( KTlvAddressTag == tag )
   621         else if ( KTlvAddressTag == tag
       
   622             && KSmControlAllowedWithModif == moSmsResult )
   768             {
   623             {
   769             // TP address
   624             // TP address
   770             // Copy data to output variable
   625             // Copy data to output variable
   771             aAddr2.Copy( aAtkData.Mid( indexInBerTlv + nn + 2,
   626             aAddr2.Copy( aAtkData.Mid( indexInBerTlv + nn + 2,
   772                 lengthTlv ) );
   627                 lengthTlv ) );
   792 
   647 
   793             }
   648             }
   794         else
   649         else
   795             {
   650             {
   796             TFLOGSTRING("TSY: CSatMoSmsCtrl::ParseAtkSwDataNtf, Tlv tag was not address/alpha id tag.");
   651             TFLOGSTRING("TSY: CSatMoSmsCtrl::ParseAtkSwDataNtf, Tlv tag was not address/alpha id tag.");
   797             OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_PARSEATKSWDATANTF, "CSatMoSmsCtrl::ParseAtkSwDataNtf, Tlv tag was not address/alpha id tag." );
   652             OstTrace0( TRACE_NORMAL,  DUP1_CSATMOSMSCTRL_PARSEATKSWDATANTF_TD, "CSatMoSmsCtrl::ParseAtkSwDataNtf, Tlv tag was not address/alpha id tag." );
   798 
   653 
   799             }
   654             }
   800 
   655 
   801         // update length for the while loop
   656         // update length for the while loop
   802         lengthBerTlv -= ( lengthTlv+2+nn );
   657         lengthBerTlv -= ( lengthTlv+2+nn );
   814 void CSatMoSmsCtrl::CleanAddressData
   669 void CSatMoSmsCtrl::CleanAddressData
   815         (
   670         (
   816         TDes8& aAddr
   671         TDes8& aAddr
   817         )
   672         )
   818     {
   673     {
   819     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CLEANADDRESSDATA, "CSatMoSmsCtrl::CleanAddressData" );
   674     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_CLEANADDRESSDATA_TD, "CSatMoSmsCtrl::CleanAddressData" );
   820     TFLOGSTRING("TSY: CSatMoSmsCtrl::CleanAddressData");
   675     TFLOGSTRING("TSY: CSatMoSmsCtrl::CleanAddressData");
   821     // Starts from index 1, since index 0 is for TON/NPI
   676     // Starts from index 1, since index 0 is for TON/NPI
   822     for ( TInt i=1; i < aAddr.Length(); i++ )
   677     for ( TInt i=1; i < aAddr.Length(); i++ )
   823         {
   678         {
   824         if ( 0xF0==(aAddr[i]&0xF0) )
   679         if ( 0xF0==(aAddr[i]&0xF0) )
   848         (
   703         (
   849         TDes8& aRPAddr,
   704         TDes8& aRPAddr,
   850         TDes8& aTPAddr
   705         TDes8& aTPAddr
   851         )
   706         )
   852     {
   707     {
   853     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_VERIFYSIMRESPDATA, "CSatMoSmsCtrl::VerifySimRespData" );
   708     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_VERIFYSIMRESPDATA_TD, "CSatMoSmsCtrl::VerifySimRespData" );
   854     TBool ret( ETrue );
   709     TBool ret( ETrue );
   855     if ( ( 0==aRPAddr.Length() && 0==aTPAddr.Length() )
   710     if ( ( 0==aRPAddr.Length() && 0==aTPAddr.Length() )
   856        || ( KMaxLengthAddr1Addr2 <= ( aRPAddr.Length()+aTPAddr.Length() ) )
   711        || ( KMaxLengthAddr1Addr2 <= ( aRPAddr.Length()+aTPAddr.Length() ) )
   857        )
   712        )
   858         {
   713         {
   925               {
   780               {
   926               // Increment subblock
   781               // Increment subblock
   927               data[1]++;
   782               data[1]++;
   928               // Copy address subblocks from Indication message
   783               // Copy address subblocks from Indication message
   929               // Add Address Subblock
   784               // Add Address Subblock
   930               TIsiSubBlock address( 
   785               TIsiSubBlock address(
   931                   data, 
   786                   data,
   932                   SMS_SB_ADDRESS ,
   787                   SMS_SB_ADDRESS ,
   933                   EIsiSubBlockTypeId16Len16 );
   788                   EIsiSubBlockTypeId16Len16 );
   934               data.Append( SMS_SMSC_ADDRESS );            // Address type
   789               data.Append( SMS_SMSC_ADDRESS );            // Address type
   935               data.Append( iAddressSubblock.Length() );     // Address data length
   790               data.Append( iAddressSubblock.Length() );     // Address data length
   936               data.Append( iAddressSubblock );
   791               data.Append( iAddressSubblock );
   938               address.CompleteSubBlock();
   793               address.CompleteSubBlock();
   939 
   794 
   940               // increment subblock
   795               // increment subblock
   941               data[1]++;
   796               data[1]++;
   942               // Add User Data Subblock
   797               // Add User Data Subblock
   943               TIsiSubBlock userData( 
   798               TIsiSubBlock userData(
   944                   data, 
   799                   data,
   945                   SMS_SB_TPDU ,
   800                   SMS_SB_TPDU ,
   946                   EIsiSubBlockTypeId16Len16 );
   801                   EIsiSubBlockTypeId16Len16 );
   947               data.Append( iUserDataSubblock.Length() );        // data Length
   802               data.Append( iUserDataSubblock.Length() );        // data Length
   948               data.Append( KPadding );        // Filler Byte
   803               data.Append( KPadding );        // Filler Byte
   949               data.Append( iUserDataSubblock ); // Data Bytes
   804               data.Append( iUserDataSubblock ); // Data Bytes
   956               if ( address1.Length() )
   811               if ( address1.Length() )
   957                   {
   812                   {
   958                   // Add Address subblock
   813                   // Add Address subblock
   959                   data[1]++;          // increase no of subblocks
   814                   data[1]++;          // increase no of subblocks
   960 
   815 
   961                   TIsiSubBlock address( 
   816                   TIsiSubBlock address(
   962                       data, 
   817                       data,
   963                       SMS_SB_ADDRESS ,
   818                       SMS_SB_ADDRESS ,
   964                       EIsiSubBlockTypeId16Len16 );
   819                       EIsiSubBlockTypeId16Len16 );
   965                   data.Append(SMS_SMSC_ADDRESS);            // Address Type
   820                   data.Append(SMS_SMSC_ADDRESS);            // Address Type
   966 
   821 
   967                   // Data in bytes
   822                   // Data in bytes
   968                   // First byte is the address length in 3GPP, GSM_0411 format
   823                   // First byte is the address length in 3GPP, GSM_0411 format
   969                   // "data length in bytes, including TON & NPI".
   824                   // "data length in bytes, including TON & NPI".
   970                   data.Append( address1.Length() + 1 );
   825                   data.Append( address1.Length() + 1 );
   971                   // Actual address data. 
   826                   // Actual address data.
   972                   data.Append( address1.Length());
   827                   data.Append( address1.Length());
   973                   data.Append( address1 ); 
   828                   data.Append( address1 );
   974                   address.CompleteSubBlock();
   829                   address.CompleteSubBlock();
   975                   }       // end of Service centre Address Subblock
   830                   }       // end of Service centre Address Subblock
   976 
   831 
   977                   // Add subblock for Address2 (Destination address, TP) if present
   832                   // Add subblock for Address2 (Destination address, TP) if present
   978                   if ( address2.Length() )
   833                   if ( address2.Length() )
   979                       {
   834                       {
   980                       // Add subblock
   835                       // Add subblock
   981                       data[1]++;
   836                       data[1]++;
   982 
   837 
   983                       // For User Data Subblock
   838                       // For User Data Subblock
   984                       TIsiSubBlock userDataSb( 
   839                       TIsiSubBlock userDataSb(
   985                           data, 
   840                           data,
   986                           SMS_SB_TPDU,
   841                           SMS_SB_TPDU,
   987                           EIsiSubBlockTypeId16Len16 );
   842                           EIsiSubBlockTypeId16Len16 );
   988 
   843 
   989                       // Check what type of TPDU to be sent
   844                       // Check what type of TPDU to be sent
   990                       switch( iMessageType )
   845                       switch( iMessageType )
  1052                                   iUserDataSubblock[2]  = ( ( address2.Length() - 1 ) * 2 );
   907                                   iUserDataSubblock[2]  = ( ( address2.Length() - 1 ) * 2 );
  1053                                   }
   908                                   }
  1054 
   909 
  1055                               // old addresss needs to be deleted before new one can be inserted
   910                               // old addresss needs to be deleted before new one can be inserted
  1056                               // to the tpdu
   911                               // to the tpdu
  1057                               iUserDataSubblock.Delete( 
   912                               iUserDataSubblock.Delete(
  1058                                   KSmsSubmitAddrDataIndex, 
   913                                   KSmsSubmitAddrDataIndex,
  1059                                   oldAddrLen + 1 );
   914                                   oldAddrLen + 1 );
  1060                               iUserDataSubblock.Insert( 
   915                               iUserDataSubblock.Insert(
  1061                                   KSmsSubmitAddrDataIndex,
   916                                   KSmsSubmitAddrDataIndex,
  1062                                   address2 );
   917                                   address2 );
  1063                               break;
   918                               break;
  1064                               }
   919                               }
  1065                           default:
   920                           default:
  1075               }
   930               }
  1076         if( SMS_RESOURCE_DENIED == status )
   931         if( SMS_RESOURCE_DENIED == status )
  1077             {
   932             {
  1078             // Add SMS_SB_CAUSE subblock
   933             // Add SMS_SB_CAUSE subblock
  1079             data[1]++;           //Increment no of subblocks
   934             data[1]++;           //Increment no of subblocks
  1080             TIsiSubBlock cause( 
   935             TIsiSubBlock cause(
  1081                 data, 
   936                 data,
  1082                 SMS_SB_CAUSE ,
   937                 SMS_SB_CAUSE ,
  1083                 EIsiSubBlockTypeId16Len16 );
   938                 EIsiSubBlockTypeId16Len16 );
  1084             data.Append( SMS_CAUSE_TYPE_COMMON );            // Cause type
   939             data.Append( SMS_CAUSE_TYPE_COMMON );            // Cause type
  1085             data.Append( SMS_ERR_ROUTE_NOT_ALLOWED );    // Cause
   940             data.Append( SMS_ERR_ROUTE_NOT_ALLOWED );    // Cause
  1086             cause.CompleteSubBlock();
   941             cause.CompleteSubBlock();
  1095 TInt CSatMoSmsCtrl::MessageReceivedL
   950 TInt CSatMoSmsCtrl::MessageReceivedL
  1096         (
   951         (
  1097         const TIsiReceiveC& aIsiMessage
   952         const TIsiReceiveC& aIsiMessage
  1098         )
   953         )
  1099     {
   954     {
  1100     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_MESSAGERECEIVED, "CSatMoSmsCtrl::MessageReceived" );
   955     OstTrace0( TRACE_NORMAL,  CSATMOSMSCTRL_MESSAGERECEIVED_TD, "CSatMoSmsCtrl::MessageReceived" );
  1101     TFLOGSTRING("TSY: CSatMoSmsCtrl::MessageReceived");
   956     TFLOGSTRING("TSY: CSatMoSmsCtrl::MessageReceived");
  1102     // SMS server -> SimAtkTsy  : MO-SMS request sent to SAT (KSmsResourceReq)
   957     // SMS server -> SimAtkTsy  : MO-SMS request sent to SAT (KSmsResourceReq)
  1103     // UICC server <- SimAtkTsy  : Envelope sent to UICC server (KAtkEnvelopeNtf)
   958     // UICC server <- SimAtkTsy  : Envelope sent to UICC server (KAtkEnvelopeNtf)
  1104     // UICC server -> SimAtkTsy  : AtkSwNtf send to SAT, with modified (or not)
   959     // UICC server -> SimAtkTsy  : AtkSwNtf send to SAT, with modified (or not)
  1105     //                            addresses and parameters  (KAtkSwDataNtf)
   960     //                            addresses and parameters  (KAtkSwDataNtf)
  1124                 }
   979                 }
  1125             case SMS_RESOURCE_RESP:
   980             case SMS_RESOURCE_RESP:
  1126                 {
   981                 {
  1127                 // Take a log
   982                 // Take a log
  1128                 TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceRespReceived: Response for Resource Req, Receive response from SMS server");
   983                 TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceRespReceived: Response for Resource Req, Receive response from SMS server");
  1129                 OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_SMSRESOURCERESPRECEIVED, "CSatMoSmsCtrl::SmsResourceRespReceived: Response for Resource Req, Receive response from SMS server" );
   984                 OstTrace0( TRACE_NORMAL,  DUP1_CSATMOSMSCTRL_SMSRESOURCERESPRECEIVED_TD, "CSatMoSmsCtrl::SmsResourceRespReceived: Response for Resource Req, Receive response from SMS server" );
  1130 
   985 
  1131                 break;
   986                 break;
  1132                 }
   987                 }
  1133             default:
   988             default:
  1134                 {
   989                 {
  1170             }
  1025             }
  1171         }
  1026         }
  1172     return KErrNone;
  1027     return KErrNone;
  1173     }
  1028     }
  1174 
  1029 
       
  1030 // -----------------------------------------------------------------------------
       
  1031 // CSatMoSmsCtrl::SendSmsResourceReq
       
  1032 // Constructs and sends SMS_RESOURCE_REQ
       
  1033 // -----------------------------------------------------------------------------
       
  1034 //
       
  1035 void CSatMoSmsCtrl::SendSmsResourceReq(
       
  1036     TUint8 aResourceStatus,
       
  1037     TUint8 aCauseType,
       
  1038     TUint8 aCause )
       
  1039     {
       
  1040     TFLOGSTRING("TSY: CSatMoSmsCtrl::SendSmsResourceReq");
       
  1041     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SENDSMSRESOURCEREQ_TD, "CSatMoSmsCtrl::SendSmsResourceReq" );
       
  1042 
       
  1043     TBuf8<KMaxLengthOfResourceReq> dataResp;
       
  1044     TIsiSend resourceReq( dataResp );
       
  1045 
       
  1046     dataResp.AppendFill( KPadding, 1 );       // filler byte
       
  1047     TUint8 sbCount( 0 );
       
  1048     if ( SMS_RESOURCE_ALLOWED == aResourceStatus )
       
  1049         {
       
  1050         sbCount = 5; // in ok case there are 5 subblocks
       
  1051         }
       
  1052     else
       
  1053         {
       
  1054         sbCount = 4; // otherwise 4
       
  1055         }
       
  1056     dataResp.Append( sbCount );                // no of Subblocks
       
  1057 
       
  1058     // Add first SB Resource Subblock
       
  1059     TIsiSubBlock resource(
       
  1060         dataResp,
       
  1061         SMS_SB_RESOURCE ,
       
  1062         EIsiSubBlockTypeId16Len16 );                      // Message ID and Subblock length
       
  1063 
       
  1064     dataResp.Append( iResourceId >> 8 );        // SMS Resource IDs MSB
       
  1065     dataResp.Append( iResourceId );           // SMS resource IDs LSB
       
  1066     resource.CompleteSubBlock();
       
  1067 
       
  1068     // Add 2nd resource sequence ID subblock
       
  1069     TIsiSubBlock resourceSeqId(
       
  1070         dataResp,
       
  1071         SMS_SB_RESOURCE_SEQ_ID ,
       
  1072         EIsiSubBlockTypeId16Len16 );
       
  1073 
       
  1074     dataResp.Append(iSequenceId);                // Sequence ID
       
  1075     resourceSeqId.CompleteSubBlock();
       
  1076 
       
  1077     // Add Third subblock SMS_SB_RESOURCE_STATUS
       
  1078     TIsiSubBlock resourceStatus(
       
  1079         dataResp,
       
  1080         SMS_SB_RESOURCE_STATUS ,
       
  1081         EIsiSubBlockTypeId16Len16 );
       
  1082 
       
  1083     dataResp.Append( aResourceStatus );            // Resource status
       
  1084     resourceStatus.CompleteSubBlock();
       
  1085 
       
  1086     if ( SMS_RESOURCE_ALLOWED == aResourceStatus )
       
  1087         {
       
  1088         // Add 4th subblock SMS_SB_ADDRESS (SMSC)
       
  1089         TIsiSubBlock addressSb(
       
  1090             dataResp,
       
  1091             SMS_SB_ADDRESS ,
       
  1092             EIsiSubBlockTypeId16Len16 );
       
  1093 
       
  1094         dataResp.Append( SMS_SMSC_ADDRESS );            // Addrees Type
       
  1095         dataResp.Append( iAddressSubblock.Length() );
       
  1096         dataResp.Append( iAddressSubblock );
       
  1097         addressSb.CompleteSubBlock();
       
  1098 
       
  1099         // Add 5th Subblock SMS_SB_TPDU (Destination address)
       
  1100         TIsiSubBlock userDataSb(
       
  1101             dataResp,
       
  1102             SMS_SB_TPDU ,
       
  1103             EIsiSubBlockTypeId16Len16 );
       
  1104 
       
  1105         dataResp.Append( iUserDataSubblock.Length() );            // Addrees Length
       
  1106         dataResp.Append( KPadding );
       
  1107         dataResp.Append( iUserDataSubblock );
       
  1108         userDataSb.CompleteSubBlock();
       
  1109         }
       
  1110     else
       
  1111         {
       
  1112         // Add cause subblock
       
  1113         TIsiSubBlock sbCause(
       
  1114             dataResp,
       
  1115             SMS_SB_CAUSE,
       
  1116             EIsiSubBlockTypeId16Len16 );
       
  1117 
       
  1118         dataResp.Append( aCauseType );
       
  1119         dataResp.Append( aCause );
       
  1120         sbCause.CompleteSubBlock();
       
  1121         }
       
  1122 
       
  1123     // Send resp to Sms server with not allowed status
       
  1124     iSatMessHandler->SendSmsResourceReq(
       
  1125         iMoSmsCtrlReqTransactionId,
       
  1126         dataResp,
       
  1127         iSenderObject );
       
  1128     }
       
  1129 // -----------------------------------------------------------------------------
       
  1130 // CSatMoSmsCtrl::FormMoSmsCtrlEnvelope
       
  1131 // Forms and sends MO SMS Control envelope
       
  1132 // -----------------------------------------------------------------------------
       
  1133 //
       
  1134 void CSatMoSmsCtrl::FormMoSmsCtrlEnvelope()
       
  1135     {
       
  1136     TFLOGSTRING("TSY: CSatMoSmsCtrl::FormMoSmsCtrlEnvelope");
       
  1137     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_FORMMOSMSCTRLENVELOPE_TD, "CSatMoSmsCtrl::FormMoSmsCtrlEnvelope" );
       
  1138 
       
  1139     TPtrC8 addressData2;
       
  1140     if ( iUserDataSubblock.Length() )
       
  1141         {
       
  1142         iMessageType = FetchTpDa( iUserDataSubblock, addressData2 );
       
  1143         }
       
  1144     // no else
       
  1145 
       
  1146     // Dialled Number String, the length has to be removed (first byte)
       
  1147     // The envelope is sent if MO SMS is activated
       
  1148     // iAddressSubblock is not sent as it's received
       
  1149     // from SMS server because of iAddressSubblock's first
       
  1150     // byte is length of the address data and MO SMS Control envelope
       
  1151     // is NOT allowed to contain that in address data. So length
       
  1152     // field is skipped
       
  1153     SendMoSmsCtrlEnvelope(
       
  1154         iMoSmsCtrlEnvelopeTransactionId,
       
  1155         iAddressSubblock.Mid( 1, iAddressSubblock.Length() - 1 ),
       
  1156         addressData2 );
       
  1157     }
       
  1158 
       
  1159 // -----------------------------------------------------------------------------
       
  1160 // CSatMoSmsCtrl::FetchTpDa
       
  1161 // Fetches TP-DA contents from TPDU
       
  1162 // -----------------------------------------------------------------------------
       
  1163 //
       
  1164 TUint8 CSatMoSmsCtrl::FetchTpDa( const TDesC8& aTpdu, TPtrC8& aTpda )
       
  1165     {
       
  1166     TFLOGSTRING("TSY: CSatMoSmsCtrl::FetchTpDa");
       
  1167     OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_FETCHTPDA_TD, "CSatMoSmsCtrl::FetchTpDa" );
       
  1168 
       
  1169     TUint8 ret( 0 );
       
  1170 
       
  1171     // TP-DA has the following structure
       
  1172     // (see 3GPP TS 23.040 clause 9.1.2.5)
       
  1173     //      [0]     Address-Length
       
  1174     //      [1]     TonNpi
       
  1175     //      [2..]   Address-Value       ADN encoding
       
  1176     // resulting descriptor contains TonNpi+Address-Value
       
  1177     // 'Address-Length' does not count filler byte if it is present, so it
       
  1178     // can be odd value. If it is we need to add 1 and then divide by 2 to
       
  1179     // calculate number of bytes. Although if it is even, then adding 1 will
       
  1180     // give us odd value which gives the same number of bytes after integer
       
  1181     // division by 2.
       
  1182     // So we always add 1 to Address-Length inside TP-DA
       
  1183     if ( KSmsCommandType == ( aTpdu[KMessageParamsIndex] & KCommandTypeMask ) )
       
  1184         {
       
  1185         ret = KSmsCommandType;
       
  1186         TUint8 addressLength = aTpdu[KSmsCommandAddrIndex] + 1;
       
  1187         aTpda.Set( aTpdu.Mid(
       
  1188             KSmsCommandAddrIndex + KTpDaTonNpiIndex,
       
  1189             addressLength/2 + KTpDaTonNpiSize ) );
       
  1190         }
       
  1191     else if ( KSmsSubmitType == ( aTpdu[KMessageParamsIndex] & KCommandTypeMask ) )
       
  1192         {
       
  1193         ret = KSmsSubmitType;
       
  1194         TUint8 addressLength = aTpdu[KSmsSubmitAddrIndex] + 1;
       
  1195         aTpda.Set( aTpdu.Mid(
       
  1196             KSmsSubmitAddrIndex + KTpDaTonNpiIndex,
       
  1197             addressLength/2 + KTpDaTonNpiSize ) );
       
  1198         }
       
  1199     // no else
       
  1200 
       
  1201     return ret;
       
  1202     }
  1175 // End of File
  1203 // End of File