williamr@2: // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@2: /** williamr@2: Gets the message PDU for a SMS-SUBMIT type message. williamr@2: williamr@2: The message PDU type can be checked by using the CSmsHeader::Type API. williamr@2: williamr@2: @return williamr@2: The SMS-SUBMIT PDU object. williamr@2: williamr@2: @panic SMCM 0 williamr@2: The message was not a PDU of type SMS-SUBMIT (debug only). williamr@2: williamr@2: @see CSmsHeader::Type williamr@2: */ williamr@2: inline CSmsSubmit& CSmsHeader::Submit() williamr@2: { williamr@2: __ASSERT_DEBUG( Type() == CSmsPDU::ESmsSubmit, Panic(ESmutPanicUnsupportedMsgType)); williamr@2: return (CSmsSubmit&)(iMessage->SmsPDU()); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the (const) message PDU for a SMS-SUBMIT type message. williamr@2: williamr@2: The message PDU type can be checked by using the CSmsHeader::Type API. williamr@2: williamr@2: @return williamr@2: The SMS-SUBMIT PDU const object. williamr@2: williamr@2: @panic SMCM 0 williamr@2: The message was not a PDU of type SMS-SUBMIT (debug only). williamr@2: williamr@2: @see CSmsHeader::Type williamr@2: */ williamr@2: inline const CSmsSubmit& CSmsHeader::Submit() const williamr@2: { williamr@2: __ASSERT_DEBUG( Type() == CSmsPDU::ESmsSubmit, Panic(ESmutPanicUnsupportedMsgType)); williamr@2: return (CSmsSubmit&)(iMessage->SmsPDU()); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the message PDU for a SMS-DELIVER type message. williamr@2: williamr@2: The message PDU type can be checked by using the CSmsHeader::Type API. williamr@2: williamr@2: @return williamr@2: The SMS-DELIVER PDU object. williamr@2: williamr@2: @panic SMCM 0 williamr@2: The message was not a PDU of type SMS-DELIVER (debug only). williamr@2: williamr@2: @see CSmsHeader::Type williamr@2: */ williamr@2: inline CSmsDeliver& CSmsHeader::Deliver() williamr@2: { williamr@2: __ASSERT_DEBUG( Type() == CSmsPDU::ESmsDeliver, Panic(ESmutPanicUnsupportedMsgType)); williamr@2: return (CSmsDeliver&)(iMessage->SmsPDU()); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the (const) message PDU for a SMS-DELIVER type message. williamr@2: williamr@2: The message PDU type can be checked by using the CSmsHeader::Type API. williamr@2: williamr@2: @return williamr@2: The SMS-DELIVER PDU const object. williamr@2: williamr@2: @panic SMCM 0 williamr@2: The message was not a PDU of type SMS-DELIVER (debug only). williamr@2: williamr@2: @see CSmsHeader::Type williamr@2: */ williamr@2: inline const CSmsDeliver& CSmsHeader::Deliver() const williamr@2: { williamr@2: __ASSERT_DEBUG( Type() == CSmsPDU::ESmsDeliver, Panic(ESmutPanicUnsupportedMsgType)); williamr@2: return (CSmsDeliver&)(iMessage->SmsPDU()); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the message PDU for a SMS-COMMMAND type message. williamr@2: williamr@2: The message PDU type can be checked by using the CSmsHeader::Type API. williamr@2: williamr@2: @return The SMS-COMMMAND PDU object. williamr@2: williamr@2: @panic SMCM 0 williamr@2: The message was not a PDU of type SMS-COMMMAND (debug only). williamr@2: williamr@2: @see CSmsHeader::Type williamr@2: */ williamr@2: inline CSmsCommand& CSmsHeader::Command() williamr@2: { williamr@2: __ASSERT_DEBUG( Type() == CSmsPDU::ESmsCommand, Panic(ESmutPanicUnsupportedMsgType)); williamr@2: return (CSmsCommand&)(iMessage->SmsPDU()); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the (const) message PDU for a SMS-COMMMAND type message. williamr@2: williamr@2: The message PDU type can be checked by using the CSmsHeader::Type API. williamr@2: williamr@2: @return williamr@2: The SMS-COMMMAND PDU const object. williamr@2: williamr@2: @panic SMCM 0 williamr@2: The message was not a PDU of type SMS-COMMMAND (debug only). williamr@2: williamr@2: @see CSmsHeader::Type williamr@2: */ williamr@2: inline const CSmsCommand& CSmsHeader::Command() const williamr@2: { williamr@2: __ASSERT_DEBUG( Type() == CSmsPDU::ESmsCommand, Panic(ESmutPanicUnsupportedMsgType)); williamr@2: return (CSmsCommand&)(iMessage->SmsPDU()); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the message PDU for a SMS-STATUS-REPORT type message. williamr@2: williamr@2: The message PDU type can be checked by using the CSmsHeader::Type API. williamr@2: williamr@2: @return williamr@2: The SMS-STATUS-REPORT PDU object. williamr@2: williamr@2: @panic SMCM 0 williamr@2: The message was not a PDU of type SMS-STATUS-REPORT (debug only). williamr@2: williamr@2: @see CSmsHeader::Type williamr@2: */ williamr@2: inline CSmsStatusReport& CSmsHeader::StatusReport() williamr@2: { williamr@2: __ASSERT_DEBUG( Type() == CSmsPDU::ESmsStatusReport, Panic(ESmutPanicUnsupportedMsgType)); williamr@2: return (CSmsStatusReport&)(iMessage->SmsPDU()); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the (const) message PDU for a SMS-STATUS-REPORT type message. williamr@2: williamr@2: The message PDU type can be checked by using the CSmsHeader::Type API. williamr@2: williamr@2: @return williamr@2: The SMS-STATUS-REPORT PDU const object. williamr@2: williamr@2: @panic SMCM 0 williamr@2: The message was not a PDU of type SMS-STATUS-REPORT (debug only). williamr@2: williamr@2: @see CSmsHeader::Type williamr@2: */ williamr@2: inline const CSmsStatusReport& CSmsHeader::StatusReport() const williamr@2: { williamr@2: __ASSERT_DEBUG( Type() == CSmsPDU::ESmsStatusReport, Panic(ESmutPanicUnsupportedMsgType)); williamr@2: return (CSmsStatusReport&)(iMessage->SmsPDU()); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the message PDU type. williamr@2: williamr@2: There are six types of PDU - SMS-DELIVER, SMS-DELIVER-REPORT, SMS-SUBMIT, williamr@2: SMS-SUBMIT-REPORT, SMS-STATUS-REPORT and SMS-COMMAND. williamr@2: williamr@2: There is access to only to SMS-DELIVER, SMS-SUBMIT, SMS-STATUS-REPORT and williamr@2: SMS-COMMAND PDUs via the CSmsHeader encapsulation. williamr@2: williamr@2: @return williamr@2: The message PDU type. williamr@2: williamr@2: @see CSmsPDU::TSmsPDUType williamr@2: */ williamr@2: inline CSmsPDU::TSmsPDUType CSmsHeader::Type() const williamr@2: { williamr@2: return iMessage->SmsPDU().Type(); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the (const) message recipients. williamr@2: williamr@2: @return williamr@2: The const array of message recipients williamr@2: */ williamr@2: inline const CArrayPtrFlat& CSmsHeader::Recipients() const williamr@2: { williamr@2: return iRecipients; williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the (const) message recipients. williamr@2: williamr@2: @return williamr@2: The array of message recipients williamr@2: */ williamr@2: inline CArrayPtrFlat& CSmsHeader::Recipients() williamr@2: { williamr@2: return iRecipients; williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the SMS stack representation of the message. williamr@2: williamr@2: @return williamr@2: The SMS stack representation of the message williamr@2: williamr@2: @see CSmsMessage williamr@2: */ williamr@2: inline CSmsMessage& CSmsHeader::Message() williamr@2: { williamr@2: return *iMessage; williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the (const) SMS stack representation of the message. williamr@2: williamr@2: @return williamr@2: The const SMS stack representation of the message williamr@2: */ williamr@2: inline const CSmsMessage& CSmsHeader::Message() const williamr@2: { williamr@2: return *iMessage; williamr@2: } williamr@2: williamr@2: /** williamr@2: Tests if the message contains a reply path. williamr@2: williamr@2: @return williamr@2: A value of True if the message contains a reply path. williamr@2: */ williamr@2: inline TBool CSmsHeader::ReplyPathProvided() const williamr@2: { williamr@2: return iFlags & ESmsHeaderReplyPathProvided; williamr@2: } williamr@2: williamr@2: /** williamr@2: Set the message flag that indicates whether it contains a reply path. williamr@2: williamr@2: @param aReplyPathProvided williamr@2: A value of True to set the flag. williamr@2: */ williamr@2: inline void CSmsHeader::SetReplyPathProvided(TBool aReplyPathProvided) williamr@2: { williamr@2: iFlags = (iFlags & ~ESmsHeaderReplyPathProvided) | (aReplyPathProvided ? ESmsHeaderReplyPathProvided : ESmsHeaderNoFlags); williamr@2: } williamr@2: williamr@2: /** williamr@2: Sets the originator address. williamr@2: williamr@2: @param aAddress williamr@2: The originator address williamr@2: */ williamr@2: inline void CSmsHeader::SetFromAddressL(const TDesC& aAddress) williamr@2: { williamr@2: Message().SmsPDU().SetToFromAddressL(aAddress); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the originator address. williamr@2: williamr@2: Only valid for SMS-DELIVER and SMS-SUBMIT type messages. With any other message williamr@2: types the returned originator address is empty. williamr@2: williamr@2: @return williamr@2: The originator address. williamr@2: */ williamr@2: inline TPtrC CSmsHeader::FromAddress() const williamr@2: { williamr@2: switch(Type()) williamr@2: { williamr@2: case(CSmsPDU::ESmsSubmit): williamr@2: return Submit().ToFromAddress(); williamr@2: case(CSmsPDU::ESmsDeliver): williamr@2: return Deliver().ToFromAddress(); williamr@2: default: williamr@2: return TPtrC(0,0); williamr@2: } williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the message's service center address. williamr@2: williamr@2: This can only be used on SMS-SUBMIT type messages. The message PDU type can be williamr@2: checked by using the CSmsHeader::Type API. williamr@2: williamr@2: @return williamr@2: The Service Center address. williamr@2: williamr@2: @panic SMCM 0 williamr@2: The message was not a PDU of type SMS-SUBMIT (debug only). williamr@2: williamr@2: @see CSmsHeader::Type williamr@2: */ williamr@2: inline TPtrC CSmsHeader::ServiceCenterAddress() const williamr@2: { williamr@2: return Submit().ServiceCenterAddress(); williamr@2: } williamr@2: williamr@2: /** williamr@2: Sets the message's service center address. williamr@2: williamr@2: This can only be used on SMS-SUBMIT type messages. The message PDU type can be williamr@2: checked by using the CSmsHeader::Type API. williamr@2: williamr@2: williamr@2: @param aAddress williamr@2: The Service Center address williamr@2: williamr@2: @panic SMCM 0 williamr@2: The message was not a PDU of type SMS-SUBMIT (debug only). williamr@2: williamr@2: @see CSmsHeader::Type williamr@2: */ williamr@2: inline void CSmsHeader::SetServiceCenterAddressL(const TDesC& aAddress) williamr@2: { williamr@2: Submit().SetServiceCenterAddressL(aAddress); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the message's BIO message type identifier. williamr@2: williamr@2: For non-BIO messages, this is EBioMsgIdNbs. williamr@2: williamr@2: @return williamr@2: The BIO message type identifier williamr@2: */ williamr@2: inline TBioMsgIdType CSmsHeader::BioMsgIdType() const williamr@2: { williamr@2: return iBioMsgIdType; williamr@2: } williamr@2: williamr@2: /** williamr@2: Sets the message's BIO message type identifier. williamr@2: williamr@2: @param aBioMsgIdType williamr@2: The BIO message type identifier williamr@2: */ williamr@2: inline void CSmsHeader::SetBioMsgIdType(TBioMsgIdType aBioMsgIdType) williamr@2: { williamr@2: iBioMsgIdType = aBioMsgIdType; williamr@2: } williamr@2: williamr@2: /* williamr@2: * TMsvSmsEntry williamr@2: */ williamr@2: williamr@2: /** williamr@2: Constructor. williamr@2: williamr@2: @internalTechnology williamr@2: @released williamr@2: */ williamr@2: inline TMsvSmsEntry::TMsvSmsEntry() williamr@2: { williamr@2: } williamr@2: williamr@2: /** williamr@2: Copy constuctor. williamr@2: williamr@2: @param aEntry williamr@2: The index entry to copy. williamr@2: williamr@2: @internalTechnology williamr@2: @released williamr@2: */ williamr@2: inline TMsvSmsEntry::TMsvSmsEntry(const TMsvEntry& aEntry) williamr@2: : TMsvEntry(aEntry) williamr@2: { williamr@2: } williamr@2: williamr@2: /** williamr@2: Sets the User Prompt Indicator flag. williamr@2: williamr@2: @param aUPI williamr@2: A value of True to set the flag. williamr@2: williamr@2: @internalTechnology williamr@2: @released williamr@2: */ williamr@2: inline void TMsvSmsEntry::SetUserPromptIndicator(TBool aUPI) williamr@2: { williamr@2: (aUPI) ? (iMtmData2 |= EMsvSmsEntryUserPromptIndicator) : (iMtmData2 &= ~EMsvSmsEntryUserPromptIndicator); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the User Prompt Indicator flag. williamr@2: williamr@2: @return williamr@2: A value of True if the User Prompt Indicator flag is. williamr@2: williamr@2: @internalTechnology williamr@2: @released williamr@2: */ williamr@2: inline TBool TMsvSmsEntry::UserPromptIndicator() const williamr@2: { williamr@2: return (iMtmData2 & EMsvSmsEntryUserPromptIndicator); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the Protocol Identifier data. williamr@2: williamr@2: @return williamr@2: The Protocol Identifier data. williamr@2: williamr@2: @internalTechnology williamr@2: @released williamr@2: */ williamr@2: inline TUint8 TMsvSmsEntry::ProtocolIdentifier() const williamr@2: { williamr@2: return STATIC_CAST(TUint8, iMtmData2 & EMsvSmsEntryProtocolIdentifier); williamr@2: } williamr@2: williamr@2: /** williamr@2: Sets the Protocol Identifier data. williamr@2: williamr@2: @param aPID williamr@2: The Protocol Identifier data. williamr@2: williamr@2: @internalTechnology williamr@2: @released williamr@2: */ williamr@2: inline void TMsvSmsEntry::SetProtocolIdentifier(TSmsProtocolIdentifier aPID) williamr@2: { williamr@2: SetProtocolIdentifier(STATIC_CAST(TUint8, aPID)); williamr@2: } williamr@2: williamr@2: /** williamr@2: Sets the Protocol Identifier data. williamr@2: williamr@2: @param aPID williamr@2: The Protocol Identifier data. williamr@2: williamr@2: @internalTechnology williamr@2: @released williamr@2: */ williamr@2: inline void TMsvSmsEntry::SetProtocolIdentifier(TUint8 aPID) williamr@2: { williamr@2: iMtmData2 = (iMtmData2 & ~EMsvSmsEntryProtocolIdentifier) | (aPID & EMsvSmsEntryProtocolIdentifier); williamr@2: } williamr@2: williamr@2: /** williamr@2: Sets the SMS class data and defined flag. williamr@2: williamr@2: @param aClassDefined williamr@2: A value of True to set the SMS class data defined flag. williamr@2: williamr@2: @param aClass williamr@2: The SMS class data. williamr@2: williamr@2: @internalTechnology williamr@2: @released williamr@2: */ williamr@2: inline void TMsvSmsEntry::SetClass(TBool aClassDefined, TSmsDataCodingScheme::TSmsClass aClass) williamr@2: { williamr@2: aClassDefined ? (iMtmData2 |= EMsvSmsEntryClassDefined) : (iMtmData2 &= ~EMsvSmsEntryClassDefined); williamr@2: iMtmData2 = (iMtmData2 & ~EMsvSmsEntryClass) | ((aClass << EMsvSmsEntryClassShift) & EMsvSmsEntryClass); williamr@2: } williamr@2: williamr@2: /** williamr@2: Gets the SMS class data and defined flag. williamr@2: williamr@2: @param aClass williamr@2: An output argument with the SMS class data. williamr@2: williamr@2: @return williamr@2: A value of True if the SMS class data defined flag is set. williamr@2: williamr@2: @internalTechnology williamr@2: @released williamr@2: */ williamr@2: inline TBool TMsvSmsEntry::Class(TSmsDataCodingScheme::TSmsClass& aClass) const williamr@2: { williamr@2: aClass = STATIC_CAST(TSmsDataCodingScheme::TSmsClass, ((iMtmData2 & EMsvSmsEntryClass) >> EMsvSmsEntryClassShift)); williamr@2: return iMtmData2 & EMsvSmsEntryClassDefined; williamr@2: }