diff -r 6295dc2169f3 -r 8486d82aef45 adaptationlayer/tsy/simatktsy_dll/src/satmosmsctrl.cpp --- a/adaptationlayer/tsy/simatktsy_dll/src/satmosmsctrl.cpp Wed Apr 21 14:29:55 2010 +0300 +++ b/adaptationlayer/tsy/simatktsy_dll/src/satmosmsctrl.cpp Tue Oct 19 13:16:20 2010 +0300 @@ -28,7 +28,6 @@ #include // isi message #include // UICC server #include // sms server -#include #include "OstTraceDefinitions.h" #ifdef OST_TRACE_COMPILER_IN_USE #include "satmosmsctrlTraces.h" @@ -46,6 +45,12 @@ const TUint8 KSmControlNotAllowed = 1; const TUint8 KSmControlAllowedWithModif = 2; const TUint8 KSmsSubmitAddrDataIndex = 3; +const TUint8 KMessageParamsIndex = 0; +const TUint8 KCommandTypeMask = 0x03; +const TUint8 KSmsCommandAddrIndex = 5; +const TUint8 KSmsSubmitAddrIndex = 2; +const TUint8 KTpDaTonNpiIndex = 1; +const TUint8 KTpDaTonNpiSize = 1; // ==================== MEMBER FUNCTIONS ==================================== @@ -69,7 +74,7 @@ iMoSmsCtrlReqTransactionId( KZero ), iSenderObject( KZero ) { - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CSATMOSMSCTRL, "CSatMoSmsCtrl::CSatMoSmsCtrl" ); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CSATMOSMSCTRL_TD, "CSatMoSmsCtrl::CSatMoSmsCtrl" ); } @@ -80,8 +85,8 @@ // void CSatMoSmsCtrl::ConstructL() { - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CONSTRUCTL, "CSatMoSmsCtrl::ConstructL" ); -#ifdef INFO_PP_ATK_MO_SM_CONTROL + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CONSTRUCTL_TD, "CSatMoSmsCtrl::ConstructL" ); +/*#ifdef INFO_PP_ATK_MO_SM_CONTROL // Check MO SMS control is supported by ME's Product Profile iSatMessHandler->InfoPpReadReq( INFO_PP_ATK_MO_SM_CONTROL ); #else @@ -89,7 +94,7 @@ // This is done by sending a request SimReadTableReq to Sim server, with // service type KSimStMoSmsSimControlAvail iSatMessHandler->SimReadTableReq( SIM_ST_MO_SMS_SIM_CONTROL_AVAIL ); -#endif // INFO_PP_ATK_MO_SM_CONTROL +#endif // INFO_PP_ATK_MO_SM_CONTROL*/ } @@ -104,7 +109,7 @@ CTsySatMessaging* aSatMessaging ) { - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_NEWL, "CSatMoSmsCtrl::NewL" ); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_NEWL_TD, "CSatMoSmsCtrl::NewL" ); TFLOGSTRING("TSY: CSatMoSmsCtrl::NewL"); CSatMoSmsCtrl* self = @@ -125,7 +130,7 @@ // CSatMoSmsCtrl::~CSatMoSmsCtrl() { - OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_CSATMOSMSCTRL, "CSatMoSmsCtrl::~CSatMoSmsCtrl" ); + OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_CSATMOSMSCTRL_TD, "CSatMoSmsCtrl::~CSatMoSmsCtrl" ); TFLOGSTRING("TSY: CSatMoSmsCtrl::~CSatMoSmsCtrl"); } @@ -137,7 +142,7 @@ // TBool CSatMoSmsCtrl::IsActivated() { - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_ISACTIVATED, "CSatMoSmsCtrl::IsActivated" ); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_ISACTIVATED_TD, "CSatMoSmsCtrl::IsActivated" ); TFLOGSTRING("TSY: CSatMoSmsCtrl::IsActivated"); return iIsMoSmsCtrlActivated; } @@ -149,7 +154,7 @@ // void CSatMoSmsCtrl::Activate() { - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_ACTIVATE, "CSatMoSmsCtrl::Activate" ); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_ACTIVATE_TD, "CSatMoSmsCtrl::Activate" ); TFLOGSTRING("TSY: CSatMoSmsCtrl::Activate"); iIsMoSmsCtrlActivated = ETrue; } @@ -161,7 +166,7 @@ // void CSatMoSmsCtrl::Deactivate() { - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_DEACTIVATE, "CSatMoSmsCtrl::Deactivate" ); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_DEACTIVATE_TD, "CSatMoSmsCtrl::Deactivate" ); TFLOGSTRING("TSY: CSatMoSmsCtrl::Deactivate"); iIsMoSmsCtrlActivated = EFalse; } @@ -176,7 +181,7 @@ const TIsiReceiveC& aIsiMessage //Received data notification ) { - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_UICCCATRESPENVELOPERECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived" ); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_UICCCATRESPENVELOPERECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived" ); TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived"); TBuf8 addr1; TBuf8 addr2; @@ -221,7 +226,7 @@ if ( KError != atkResult ) // If ATK result is OK { TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Ok"); - OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Ok" ); + OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Ok" ); RSat::TAlphaId alphaId; alphaId.iAlphaId.Zero(); TBool isAlphaIdEmpty( EFalse ); @@ -229,7 +234,7 @@ if ( KMaxLengthOfAtkSwDataNtf < apduLength ) // If data length greater than 255 { TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, the length of Sim resp data is > 255" ); - OstTrace0( TRACE_NORMAL, DUP2_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, the length of Sim resp data is > 255" ); + OstTrace0( TRACE_NORMAL, DUP2_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, the length of Sim resp data is > 255" ); // Data is not consistent, so not allowed condition if( KSmControlNotAllowed == apduData[0] ) { @@ -253,7 +258,7 @@ else if ( apduLength ) // If data length in non zero and less than 255 { TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()!=0 "); - OstTrace0( TRACE_NORMAL, DUP3_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()!=0 " ); + OstTrace0( TRACE_NORMAL, DUP3_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()!=0 " ); // Note: The alpha id can be provided by the SIM even if the addresses // have not been modified. @@ -275,12 +280,12 @@ } FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 ); TFLOGSTRING2("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, apduData[0]: %d",apduData[0] ); - OstTrace1( TRACE_NORMAL, DUP4_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, apduData[0]: %d", apduData[0] ); + OstTrace1( TRACE_NORMAL, DUP4_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, apduData[0]: %d", apduData[0] ); } else { TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Sim response data not consistent" ); - OstTrace0( TRACE_NORMAL, DUP5_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Sim response data not consistent" ); + OstTrace0( TRACE_NORMAL, DUP5_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, Sim response data not consistent" ); if( KSmControlNotAllowed == apduData[0] ) { resourceStatus = SMS_RESOURCE_DENIED; @@ -305,7 +310,7 @@ else // block for data length zero { TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()=0 "); - OstTrace0( TRACE_NORMAL, DUP6_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()=0" ); + OstTrace0( TRACE_NORMAL, DUP6_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, atkData.Length()=0" ); TUint8 resourceStatus( SMS_RESOURCE_ALLOWED ); FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 ); }// end of block with data length zero @@ -349,7 +354,7 @@ else // else for UICC status not ok { TFLOGSTRING("TSY:CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, KAtkError = atkResult "); - OstTrace0( TRACE_NORMAL, DUP7_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, KAtkError = atkResult" ); + OstTrace0( TRACE_NORMAL, DUP7_CSATMOSMSCTRL_ATKSWDATANTFRECEIVED_TD, "CSatMoSmsCtrl::UiccCatRespEnvelopeReceived, KAtkError = atkResult" ); TUint8 resourceStatus = SMS_RESOURCE_DENIED; FormSmsResourceReqSb( resourceStatus, dataResp, addr1, addr2 ); } @@ -377,7 +382,7 @@ ) { TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceivedL"); - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SMSRESOURCEINDRECEIVEDL, "CSatMoSmsCtrl::SmsResourceIndReceivedL" ); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SMSRESOURCEINDRECEIVEDL_TD, "CSatMoSmsCtrl::SmsResourceIndReceivedL" ); TUint sbOffset; @@ -453,189 +458,36 @@ iUserDataSubblock.Zero(); } - //Check if location data is present. Otherwise response to SmsResourceInd - //is always ALLOWED. - if ( !iSatMessHandler->ServiceAvailable() ) - { - TBuf8 dataResp; - TIsiSend resourceReq( dataResp ); - - dataResp.AppendFill( KPadding, 1); // filer byte - dataResp.Append( 5 ); // no of Subblocks - - // Add first SB Resource Subblock - TIsiSubBlock resource( dataResp, SMS_SB_RESOURCE , - EIsiSubBlockTypeId16Len16 ); // Message ID and Subblock length - - dataResp.Append( iResourceId >> 8 ); // SMS Resource IDs MSB - - dataResp.Append( iResourceId ); // SMS resource IDs LSB - - dataResp.AppendFill( KPadding,2 ); // Filler Bytes - resource.CompleteSubBlock(); - - // Add 2nd resource sequence ID subblock - - TIsiSubBlock resourceSeqId( dataResp, SMS_SB_RESOURCE_SEQ_ID , - EIsiSubBlockTypeId16Len16 ); - dataResp.Append(iSequenceId); // Sequence ID - dataResp.AppendFill( KPadding, 3 ); - resourceSeqId.CompleteSubBlock(); - - - // Add Third subblock SMS_SB_RESOURCE_STATUS - - TIsiSubBlock resourceStatus( dataResp, SMS_SB_RESOURCE_STATUS , - EIsiSubBlockTypeId16Len16 ); - dataResp.Append( SMS_RESOURCE_ALLOWED ); // Resource status - dataResp.AppendFill( KPadding, 3 ); - resourceStatus.CompleteSubBlock(); + //Check if location data is present. Otherwise response to SmsResourceInd + //is always ALLOWED. + if ( !iSatMessHandler->ServiceAvailable() ) + { + TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceivedL: Not Allowed Condition, Send response to SMS server"); + OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_SMSRESOURCEINDRECEIVEDL_TD, "CSatMoSmsCtrl::SmsResourceIndReceivedL: Not Allowed conditon, Send response to SMS server" ); - // Add 4th subblock SMS_SB_ADDRESS (SMSC) - TIsiSubBlock addressSb( dataResp, SMS_SB_ADDRESS , - EIsiSubBlockTypeId16Len16 ); - dataResp.Append( SMS_SMSC_ADDRESS ); // Addrees Type - dataResp.Append( iAddressSubblock.Length() ); - dataResp.Append( iAddressSubblock ); - - // Filler bytes calculation for SMSC address subblock - TUint8 fillbytes = 0; - while(( iAddressSubblock.Length()+ 6 + fillbytes )%4) - { - fillbytes++; - } - - dataResp.AppendFill( KPadding,fillbytes ); - addressSb.CompleteSubBlock(); - - // Add 5th Subblock SMS_SB_TPDU (Destination address) - - TIsiSubBlock userDataSb( dataResp, SMS_SB_TPDU , - EIsiSubBlockTypeId16Len16 ); - dataResp.Append( iUserDataSubblock.Length() ); // Addrees Length - dataResp.Append( KPadding ); - dataResp.Append( iUserDataSubblock ); - - // Filler bytes calculation for user data subblock - fillbytes = 0; - while(( iUserDataSubblock.Length()+ 6 + fillbytes )%4 ) - { - fillbytes++; - } - - dataResp.AppendFill( KPadding,fillbytes ); - userDataSb.CompleteSubBlock(); - - TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceived: Not Allowed Condition, Send response to SMS server"); - OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_SMSRESOURCEINDRECEIVED, "CSatMoSmsCtrl::SmsResourceIndReceived: Not Allowed conditon, Send response to SMS server" ); - - // Send Req to Sms server with allowed status - iSatMessHandler->SendSmsResourceReq( - iMoSmsCtrlReqTransactionId, - dataResp, - iSenderObject ); - } - else - { + SendSmsResourceReq( + SMS_RESOURCE_ALLOWED, + SMS_CAUSE_TYPE_COMMON, + SMS_OK ); + } + else + { if( iIsMoSmsCtrlActivated ) // Check is MO SMS is activated or not { - TPtrC8 addressData2; - - if ( iUserDataSubblock.Length() ) - { - // check for message type - // Whether its a command type message or Submit type - if(KSmsCommandType == ( iUserDataSubblock[0]& 0x03 )) - { - iMessageType = KSmsCommandType; - TPtrC8 phoneNumber = &iUserDataSubblock[5]; - // Addition of two for Type of number semi octet - addressData2.Set( - phoneNumber.Mid( 1, (iUserDataSubblock[5]/2)+1 ) ); - } - else if( KSmsSubmitType == ( iUserDataSubblock[0] & 0x03 ) ) - { - iMessageType = KSmsSubmitType; - TPtrC8 phoneNumber = &iUserDataSubblock[2]; - // Addition of two for Type of number semi octet - addressData2.Set( - phoneNumber.Mid( 1, (iUserDataSubblock[2]/2)+1 ) ); - } - } - // Dialled Number String, the length has to be removed (first byte) +TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceivedL, Send envelope"); +OstTrace0( TRACE_NORMAL, DUP3_CSATMOSMSCTRL_SMSRESOURCEINDRECEIVEDL_TD, "CSatMoSmsCtrl::SmsResourceIndReceivedL, Send envelope" ); iMoSmsCtrlEnvelopeTransactionId = iSatMessaging->GetTransactionId(); - -TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceIndReceived, Send envelope"); -OstTrace0( TRACE_NORMAL, DUP3_CSATMOSMSCTRL_SMSRESOURCEINDRECEIVED, "CSatMoSmsCtrl::SmsResourceIndReceived, Send envelope" ); - - // The envelope is sent if MO SMS is activated - // iAddressSubblock is not sent as it's received - // from SMS server because of iAddressSubblock's first - // byte is length of the address data and MO SMS Control envelope - // is NOT allowed to contain that in address data. So length - // field is skipped - SendMoSmsCtrlEnvelope( - iMoSmsCtrlEnvelopeTransactionId, - iAddressSubblock.Mid( 1, iAddressSubblock.Length() - 1 ), - addressData2 - ); + FormMoSmsCtrlEnvelope(); } else // If MO SMS is not activated { - TBuf8 dataResp; - TIsiSend resourceReq( dataResp ); - - dataResp.AppendFill( KPadding, 1 ); // filer byte - dataResp.Append( 4 ); // no of Subblocks - - // Add first SB Resource Subblock - TIsiSubBlock resource( dataResp, SMS_SB_RESOURCE , - EIsiSubBlockTypeId16Len16 ); // Message ID and Subblock length - - dataResp.Append( iResourceId >> 8 ); // SMS Resource IDs MSB - - dataResp.Append( iResourceId ); // SMS resource IDs LSB - - dataResp.AppendFill( KPadding, 2 ); // Filler Bytes - resource.CompleteSubBlock(); - - // Add 2nd resource sequence ID subblock - - TIsiSubBlock resourceSeqId( dataResp, SMS_SB_RESOURCE_SEQ_ID , - EIsiSubBlockTypeId16Len16 ); - dataResp.Append( iSequenceId ); // Sequence ID - dataResp.AppendFill( KPadding, 3 ); - resourceSeqId.CompleteSubBlock(); - - // Add Third subblock - - TIsiSubBlock resourceStatus( dataResp, SMS_SB_RESOURCE_STATUS , - EIsiSubBlockTypeId16Len16 ); - dataResp.Append( SMS_RESOURCE_DENIED ); // Resource status - dataResp.AppendFill( KPadding, 3 ); - resourceStatus.CompleteSubBlock(); - - // No address and User data Subblocks because Here resource ID is not the activated - - // Add cause subblock - - TIsiSubBlock sbCause( dataResp,SMS_SB_CAUSE, - EIsiSubBlockTypeId16Len16 ); - - dataResp.Append( SMS_CAUSE_TYPE_COMMON ); - dataResp.Append( SMS_ERR_ROUTE_NOT_ALLOWED ); - dataResp.Append( KPadding, 2 ); - - // Send resp to Sms server with not allowed status - iSatMessHandler->SendSmsResourceReq( - iMoSmsCtrlReqTransactionId, - dataResp, - iSenderObject ); - + SendSmsResourceReq( + SMS_RESOURCE_DENIED, + SMS_CAUSE_TYPE_COMMON, + SMS_ERR_ROUTE_NOT_ALLOWED ); } } - } // ----------------------------------------------------------------------------- @@ -652,7 +504,7 @@ const TDesC8& aAddressData2 ) { - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SENDMOSMSCTRLENVELOPE, "CSatMoSmsCtrl::SendMoSmsCtrlEnvelope" ); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SENDMOSMSCTRLENVELOPE_TD, "CSatMoSmsCtrl::SendMoSmsCtrlEnvelope" ); TFLOGSTRING("TSY:CSatMoSmsCtrl::SendMoSmsCtrlEnvelope"); // Get location info @@ -711,7 +563,7 @@ TBool& aEmptyAlphaId ) { - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_PARSEATKSWDATANTF, "CSatMoSmsCtrl::ParseAtkSwDataNtf" ); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_PARSEATKSWDATANTF_TD, "CSatMoSmsCtrl::ParseAtkSwDataNtf" ); TFLOGSTRING("TSY:CSatMoSmsCtrl::ParseAtkSwDataNtf"); // Input data: @@ -738,7 +590,8 @@ TInt n( (KTwoByteLengthCoding == tag)?1:0 ); lengthBerTlv = aAtkData[1 + n]; indexInBerTlv = 2 + n; - + // MO SMS control result + TUint8 moSmsResult( aAtkData[0] ); // Extract TLVs and fill in output variables TBool address1_got( EFalse ); while( lengthBerTlv ) @@ -751,7 +604,8 @@ TInt lengthTlv( aAtkData[indexInBerTlv+nn+1] ); // Check what TLV is received if ( ( KTlvAddressTag == tag ) - && ( !address1_got ) ) + && ( !address1_got ) + && KSmControlAllowedWithModif == moSmsResult ) { // RP address first address1_got = ETrue; @@ -764,7 +618,8 @@ CleanAddressData( aAddr1 ); } } - else if ( KTlvAddressTag == tag ) + else if ( KTlvAddressTag == tag + && KSmControlAllowedWithModif == moSmsResult ) { // TP address // Copy data to output variable @@ -794,7 +649,7 @@ else { TFLOGSTRING("TSY: CSatMoSmsCtrl::ParseAtkSwDataNtf, Tlv tag was not address/alpha id tag."); - OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_PARSEATKSWDATANTF, "CSatMoSmsCtrl::ParseAtkSwDataNtf, Tlv tag was not address/alpha id tag." ); + OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_PARSEATKSWDATANTF_TD, "CSatMoSmsCtrl::ParseAtkSwDataNtf, Tlv tag was not address/alpha id tag." ); } @@ -816,7 +671,7 @@ TDes8& aAddr ) { - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CLEANADDRESSDATA, "CSatMoSmsCtrl::CleanAddressData" ); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_CLEANADDRESSDATA_TD, "CSatMoSmsCtrl::CleanAddressData" ); TFLOGSTRING("TSY: CSatMoSmsCtrl::CleanAddressData"); // Starts from index 1, since index 0 is for TON/NPI for ( TInt i=1; i < aAddr.Length(); i++ ) @@ -850,7 +705,7 @@ TDes8& aTPAddr ) { - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_VERIFYSIMRESPDATA, "CSatMoSmsCtrl::VerifySimRespData" ); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_VERIFYSIMRESPDATA_TD, "CSatMoSmsCtrl::VerifySimRespData" ); TBool ret( ETrue ); if ( ( 0==aRPAddr.Length() && 0==aTPAddr.Length() ) || ( KMaxLengthAddr1Addr2 <= ( aRPAddr.Length()+aTPAddr.Length() ) ) @@ -927,8 +782,8 @@ data[1]++; // Copy address subblocks from Indication message // Add Address Subblock - TIsiSubBlock address( - data, + TIsiSubBlock address( + data, SMS_SB_ADDRESS , EIsiSubBlockTypeId16Len16 ); data.Append( SMS_SMSC_ADDRESS ); // Address type @@ -940,8 +795,8 @@ // increment subblock data[1]++; // Add User Data Subblock - TIsiSubBlock userData( - data, + TIsiSubBlock userData( + data, SMS_SB_TPDU , EIsiSubBlockTypeId16Len16 ); data.Append( iUserDataSubblock.Length() ); // data Length @@ -958,8 +813,8 @@ // Add Address subblock data[1]++; // increase no of subblocks - TIsiSubBlock address( - data, + TIsiSubBlock address( + data, SMS_SB_ADDRESS , EIsiSubBlockTypeId16Len16 ); data.Append(SMS_SMSC_ADDRESS); // Address Type @@ -968,9 +823,9 @@ // First byte is the address length in 3GPP, GSM_0411 format // "data length in bytes, including TON & NPI". data.Append( address1.Length() + 1 ); - // Actual address data. + // Actual address data. data.Append( address1.Length()); - data.Append( address1 ); + data.Append( address1 ); address.CompleteSubBlock(); } // end of Service centre Address Subblock @@ -981,8 +836,8 @@ data[1]++; // For User Data Subblock - TIsiSubBlock userDataSb( - data, + TIsiSubBlock userDataSb( + data, SMS_SB_TPDU, EIsiSubBlockTypeId16Len16 ); @@ -1054,10 +909,10 @@ // old addresss needs to be deleted before new one can be inserted // to the tpdu - iUserDataSubblock.Delete( - KSmsSubmitAddrDataIndex, + iUserDataSubblock.Delete( + KSmsSubmitAddrDataIndex, oldAddrLen + 1 ); - iUserDataSubblock.Insert( + iUserDataSubblock.Insert( KSmsSubmitAddrDataIndex, address2 ); break; @@ -1077,8 +932,8 @@ { // Add SMS_SB_CAUSE subblock data[1]++; //Increment no of subblocks - TIsiSubBlock cause( - data, + TIsiSubBlock cause( + data, SMS_SB_CAUSE , EIsiSubBlockTypeId16Len16 ); data.Append( SMS_CAUSE_TYPE_COMMON ); // Cause type @@ -1097,7 +952,7 @@ const TIsiReceiveC& aIsiMessage ) { - OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_MESSAGERECEIVED, "CSatMoSmsCtrl::MessageReceived" ); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_MESSAGERECEIVED_TD, "CSatMoSmsCtrl::MessageReceived" ); TFLOGSTRING("TSY: CSatMoSmsCtrl::MessageReceived"); // SMS server -> SimAtkTsy : MO-SMS request sent to SAT (KSmsResourceReq) // UICC server <- SimAtkTsy : Envelope sent to UICC server (KAtkEnvelopeNtf) @@ -1126,7 +981,7 @@ { // Take a log TFLOGSTRING("TSY:CSatMoSmsCtrl::SmsResourceRespReceived: Response for Resource Req, Receive response from SMS server"); - OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_SMSRESOURCERESPRECEIVED, "CSatMoSmsCtrl::SmsResourceRespReceived: Response for Resource Req, Receive response from SMS server" ); + OstTrace0( TRACE_NORMAL, DUP1_CSATMOSMSCTRL_SMSRESOURCERESPRECEIVED_TD, "CSatMoSmsCtrl::SmsResourceRespReceived: Response for Resource Req, Receive response from SMS server" ); break; } @@ -1172,4 +1027,177 @@ return KErrNone; } +// ----------------------------------------------------------------------------- +// CSatMoSmsCtrl::SendSmsResourceReq +// Constructs and sends SMS_RESOURCE_REQ +// ----------------------------------------------------------------------------- +// +void CSatMoSmsCtrl::SendSmsResourceReq( + TUint8 aResourceStatus, + TUint8 aCauseType, + TUint8 aCause ) + { + TFLOGSTRING("TSY: CSatMoSmsCtrl::SendSmsResourceReq"); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_SENDSMSRESOURCEREQ_TD, "CSatMoSmsCtrl::SendSmsResourceReq" ); + + TBuf8 dataResp; + TIsiSend resourceReq( dataResp ); + + dataResp.AppendFill( KPadding, 1 ); // filler byte + TUint8 sbCount( 0 ); + if ( SMS_RESOURCE_ALLOWED == aResourceStatus ) + { + sbCount = 5; // in ok case there are 5 subblocks + } + else + { + sbCount = 4; // otherwise 4 + } + dataResp.Append( sbCount ); // no of Subblocks + + // Add first SB Resource Subblock + TIsiSubBlock resource( + dataResp, + SMS_SB_RESOURCE , + EIsiSubBlockTypeId16Len16 ); // Message ID and Subblock length + + dataResp.Append( iResourceId >> 8 ); // SMS Resource IDs MSB + dataResp.Append( iResourceId ); // SMS resource IDs LSB + resource.CompleteSubBlock(); + + // Add 2nd resource sequence ID subblock + TIsiSubBlock resourceSeqId( + dataResp, + SMS_SB_RESOURCE_SEQ_ID , + EIsiSubBlockTypeId16Len16 ); + + dataResp.Append(iSequenceId); // Sequence ID + resourceSeqId.CompleteSubBlock(); + + // Add Third subblock SMS_SB_RESOURCE_STATUS + TIsiSubBlock resourceStatus( + dataResp, + SMS_SB_RESOURCE_STATUS , + EIsiSubBlockTypeId16Len16 ); + + dataResp.Append( aResourceStatus ); // Resource status + resourceStatus.CompleteSubBlock(); + + if ( SMS_RESOURCE_ALLOWED == aResourceStatus ) + { + // Add 4th subblock SMS_SB_ADDRESS (SMSC) + TIsiSubBlock addressSb( + dataResp, + SMS_SB_ADDRESS , + EIsiSubBlockTypeId16Len16 ); + + dataResp.Append( SMS_SMSC_ADDRESS ); // Addrees Type + dataResp.Append( iAddressSubblock.Length() ); + dataResp.Append( iAddressSubblock ); + addressSb.CompleteSubBlock(); + + // Add 5th Subblock SMS_SB_TPDU (Destination address) + TIsiSubBlock userDataSb( + dataResp, + SMS_SB_TPDU , + EIsiSubBlockTypeId16Len16 ); + + dataResp.Append( iUserDataSubblock.Length() ); // Addrees Length + dataResp.Append( KPadding ); + dataResp.Append( iUserDataSubblock ); + userDataSb.CompleteSubBlock(); + } + else + { + // Add cause subblock + TIsiSubBlock sbCause( + dataResp, + SMS_SB_CAUSE, + EIsiSubBlockTypeId16Len16 ); + + dataResp.Append( aCauseType ); + dataResp.Append( aCause ); + sbCause.CompleteSubBlock(); + } + + // Send resp to Sms server with not allowed status + iSatMessHandler->SendSmsResourceReq( + iMoSmsCtrlReqTransactionId, + dataResp, + iSenderObject ); + } +// ----------------------------------------------------------------------------- +// CSatMoSmsCtrl::FormMoSmsCtrlEnvelope +// Forms and sends MO SMS Control envelope +// ----------------------------------------------------------------------------- +// +void CSatMoSmsCtrl::FormMoSmsCtrlEnvelope() + { + TFLOGSTRING("TSY: CSatMoSmsCtrl::FormMoSmsCtrlEnvelope"); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_FORMMOSMSCTRLENVELOPE_TD, "CSatMoSmsCtrl::FormMoSmsCtrlEnvelope" ); + + TPtrC8 addressData2; + if ( iUserDataSubblock.Length() ) + { + iMessageType = FetchTpDa( iUserDataSubblock, addressData2 ); + } + // no else + + // Dialled Number String, the length has to be removed (first byte) + // The envelope is sent if MO SMS is activated + // iAddressSubblock is not sent as it's received + // from SMS server because of iAddressSubblock's first + // byte is length of the address data and MO SMS Control envelope + // is NOT allowed to contain that in address data. So length + // field is skipped + SendMoSmsCtrlEnvelope( + iMoSmsCtrlEnvelopeTransactionId, + iAddressSubblock.Mid( 1, iAddressSubblock.Length() - 1 ), + addressData2 ); + } + +// ----------------------------------------------------------------------------- +// CSatMoSmsCtrl::FetchTpDa +// Fetches TP-DA contents from TPDU +// ----------------------------------------------------------------------------- +// +TUint8 CSatMoSmsCtrl::FetchTpDa( const TDesC8& aTpdu, TPtrC8& aTpda ) + { + TFLOGSTRING("TSY: CSatMoSmsCtrl::FetchTpDa"); + OstTrace0( TRACE_NORMAL, CSATMOSMSCTRL_FETCHTPDA_TD, "CSatMoSmsCtrl::FetchTpDa" ); + + TUint8 ret( 0 ); + + // TP-DA has the following structure + // (see 3GPP TS 23.040 clause 9.1.2.5) + // [0] Address-Length + // [1] TonNpi + // [2..] Address-Value ADN encoding + // resulting descriptor contains TonNpi+Address-Value + // 'Address-Length' does not count filler byte if it is present, so it + // can be odd value. If it is we need to add 1 and then divide by 2 to + // calculate number of bytes. Although if it is even, then adding 1 will + // give us odd value which gives the same number of bytes after integer + // division by 2. + // So we always add 1 to Address-Length inside TP-DA + if ( KSmsCommandType == ( aTpdu[KMessageParamsIndex] & KCommandTypeMask ) ) + { + ret = KSmsCommandType; + TUint8 addressLength = aTpdu[KSmsCommandAddrIndex] + 1; + aTpda.Set( aTpdu.Mid( + KSmsCommandAddrIndex + KTpDaTonNpiIndex, + addressLength/2 + KTpDaTonNpiSize ) ); + } + else if ( KSmsSubmitType == ( aTpdu[KMessageParamsIndex] & KCommandTypeMask ) ) + { + ret = KSmsSubmitType; + TUint8 addressLength = aTpdu[KSmsSubmitAddrIndex] + 1; + aTpda.Set( aTpdu.Mid( + KSmsSubmitAddrIndex + KTpDaTonNpiIndex, + addressLength/2 + KTpDaTonNpiSize ) ); + } + // no else + + return ret; + } // End of File