--- a/telephonyserver/etelmultimode/CETEL/mm_messaging.cpp Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserver/etelmultimode/CETEL/mm_messaging.cpp Thu May 06 15:10:38 2010 +0100
@@ -1,1188 +1,1248 @@
-// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// This file contains the method definitions for all EtelMM subsessions that
-// provide messaging functionality.
-//
-//
-
-/**
- @file
-*/
-
-// From core API
-#include <et_clsvr.h>
-#include <etelext.h>
-
-// Multimode header files
-#include <etelmm.h>
-#include <mmlist.h>
-#include <mmretrieve.h>
-
-#include "mm_hold.h"
-
-
-/************************************************************************/
-//
-// RMobileSmsMessaging
-//
-/************************************************************************/
-
-EXPORT_C RMobileSmsMessaging::RMobileSmsMessaging() :
- iSmsMessagingPtrHolder(NULL)
-/**
- Standard constructor.
- This member is internal and not intended for public use.
-*/
- {
- }
-
-EXPORT_C TInt RMobileSmsMessaging::Open(RMobilePhone& aPhone)
-
-/**
- This member function opens a SMS Messaging object. The name of the sub-session
- opened in the TSY will equal the string defined by the KETelSmsMessaging LIT
- definition.
-
- @param aPhone An existing RMobilePhone session.
- @return KErrNone if successful.
-
-@capability None
-*/
- {
- RSessionBase* session=&aPhone.SessionHandle();
- __ASSERT_ALWAYS(session!=NULL,PanicClient(EEtelPanicNullHandle));
- TInt subSessionHandle=aPhone.SubSessionHandle();
- __ASSERT_ALWAYS(subSessionHandle!=NULL,PanicClient(EEtelPanicNullHandle));
-
- TRAPD(ret,ConstructL());
- if (ret)
- return ret;
- TPtrC name(KETelSmsMessaging);
- SetSessionHandle(*session);
- TIpcArgs args(&name,TIpcArgs::ENothing,subSessionHandle);
- ret = CreateSubSession(*session,EEtelOpenFromSubSession,args);
- if (ret)
- Destruct();
- return ret;
- }
-
-EXPORT_C void RMobileSmsMessaging::Close()
-/**
- This method closes a RMobileSmsMessaging subsession
-
-@capability None
-*/
- {
- CloseSubSession(EEtelClose);
- Destruct();
- }
-
-EXPORT_C void RMobileSmsMessaging::ConstructL()
-/** Constructor. */
- {
- __ASSERT_ALWAYS(iSmsMessagingPtrHolder==NULL,PanicClient(EEtelPanicHandleNotClosed));
- iSmsMessagingPtrHolder = CSmsMessagingPtrHolder::NewL(CSmsMessagingPtrHolder::EMaxNumberSmsPtrSlots,CSmsMessagingPtrHolder::EMaxNumberSmsPtrCSlots);
- }
-
-EXPORT_C void RMobileSmsMessaging::Destruct()
-/** Destructor. */
- {
- delete iSmsMessagingPtrHolder;
- iSmsMessagingPtrHolder = NULL;
- ResetSessionHandle();
- }
-
-RMobileSmsMessaging::TMobileSmsAttributesV1::TMobileSmsAttributesV1()
-: iFlags(0),
- iDataFormat(EFormatUnspecified),
- iCdmaTeleservice(0),
- iCdmaServiceCategory(0)
-/** Constructor. */
- {
- }
-
-EXPORT_C RMobileSmsMessaging::TMobileSmsReceiveAttributesV1::TMobileSmsReceiveAttributesV1()
-: iStatus(EMtMessageUnknownStatus),
- iStoreIndex(0)
-/** Constructor. */
- {
- iExtensionId=KETelMobileSmsReceiveAttributesV1;
- }
-
-EXPORT_C RMobileSmsMessaging::TMobileSmsSendAttributesV1::TMobileSmsSendAttributesV1()
-: iMsgRef(0),
- iMore(EFalse)
-/** Constructor. */
- {
- iExtensionId=KETelMobileSmsSendAttributesV1;
- }
-
-EXPORT_C RMobileSmsMessaging::TMobileSmsCdmaSendAttributesV4::TMobileSmsCdmaSendAttributesV4()
-: iMsgRef(0),
- iMore(EFalse),
- iAddressAuthentication(0)
-/** Constructor. */
- {
- iExtensionId=KETelMobileSmsCdmaSendAttributesV4;
- }
-
-EXPORT_C RMobileSmsMessaging::TMobileSmsCapsV1::TMobileSmsCapsV1()
-: iSmsMode(0),
- iSmsControl(0)
-/** Constructor. */
- {
- iExtensionId=KETelExtMultimodeV1;
- }
-
-EXPORT_C TInt RMobileSmsMessaging::GetCaps(TDes8& aCaps) const
-/**
- This member function gets a class that reflects the SMS messaging capabilities
- of the phone.
-
- @param aCaps On return, a TMobileSmsCapsV1Pckg with the SMS messaging capabilities
- of the phone.
- @return KErrNone if successful.
- @see TMobileSmsCapsV1
-
-@capability None
-*/
- {
- return Get(EMobileSmsMessagingGetCaps, aCaps);
- }
-
-EXPORT_C TInt RMobileSmsMessaging::GetReceiveMode(TMobileSmsReceiveMode& aReceiveMode) const
-/**
- This member function retrieves the current setting of the TSY-phone incoming
- SMS receive mode. This setting dictates how the phone will handle incoming
- SMS messages before passing them on to TSY.
-
- @param aReceiveMode On return, the current receive mode.
- @return KErrNone if successful.
-
-@capability None
-*/
- {
- TPckg<TMobileSmsReceiveMode> ptr1(aReceiveMode);
- return Get(EMobileSmsMessagingGetReceiveMode, ptr1);
- }
-
-EXPORT_C void RMobileSmsMessaging::SetReceiveMode(TRequestStatus& aReqStatus, TMobileSmsReceiveMode aReceiveMode) const
-
-/**
- This member function sets the setting of the TSY-phone incoming SMS receive
- mode. This setting dictates how the phone will handle incoming SMS messages
- before passing them on to TSY.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingSetReceiveMode)
- to cancel a previously placed asynchronous SetReceiveMode() request.
-
- @param aReqStatus On return, KErrNone if successful.
- @param aReceiveMode The receive mode to set.
-
-@capability WriteDeviceData
-*/
- {
- __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
- iSmsMessagingPtrHolder->iReceiveMode = aReceiveMode;
- TPtrC8& ptr1=iSmsMessagingPtrHolder->SetC(CSmsMessagingPtrHolder::ESlot1SetReceiveMode,iSmsMessagingPtrHolder->iReceiveMode);
-
- Set(EMobileSmsMessagingSetReceiveMode, aReqStatus, ptr1);
- }
-
-EXPORT_C void RMobileSmsMessaging::NotifyReceiveModeChange(TRequestStatus& aReqStatus, TMobileSmsReceiveMode& aReceiveMode)
-/**
- This member function is used to notify the client if there is a change to the
- setting of the TSY-Phone receive mode.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingNotifyReceiveModeChange)
- to cancel a previously placed asynchronous NotifyReceiveModeChange() request.
-
- @param aReqStatus On return, KErrNone if successful
- @param aReceiveMode On return, the new SMS receive mode.
-
-@capability None
-*/
- {
- __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
-
- TPtr8& ptr1=iSmsMessagingPtrHolder->Set(CSmsMessagingPtrHolder::ESlot1NotifyReceiveModeChange,aReceiveMode);
-
- Get(EMobileSmsMessagingNotifyReceiveModeChange, aReqStatus, ptr1);
- }
-
-EXPORT_C void RMobileSmsMessaging::ReceiveMessage(TRequestStatus& aReqStatus, TDes8& aMsgData, TDes8& aMsgAttributes) const
-/**
- This member function will be used to wait for the next incoming SMS message.
- Once this member function completes, the client should immediately repost
- it if they want to receive the next incoming SMS message.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingReceiveMessage)
- to cancel a previously placed asynchronous ReceiveMessage() request.
-
- @param aReqStatus On return, KErrNone if successful.
- @param aMsgData On completion, the message data.
- @param aMsgAttributes On completion, a TMobileSmsReceiveAttributesV1Pckg containing
- the message attributes.
- @see TMobileSmsReceiveAttributesV1
-
-@capability NetworkServices
-@capability ReadUserData
-*/
- {
- Get(EMobileSmsMessagingReceiveMessage, aReqStatus, aMsgData, aMsgAttributes);
- }
-
-EXPORT_C void RMobileSmsMessaging::AckSmsStored(TRequestStatus& aReqStatus, const TDesC8& aMsgData, TBool aFull) const
-/**
- When the client receives an unstored SMS, it will use this member function
- to return a positive acknowledgment if it manages to successfully decode and
- store that SMS. If the client wishes to send a SMS-DELIVER-REPORT in response
- to the received SMS-DELIVER , than the aMsgData parameter will be used to
- hold the TPDU defined for a SMS-DELIVER-REPORT (for RP-ACK) in GSM 03.40.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingAckSmsStored)
- to cancel a previously placed asynchronous AckSmsStored() request.
-
- @param aReqStatus On return, KErrNone if successful.
- @param aMsgData Holds the TPDU defined for a SMS-DELIVER-REPORT (for RP-ACK)
- in GSM 03.40.
- @param aFull Indicates whether, after storing the acknowledged message, the
- client-side message store is now full or not. If client sets it to ETrue then
- it is informing the TSY that the store is full (or almost full) and that it
- does not want to receive any more messages until it calls ResumeSmsReception().
-
-@capability NetworkServices
-@capability NetworkControl
-*/
- {
- __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
-
- iSmsMessagingPtrHolder->iAckSmsStoredFull = aFull;
- TPtrC8& ptr1=iSmsMessagingPtrHolder->SetC(CSmsMessagingPtrHolder::ESlot1AckSmsStored,iSmsMessagingPtrHolder->iAckSmsStoredFull);
-
- Set(EMobileSmsMessagingAckSmsStored, aReqStatus, aMsgData ,ptr1);
- }
-
-EXPORT_C void RMobileSmsMessaging::NackSmsStored(TRequestStatus& aReqStatus, const TDesC8& aMsg, TInt aRpCause) const
-/** When the client receives an unstored SMS, it will use this member function
- to return a negative acknowledgment if it fails to decode and/or store that
- SMS.
-
- This TPDU will contain the TP error cause that prevents the client from acknowledging
- the SMS. The client should also provide the RP error cause by placing it in
- the aRpCause parameter.
-
- In GSM mode, once a client has rejected a received SMS due to storage full,
- the network will keep this message for later and suspend the forwarding of
- any further received SMS to this MS.
-
- In CDMA mode, the network will save the message but it will repeat sending
- of the message to the MS until either the MS eventually accepts it or the
- retry limit is reached.
-
- If retry limit is reached the network will tell the originator of the message
- that the transmission failed. In either case, when client-side memory is freed-up,
- the client must call ResumeSmsReception() in order to tell the phone and possibly
- the network that SMS can be received again.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingNackSmsStored)
- to cancel a previously placed asynchronous NackSmsStored() request.
-
- @param aReqStatus On return, KErrNone if successful.
- @param aMsg Holds the TPDU defined for a SMS-DELIVER-REPORT (for RP-ERROR)
- in GSM 03.40.
- @param aRpCause Contain one of the MS related extended error codes.
-
-@capability NetworkServices
-@capability NetworkControl
-*/
- {
- __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
- iSmsMessagingPtrHolder->iNackSmsStoredCause = aRpCause;
- TPtrC8& ptr1=iSmsMessagingPtrHolder->SetC(CSmsMessagingPtrHolder::ESlot1NackSmsStored,iSmsMessagingPtrHolder->iNackSmsStoredCause);
-
- Set(EMobileSmsMessagingNackSmsStored, aReqStatus, aMsg, ptr1);
- }
-
-EXPORT_C void RMobileSmsMessaging::ResumeSmsReception(TRequestStatus& aReqStatus) const
-/**
- This member functions resumes the reception of SMS messages.
-
- SMS reception can become suspended because SMS storage is full. Therefore
- if client-side storage is full, the client must stop receiving unstored messages.
- However, if the user deletes some client-side stored SMS messages, the client
- must use this member function to tell the TSY to inform a GSM network that
- messages can be received again or the phone that CDMA messages can be accepted
- again.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingResumeSmsReception)
- to cancel a previously placed asynchronous ResumeSmsReception() request.
-
- @param aReqStatus On return, KErrNone if successful.
-
-@capability NetworkServices
-@capability NetworkControl
-*/
- {
- Blank(EMobileSmsMessagingResumeSmsReception, aReqStatus);
- }
-
-EXPORT_C void RMobileSmsMessaging::SendMessage(TRequestStatus& aReqStatus, const TDesC8& aMsgData, TDes8& aMsgAttributes) const
-/**
- This member function sends an SMS message to the network.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingSendMessage)
- to cancel a previously placed asynchronous SendMessage() request.
-
- @param aReqStatus On return, KErrNone if successful, KErrNotSupported if the
- phone does not support outgoing SMS, KErrMMEtelFormatNotSupported if the phone
- does not support the client's chosen message data format, any of the KErrGsmSms…
- extended errors if the phone is in GSM mode and this is the error returned
- by the GSM network/service centre, Any of the KErrCdmaSms… extended errors
- if the phone is in CDMA mode and this is the error returned by the CDMA network/service
- centre. Please note that the last three examples are "extended" errors and
- will only be returned to those clients that request them. Clients that only
- understand core Symbian OS and ETel errors will receive KErrGeneral for any
- error cases that the TSY can not interpret.
- @param aMsgData The message data
- @param aMsgAttributes A TMobileSmsSendAttributesV1Pckg with the message attributes.
- The fields required will probably be message data format, destination and
- possibly a new service centre address. On return, for either successful or
- failed transmission, the message reference number assigned to this sent message
- will be placed by the TSY in the iMsgRef field. Also, if the SMS was sent
- during GSM or WCDMA mode, then the SMS-SUBMIT-REPORT will be placed by the
- TSY in the iSubmitReport field.
- @see TMobileSmsSendAttributesV1
-
-@capability NetworkServices
-@capability WriteUserData
-*/
- {
- SetAndGet(EMobileSmsMessagingSendMessage, aReqStatus,aMsgData,aMsgAttributes);
- }
-
-EXPORT_C void RMobileSmsMessaging::SendMessageNoFdnCheck(TRequestStatus& aReqStatus, const TDesC8& aMsgData, TDes8& aMsgAttributes) const
-/**
- Sends an outgoing SMS to the network.
-
- The number used for sending the SMS is not checked against those in the
- Fixed Dialling Number list even if the FDN service is enabled.
-
- @param aMsgData Supplies the TPDU to send
- @param aMsgAttributes Supplies the attributes of the outgoing message
-
-@capability NetworkServices
-@capability NetworkControl
-*/
- {
- SetAndGet(EMobileSmsMessagingSendMessageNoFdnCheck, aReqStatus,aMsgData,aMsgAttributes);
- }
-
-EXPORT_C void RMobileSmsMessaging::SetMoSmsBearer(TRequestStatus& aReqStatus, TMobileSmsBearer aBearer) const
-/**
- This member function sets the bearer type (GSM or GPRS) for sending SMS messages.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingSetMoSmsBearer)
- to cancel a previously placed asynchronous SetMoSmsBearer() request.
-
- @param aReqStatus On return, KErrNone if successful.
- @param aBearer The bearer type to set.
-
-@capability WriteDeviceData
-*/
- {
- __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
- iSmsMessagingPtrHolder->iSmsBearer = aBearer;
- TPtrC8& ptr1=iSmsMessagingPtrHolder->SetC(CSmsMessagingPtrHolder::ESlot1SetMoSmsBearer,iSmsMessagingPtrHolder->iSmsBearer);
-
- Set(EMobileSmsMessagingSetMoSmsBearer, aReqStatus, ptr1);
- }
-
-EXPORT_C TInt RMobileSmsMessaging::GetMoSmsBearer(TMobileSmsBearer& aBearer) const
-/**
- This member function is used to retrieve the current setting for the bearer
- type (GSM or GPRS) used for sending SMS messages.
-
- @param aBearer On return, the current bearer type.
- @return KErrNone if successful.
-
-@capability None
-*/
- {
- TPckg<TMobileSmsBearer> ptr1(aBearer);
- return Get(EMobileSmsMessagingGetMoSmsBearer, ptr1);
- }
-
-EXPORT_C void RMobileSmsMessaging::NotifyMoSmsBearerChange(TRequestStatus& aReqStatus, TMobileSmsBearer& aBearer)
-/**
- This member function is used t notify the client if there is a change to the
- setting for the bearer type used for sending SMS messages.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingNotifyMoSmsBearerChange)
- to cancel a previously placed asynchronous NotifyMoSmsBearerChange() request.
-
- @param aReqStatus On return, KErrNone if successful.
- @param aBearer On completion, the new bearer.
-
-@capability None
-*/
- {
- __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
-
- TPtr8& ptr1=iSmsMessagingPtrHolder->Set(CSmsMessagingPtrHolder::ESlot1NotifyMoSmsBearerChange,aBearer);
-
- Get(EMobileSmsMessagingNotifyMoSmsBearerChange, aReqStatus, ptr1);
- }
-
-//
-// SMS related storage
-//
-
-EXPORT_C TInt RMobileSmsMessaging::EnumerateMessageStores(TInt& aCount) const
-
-/**
- This request gets the number of phone-side SMS message stores supported by
- the phone in the aCount parameter.
-
- @param aCount On return, the number of phone-side SMS message stores.
- @return KErrNone if successful.
-
-@capability None
-*/
- {
- TPckg<TInt> ptr1(aCount);
- return Get(EMobileSmsMessagingEnumerateMessageStores, ptr1);
- }
-
-EXPORT_C void RMobileSmsMessaging::GetMessageStoreInfo(TRequestStatus& aReqStatus, TInt aIndex, TDes8& aInfo) const
-/**
- This request gets information about the SMS message store.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingGetMessageStoreInfo)
- to cancel a previously placed asynchronous GetMessageStoreInfo() request.
-
- @param aReqStatus On return, KErrNone if successful
- @param aIndex The index of the store, valid values are between 0 and (n-1),
- where n is given by the EnumerateMessageStores() request.
- @param aInfo On comletion, a RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg
- holding the SMS message store info.
- @see RMobilePhoneStore::TMobilePhoneStoreInfoV1
-
-@capability None
-*/
- {
- __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
-
- iSmsMessagingPtrHolder->iGetMessageStoreInfoIndex = aIndex;
- TPtrC8& ptr1=iSmsMessagingPtrHolder->SetC(CSmsMessagingPtrHolder::ESlot1GetMessageStoreInfo,iSmsMessagingPtrHolder->iGetMessageStoreInfoIndex);
-
- SetAndGet(EMobileSmsMessagingGetMessageStoreInfo, aReqStatus, ptr1, aInfo);
- }
-
-//
-// SMS Parameter Storage
-//
-
-EXPORT_C RMobileSmsMessaging::TMobileSmspEntryV1::TMobileSmspEntryV1()
-: iValidParams(0),
- iProtocolId(0),
- iDcs(0),
- iValidityPeriod(0),
- iReservedFiller(0)
- {
- iExtensionId=KETelExtMultimodeV1;
- }
-
-void RMobileSmsMessaging::TMobileSmspEntryV1::InternalizeL(RReadStream& aStream)
-/**
- This method internalizes the SMS parameter entry from a stream
-
- @param aStream The read stream containing the SMS parameter entry
- */
- {
- TMultimodeType::InternalizeL(aStream);
- iIndex = aStream.ReadInt32L();
- aStream >> iText;
- iValidParams = aStream.ReadUint32L();
- aStream >> iDestination;
- aStream >> iServiceCentre;
- iProtocolId = aStream.ReadUint8L();
- iDcs = aStream.ReadUint8L();
- iValidityPeriod = aStream.ReadUint8L();
- }
-
-void RMobileSmsMessaging::TMobileSmspEntryV1::ExternalizeL(RWriteStream& aStream) const
-/**
- This method externalizes the SMS parameter entry into a stream
- @param aStream The write stream that will contain the SMS parameter entry
- */
- {
- TMultimodeType::ExternalizeL(aStream);
- aStream.WriteInt32L(iIndex);
- aStream << iText;
- aStream.WriteUint32L(iValidParams);
- aStream << iDestination;
- aStream << iServiceCentre;
- aStream.WriteUint8L(iProtocolId);
- aStream.WriteUint8L(iDcs);
- aStream.WriteUint8L(iValidityPeriod);
- }
-
-
-EXPORT_C void RMobileSmsMessaging::StoreSmspListL(TRequestStatus& aReqStatus, CMobilePhoneSmspList* aSmspList) const
-/**
- This member function may be used to store a new version of the entire list
- of SMSP entries. It will overwrite the current contents of the storage and
- may cause other clients to be notified of the change in SMSP list.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingStoreSmspList)
- to cancel a previously placed asynchronous StoreSmspListL() request.
-
- @leave k Will leave if the CBufFlat to hold the streamed contents can not be allocated
- @param aReqStatus On return, KErrNone if successful.
- @param aSmspList The list of SMSP entries to store, should not contain more
- entries than can be stored phone-side.
-
-@capability WriteDeviceData
-*/
- {
- __ASSERT_ALWAYS(aSmspList!=NULL,PanicClient(EEtelPanicNullHandle));
- __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
-
- delete iSmsMessagingPtrHolder->iSmspBuf;
- iSmsMessagingPtrHolder->iSmspBuf = NULL;
-
- iSmsMessagingPtrHolder->iSmspBuf=aSmspList->StoreLC();
- CleanupStack::Pop();
-
- (iSmsMessagingPtrHolder->iSmspPtr).Set((iSmsMessagingPtrHolder->iSmspBuf)->Ptr(0));
-
- Set(EMobileSmsMessagingStoreSmspList,aReqStatus,iSmsMessagingPtrHolder->iSmspPtr);
-
- }
-
-EXPORT_C void RMobileSmsMessaging::NotifySmspListChange(TRequestStatus& aReqStatus) const
-/**
- This member function allows a client to be notified that changes have been
- made to the SMSP list. When it completes, it does not return the new version
- of the list so the client will have to retrieve the list again if it is interested
- in the new list.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingNotifySmspListChange)
- to cancel a previously placed asynchronous NotifySmspListChange() request.
-
- @param aReqStatus On return, KErrNone if successful.
-
-@capability None
-*/
- {
- Blank(EMobileSmsMessagingNotifySmspListChange,aReqStatus);
- }
-
-
-/************************************************************************/
-//
-// RMobileBroadcastMessaging
-//
-/************************************************************************/
-
-EXPORT_C RMobileBroadcastMessaging::RMobileBroadcastMessaging() :
- iCbsMessagingPtrHolder(NULL)
-/** Standard constructor. */
- {
- }
-
-EXPORT_C TInt RMobileBroadcastMessaging::Open(RMobilePhone& aPhone)
-/**
- This function member opens a Broadcast Messaging object. The name of the sub-session
- opened in the TSY will equal the string defined by the KETelBroadcastMessaging
- LIT definition.
-
- @param aPhone The existing RMobilePhone session.
- @return KErrNone if successful, a system wide error code if not.
-
-@capability None
-*/
- {
- RSessionBase* session=&aPhone.SessionHandle();
- __ASSERT_ALWAYS(session!=NULL,PanicClient(EEtelPanicNullHandle));
- TInt subSessionHandle=aPhone.SubSessionHandle();
- __ASSERT_ALWAYS(subSessionHandle!=NULL,PanicClient(EEtelPanicNullHandle));
-
- TRAPD(ret,ConstructL());
- if (ret)
- return ret;
- TPtrC name(KETelBroadcastMessaging);
- SetSessionHandle(*session);
- TIpcArgs args(&name,TIpcArgs::ENothing,subSessionHandle);
- ret = CreateSubSession(*session,EEtelOpenFromSubSession,args);
- if (ret)
- Destruct();
- return ret;
- }
-
-EXPORT_C void RMobileBroadcastMessaging::Close()
-/** This function member closes a RMobileBroadcastMessaging object.
-@capability None
-*/
- {
- CloseSubSession(EEtelClose);
- Destruct();
- }
-
-EXPORT_C void RMobileBroadcastMessaging::ConstructL()
- {
- __ASSERT_ALWAYS(iCbsMessagingPtrHolder==NULL,PanicClient(EEtelPanicHandleNotClosed));
- iCbsMessagingPtrHolder = CCbsMessagingPtrHolder::NewL(CCbsMessagingPtrHolder::EMaxNumberBroadcastPtrSlots,CCbsMessagingPtrHolder::EMaxNumberBroadcastPtrCSlots);
- }
-
-EXPORT_C void RMobileBroadcastMessaging::Destruct()
-/** Destructor. Deletes any dynamically allocated memory. */
- {
- delete iCbsMessagingPtrHolder;
- iCbsMessagingPtrHolder = NULL;
- ResetSessionHandle();
- }
-
-EXPORT_C RMobileBroadcastMessaging::TMobileBroadcastCapsV1::TMobileBroadcastCapsV1() :
- iModeCaps(0),
- iFilterCaps(0)
- {
- iExtensionId=KETelExtMultimodeV1;
- }
-
-EXPORT_C TInt RMobileBroadcastMessaging::GetCaps(TDes8& aCaps) const
-/**
- This function member gets a class that reflects the broadcast messaging capabilities
- of the phone.
-
- @param aCaps On completion, a TMobileBroadcastCapsV1Pckg with the broadcast
- messaging capabilities.
- @return KErrNone if successful, a system wide error code if not.
- @see TMobileBroadcastCapsV1
-
-@capability None
-*/
- {
- return Get(EMobileBroadcastMessagingGetCaps, aCaps);
- }
-
-EXPORT_C RMobileBroadcastMessaging::TMobileBroadcastAttributesV1::TMobileBroadcastAttributesV1() :
- iFlags(0),
- iFormat(EFormatUnspecified),
- iServiceCategory(0)
- {
- iExtensionId=KETelExtMultimodeV1;
- }
-
-/**
- This is the initialization of the TMobileBroadcastAttributesV2 structured type
-
-*/
-EXPORT_C RMobileBroadcastMessaging::TMobileBroadcastAttributesV2::TMobileBroadcastAttributesV2() :
- TMobileBroadcastAttributesV1(),
- iNumberOfPages(0),
- iMessageType(0),
- iMessageId(0),
- iSerialNum(0),
- iDCS(0)
- /** Default constructor. All internal data is set to 0 and the extension ID to
- KETelExtMultimodeV2. */
- {
- iExtensionId=KETelExtMultimodeV2;
- }
-
-
-/**
- This function member enables the client to receive the next
- incoming broadcast message from the network.
-
- The request will be completed when a new message arrives. The
- client will pass a descriptor of size KBroadcastPageSize bytes,
- provided by the typedef TBroadcastPageData, to hold the returned
- broadcast message data into the aMsgData parameter.
-
- This buffer size should be used for all types of messages:
- GSM, CDMA and WCDMA.
-
- The function explicity checks that the aMsgData parameter is of
- size KBroadcastPageSize. If the buffer size does not equal
- KBroadcastPageSize, the client request will be completed with
- KErrArgument.
-
- A TSY should handle ReceiveMessage() requests by making them repost
- immediately (to ensure none are missed) and possibly multiple
- completion enabled. When a new message arrives the TSY will copy the
- broadcast message contents into its stored pointer to the broadcast
- message data, fill in the broadcast message attributes and then
- complete the request.
-
- @param aReqStatus On return, KErrNone if successful, KErrArgument if the aMsgData buffer size does not equal KBroadcastPageSize, otherwise a system wide error code.
- @param aMsgData On completion, the message data.
- @param aMsgAttributes On completion, the broadcast message attributes, in an instance of the TMobileBroadcastAttributesV1Pckg class.
- @see TMobileBroadcastAttributesV1
-
-@capability None
-*/
-EXPORT_C void RMobileBroadcastMessaging::ReceiveMessage(TRequestStatus& aReqStatus, TDes8& aMsgData, TDes8& aMsgAttributes) const
- {
- if (aMsgData.MaxLength() != KBroadcastPageSize)
- {
- TRequestStatus* status=&aReqStatus;
- User::RequestComplete(status,KErrArgument);
- return;
- }
- Get(EMobileBroadcastMessagingReceiveMessage, aReqStatus, aMsgData, aMsgAttributes);
- }
-
-EXPORT_C TInt RMobileBroadcastMessaging::GetFilterSetting(TMobilePhoneBroadcastFilter& aSetting) const
-/**
- This function member gets the current setting for the receipt of broadcast
- messages.
-
- This setting will indicate whether all or no messages are being accepted or
- whether only those messages specified by the filters are going to be accepted
- or rejected.
-
- If the returned setting, aSetting, equals EBroadcastAcceptFilter then the
- phone will accept messages whose identifier is included within the identifier
- list AND whose language is included within the language filter. If the returned
- setting, aSetting, equals EBroadcastRejectFilter then the phone will reject
- messages whose identifier is included within the identifier list OR whose
- language is included within the language filter.
-
- N.B. If the phone supports both GSM/WCDMA and CDMA mode then it will probably
- need two identifier lists - one to contain a list of CBMI (for GSM/WCDMA mode)
- and the other to contain a list of Service Categories (for CDMA mode) This
- function member is synchronous because it is expected that this will be a
- TSY specific setting whose current value the TSY has previously determined.
-
- @param aSetting On completion, the current filter settings.
- @return KErrNone if successful, or KErrNotSupported if the phone does not support
- a filter setting.
-
-@capability ReadUserData
-*/
- {
- TPckg<TMobilePhoneBroadcastFilter> ptr1(aSetting);
- return Get(EMobileBroadcastMessagingGetFilterSetting, ptr1);
- }
-
-EXPORT_C void RMobileBroadcastMessaging::SetFilterSetting(TRequestStatus& aReqStatus, TMobilePhoneBroadcastFilter aSetting) const
-/**
- This function member sets a new setting for the receipt of broadcast messages.
-
- This setting will specify whether all or no messages are being accepted or
- whether only those messages specified by the filters are going to be accepted
- or rejected.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingSetFilterSetting)
- to cancel a previously placed asynchronous SetFilterSetting() request.
-
- @param aReqStatus On return, the KErrNone if successful, KErrNotSupported
- if the phone does not support a filter setting.
- @param aSetting On completion, the new filter setting of the phone.
-
-@capability WriteUserData
-*/
- {
- __ASSERT_ALWAYS(iCbsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
-
- iCbsMessagingPtrHolder->iSetFilterSetting=aSetting;
-
- TPtrC8& ptr1=iCbsMessagingPtrHolder->SetC(CCbsMessagingPtrHolder::ESlot1SetFilterSetting, iCbsMessagingPtrHolder->iSetFilterSetting);
-
- Set(EMobileBroadcastMessagingSetFilterSetting, aReqStatus, ptr1);
- }
-
-EXPORT_C void RMobileBroadcastMessaging::NotifyFilterSettingChange(TRequestStatus& aReqStatus, TMobilePhoneBroadcastFilter& aSetting) const
-/**
- This function member allows a client to be notified if there is a change in
- the setting for the receipt of broadcast messages.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingNotifyFilterSettingChange)
- to cancel a previously placed asynchronous NotifyFilterSetting() request.
-
- @param aReqStatus On return, KErrNone if successful, KErrNotSupported if the
- phone does not support a filter setting.
- @param aSetting On completion, the changed filter setting.
-
-@capability ReadUserData
-*/
- {
- __ASSERT_ALWAYS(iCbsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
-
- TPtr8& ptr1=iCbsMessagingPtrHolder->Set(CCbsMessagingPtrHolder::ESlot1NotifyFilterSettingChange,aSetting);
-
- Get(EMobileBroadcastMessagingNotifyFilterSettingChange, aReqStatus, ptr1);
- }
-
-EXPORT_C void RMobileBroadcastMessaging::GetLanguageFilter(TRequestStatus& aReqStatus, TDes16& aLangFilter) const
-/**
- This function member allows a client to retrieve the current contents of the
- broadcast message language filter.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingGetLanguageFilter)
- to cancel a previously placed asynchronous GetLanguageFilter() request.
-
- @param aReqStatus On return KErrNone if successful, KErrNotFound if there
- is no language filter in place, and KErrNotSupported if the phone does not
- support a language filter.
- @param aLangFilter On completion, contain as many languages (each coded on
- 16-bits) as can fit in the descriptor supplied by the client. This filter
- defines which are the desired (or undesired) language(s) of incoming broadcast
- messages. A language is defined either within one byte by its Cell Broadcast
- Data Coding Scheme (as defined in GSM 03.38) or within two bytes by its ISO
- 639 alphanumeric pair. Even if a language is represented by an 8-bit value
- it will be returned as a 16-bit value with the language in the least significant
- 8-bits.
-
-@capability ReadUserData
-*/
- {
- Get(EMobileBroadcastMessagingGetLanguageFilter,aReqStatus,aLangFilter);
- }
-
-EXPORT_C void RMobileBroadcastMessaging::SetLanguageFilter(TRequestStatus& aReqStatus, const TDesC16& aLangFilter) const
-/**
- This function member allows a client to store new contents for the broadcast
- message language filter.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingSetLanguageFilter)
- to cancel a previously placed asynchronous SetLanguageFilter() request.
-
- @param aReqStatus On return, KErrNone, if successful, KErrNotSupported if
- the phone does not support a language filter.
- @param aLangFilter Each element in this descriptor will define a language.
- This filter will define which are the desired (or undesired) language(s) of
- incoming broadcast messages.
-
-@capability WriteUserData
-*/
- {
- Set(EMobileBroadcastMessagingSetLanguageFilter,aReqStatus,aLangFilter);
- }
-
-EXPORT_C void RMobileBroadcastMessaging::NotifyLanguageFilterChange(TRequestStatus& aReqStatus, TDes16& aLangFilter) const
-/**
- This function member allows a client to be notified if there is a change in
- the contents of the language filter.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingNotifyLanguageFilterChange)
- to cancel a previously placed asynchronous NotifyLanguageFilterChange() request.
-
- @param aReqStatus On return, KErrNone, if successful, KErrNotSupported if
- the phone does not support a language filter.
- @param aLangFilter On completion, the new language filter.
-
-@capability ReadUserData
-*/
- {
- Get(EMobileBroadcastMessagingNotifyLanguageFilterChange,aReqStatus,aLangFilter);
- }
-
-EXPORT_C RMobileBroadcastMessaging::TMobileBroadcastIdEntryV1::TMobileBroadcastIdEntryV1() :
- iId(0)
- {
- iExtensionId=KETelExtMultimodeV1;
- }
-
-void RMobileBroadcastMessaging::TMobileBroadcastIdEntryV1::InternalizeL(RReadStream& aStream)
-/** Internalizes the CBMI entry from a stream.
-
- @param aStream The read stream containing the CBMI entry.
- */
- {
- TMultimodeType::InternalizeL(aStream);
- iId = aStream.ReadUint16L();
- }
-
-void RMobileBroadcastMessaging::TMobileBroadcastIdEntryV1::ExternalizeL(RWriteStream& aStream) const
-/** Externalizes the CBMI entry into a stream.
-
- @param aStream The write stream that will contain the CBMI entry.
- */
- {
- TMultimodeType::ExternalizeL(aStream);
- aStream.WriteInt16L(iId);
- }
-
-EXPORT_C void RMobileBroadcastMessaging::StoreBroadcastIdListL(TRequestStatus& aReqStatus, CMobilePhoneBroadcastIdList* aBroadcastIdList, TMobileBroadcastIdType aIdType)
-/**
- This function member may be used to store a new version of the entire BroadcastId list
- of identifier entries.
-
- The list, should not contain more entries than can be stored phone-side. This
- function member will store all the identifier list entries into the phone-side
- storage. It will overwrite the current contents of the storage and may cause
- other clients to be notified of the change in identifier list.
-
- Due to the probable time taken to store a list, there is only an asynchronous
- version of this function member. This function member will leave if an out
- of memory error occurs during allocation of a client-side buffer in which
- to store the streamed list contents.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingStoreIdList)
- to cancel a previously placed asynchronous StoreBroadcastIdListL() request.
- Will leave if the CBufFlat to hold the streamed contents can not be allocated
-
- @param aReqStatus On return, KErrNone if successful, a system wide error code
- if not.
- @param aBroadcastIdList The list of BroadcastId identifier entries to be stored.
- @param aIdType Specifies whether the list is to be stored as a GSM/WCDMA list
- of CBMI entries or a CDMA list of Service Category entries.
-
-@capability WriteUserData
-*/
- {
- __ASSERT_ALWAYS(aBroadcastIdList!=NULL,PanicClient(EEtelPanicNullHandle));
- __ASSERT_ALWAYS(iCbsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
-
- delete iCbsMessagingPtrHolder->iBroadcastIdBuf;
- iCbsMessagingPtrHolder->iBroadcastIdBuf = NULL;
-
- iCbsMessagingPtrHolder->iBroadcastIdBuf=aBroadcastIdList->StoreLC();
- CleanupStack::Pop();
-
- (iCbsMessagingPtrHolder->iBroadcastIdPtr).Set((iCbsMessagingPtrHolder->iBroadcastIdBuf)->Ptr(0));
-
- iCbsMessagingPtrHolder->iIdType = aIdType;
- TPtrC8& ptr2=iCbsMessagingPtrHolder->SetC(CCbsMessagingPtrHolder::ESlot1StoreBroadcastIdListL,iCbsMessagingPtrHolder);
-
- Set(EMobileBroadcastMessagingStoreIdList,aReqStatus,iCbsMessagingPtrHolder->iBroadcastIdPtr, ptr2);
- }
-
-EXPORT_C void RMobileBroadcastMessaging::NotifyBroadcastIdListChange(TRequestStatus& aReqStatus) const
-/**
- This function member allows a client to be notified that changes have been
- made to the BroadcastId filter identifier list.
-
- When it completes, it does not return the new version of the list so the client
- will have to retrieve the list using CRetrieveMobilePhoneBroadcastIdL again if it is interested in the new list.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingNotifyIdListChange)
- to cancel a previously placed asynchronous NotifyBroadcastIdListChange() request.
-
- @param aReqStatus On return, KErrNone if successful, a system wide error code
- if not.
-
-@capability None
-*/
- {
- Blank(EMobileBroadcastMessagingNotifyIdListChange,aReqStatus);
- }
-
-/************************************************************************/
-//
-// RMobileUssdMessaging
-//
-/************************************************************************/
-
-EXPORT_C RMobileUssdMessaging::RMobileUssdMessaging()
-: iUssdMessagingPtrHolder(NULL)
-/** Constructor. */
- {
- }
-
-EXPORT_C TInt RMobileUssdMessaging::Open(RMobilePhone& aPhone)
-/**
- This member function opens a USSD messaging sub-session. The name of the sub-session
- opened in the TSY will equal the string defined by the KETelUssdMessaging
- LIT definition.
-
- @param aPhone An existing RMobilePhone session.
- @return KErrNone if successful.
-
-@capability None
-*/
- {
- RSessionBase* session=&aPhone.SessionHandle();
- __ASSERT_ALWAYS(session!=NULL,PanicClient(EEtelPanicNullHandle));
- TInt subSessionHandle=aPhone.SubSessionHandle();
- __ASSERT_ALWAYS(subSessionHandle!=NULL,PanicClient(EEtelPanicNullHandle));
-
- TRAPD(ret,ConstructL());
- if (ret)
- return ret;
- TPtrC name(KETelUssdMessaging);
- SetSessionHandle(*session);
- TIpcArgs args(&name,TIpcArgs::ENothing,subSessionHandle);
- ret = CreateSubSession(*session,EEtelOpenFromSubSession,args);
- if (ret)
- Destruct();
- return ret;
- }
-
-EXPORT_C void RMobileUssdMessaging::Close()
-/** This member function closes a USSD Messaging object.
-@capability None
-*/
- {
- CloseSubSession(EEtelClose);
- Destruct();
- }
-
-EXPORT_C void RMobileUssdMessaging::ConstructL()
- {
- }
-
-EXPORT_C void RMobileUssdMessaging::Destruct()
-/** Destructor. */
- {
- }
-
-EXPORT_C RMobileUssdMessaging::TMobileUssdCapsV1::TMobileUssdCapsV1() :
- iUssdFormat(0),
- iUssdTypes(0)
- {
- iExtensionId=KETelExtMultimodeV1;
- }
-
-EXPORT_C TInt RMobileUssdMessaging::GetCaps(TDes8& aCaps) const
-/**
- This member function returns a class that reflects the USSD messaging capabilities
- of the phone.
-
- @param aCaps On completion, a TMobileUssdCapsV1Pckg with the current USSD
- messaging capabilities.
- @return KErrNone if successful.
- @see TMobileUssdCapsV1
-
-@capability None
-*/
- {
- return Get(EMobileUssdMessagingGetCaps, aCaps);
- }
-
-EXPORT_C RMobileUssdMessaging::TMobileUssdAttributesV1::TMobileUssdAttributesV1() :
- iFlags(0),
- iFormat(EFormatUnspecified),
- iType(EUssdUnknown),
- iDcs(0)
- {
- iExtensionId=KETelExtMultimodeV1;
- }
-
-EXPORT_C void RMobileUssdMessaging::ReceiveMessage(TRequestStatus& aReqStatus, TDes8& aMsgData, TDes8& aMsgAttributes) const
-/**
- This member function enables the client to receive the next incoming USSD message
- from the network. The request will be completed when a new message arrives.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileUssdMessagingReceiveMessage)
- to cancel a previously placed asynchronous ReceiveMessage() request.
-
- @param aReqStatus On return, KErrNone if successful.
- @param aMsgData A descriptor large enough to hold the returned USSD message
- data. For GSM/ WCDMA USSD messages this will be a buffer of 160 bytes and
- the clients are provided with a typedef called RMobileUssdMessaging::TGsmUssdMessageData.
- @param aMsgAttributes On completion, the TMobileUssdAttributesV1Pckg with the
- message attributes.
-
- @see TMobileUssdAttributesV1
-
-@capability ReadDeviceData
-@capability NetworkControl
-*/
- {
- Get(EMobileUssdMessagingReceiveMessage, aReqStatus, aMsgData, aMsgAttributes);
- }
-
-EXPORT_C void RMobileUssdMessaging::SendMessage(TRequestStatus& aReqStatus, const TDesC8& aMsgData, const TDesC8& aMsgAttributes) const
-/**
- This member function sends a USSD message to the network.
-
- See 3GPP spec. 04.90 for more details on expected responses from
- the network.
-
- Use RTelSubSessionBase::CancelAsyncRequest(EMobileUssdMessagingSendMessage)
- to cancel a previously placed asynchronous SendMessage() request.
-
- @param aReqStatus On return, KErrNone if successful.
- @param aMsgData The message data.
- @param aMsgAttributes The TMobileUssdAttributesV1Pckg with the message attributes.
-
- @see TMobileUssdAttributesV1
-
-@capability NetworkServices
-@capability WriteDeviceData
-@capability NetworkControl
-*/
- {
- Set(EMobileUssdMessagingSendMessage, aReqStatus, aMsgData, aMsgAttributes);
- }
-
-EXPORT_C void RMobileUssdMessaging::SendMessageNoFdnCheck(TRequestStatus& aReqStatus, const TDesC8& aMsgData, const TDesC8& aMsgAttributes) const
-/**
- Sends an outgoing USSD to the network.
-
- The number used for sending the SMS is not checked against those
- in the Fixed Dialling Number list even if the FDN service is enabled.
-
- @param aMsgData Supplies the USSD message data to send
- @param aMsgAttributes Supplies the attributes of the outgoing USSD
-
-@capability NetworkServices
-@capability NetworkControl
-@capability WriteDeviceData
-*/
- {
- Set(EMobileUssdMessagingSendMessageNoFdnCheck, aReqStatus, aMsgData, aMsgAttributes);
- }
-
-EXPORT_C void RMobileUssdMessaging::SendRelease(TRequestStatus& aReqStatus, TDes8& aReturnResult) const
-/**
- Sends a USSD release message to the network. This request can terminate an ongoing "dialogue" (send-receive) at any time.
-
- @param aReqStatus Returns the result code after the asynchronous call completes.
- @param aReturnResult A packaged instance of the RMobilePhone::TMobilePhoneSendSSRequestV3 class containing the result of the release.
-
-@capability NetworkServices
-@capability NetworkControl
-*/
- {
- Get(EMobileUssdMessagingSendRelease, aReqStatus, aReturnResult);
- }
-
-EXPORT_C void RMobileUssdMessaging::NotifyNetworkRelease(TRequestStatus& aReqStatus, TDes8& aReturnResult) const
-/**
- Notifies the client of a MT USSD release message to the mobile device. The notification completes when a release
- message to terminate the session has been received and successfully acknowledged.
- NB: This fucntion has been deprecated and it is not recommended for future development work.
-
- @param aReqStatus Returns the result code after the asynchronous call completes.
- @param aReturnResult A packaged instance of the RMobilePhone::TMobilePhoneSendSSRequestV3 class containing the result of the release.
-
-@capability None
-*/
- {
- Get(EMobileUssdMessagingNotifyNetworkRelease, aReqStatus, aReturnResult);
- }
-
-EXPORT_C void RMobileUssdMessaging::NotifyNetworkRelease(TRequestStatus& aReqStatus, TDes8& aMsgData, TDes8& aMsgAttributes) const
-/**
- Notifies the client of a MT USSD release message to the mobile device. The notification completes when a release
- message to terminate the session has been received and successfully acknowledged.
-
- @param aReqStatus Returns the result code after the asynchronous call completes.
- @param aMsgData A packaged instance of the RMobilePhone::TMobilePhoneSendSSRequestV3 class containing the result of the release.
- @param aMsgAttributes A packaged instance of the TMobileUssdAttributesV1Pckg class containing the message attributes.
-
- @see TMobileUssdAttributesV1
-
-@capability None
-*/
- {
- Get(EMobileUssdMessagingNotifyNetworkRelease, aReqStatus, aMsgData, aMsgAttributes);
- }
-
+// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This file contains the method definitions for all EtelMM subsessions that
+// provide messaging functionality.
+//
+//
+
+/**
+ @file
+*/
+
+// From core API
+#include <et_clsvr.h>
+#include <etelext.h>
+
+// Multimode header files
+#include <etelmm.h>
+#include <mmlist.h>
+#include <mmretrieve.h>
+
+#include "mm_hold.h"
+
+
+/************************************************************************/
+//
+// RMobileSmsMessaging
+//
+/************************************************************************/
+
+EXPORT_C RMobileSmsMessaging::RMobileSmsMessaging() :
+ iSmsMessagingPtrHolder(NULL)
+/**
+ Standard constructor.
+ This member is internal and not intended for public use.
+*/
+ {
+ }
+
+EXPORT_C TInt RMobileSmsMessaging::Open(RMobilePhone& aPhone)
+
+/**
+ This member function opens a SMS Messaging object. The name of the sub-session
+ opened in the TSY will equal the string defined by the KETelSmsMessaging LIT
+ definition.
+
+ @param aPhone An existing RMobilePhone session.
+ @return KErrNone if successful.
+
+@capability None
+*/
+ {
+ RSessionBase* session=&aPhone.SessionHandle();
+ __ASSERT_ALWAYS(session!=NULL,PanicClient(EEtelPanicNullHandle));
+ TInt subSessionHandle=aPhone.SubSessionHandle();
+ __ASSERT_ALWAYS(subSessionHandle!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ TRAPD(ret,ConstructL());
+ if (ret)
+ return ret;
+ TPtrC name(KETelSmsMessaging);
+ SetSessionHandle(*session);
+ TIpcArgs args(&name,TIpcArgs::ENothing,subSessionHandle);
+ ret = CreateSubSession(*session,EEtelOpenFromSubSession,args);
+ if (ret)
+ Destruct();
+ return ret;
+ }
+
+EXPORT_C void RMobileSmsMessaging::Close()
+/**
+ This method closes a RMobileSmsMessaging subsession
+
+@capability None
+*/
+ {
+ CloseSubSession(EEtelClose);
+ Destruct();
+ }
+
+EXPORT_C void RMobileSmsMessaging::ConstructL()
+/** Constructor. */
+ {
+ __ASSERT_ALWAYS(iSmsMessagingPtrHolder==NULL,PanicClient(EEtelPanicHandleNotClosed));
+ iSmsMessagingPtrHolder = CSmsMessagingPtrHolder::NewL(CSmsMessagingPtrHolder::EMaxNumberSmsPtrSlots,CSmsMessagingPtrHolder::EMaxNumberSmsPtrCSlots);
+ }
+
+EXPORT_C void RMobileSmsMessaging::Destruct()
+/** Destructor. */
+ {
+ delete iSmsMessagingPtrHolder;
+ iSmsMessagingPtrHolder = NULL;
+ ResetSessionHandle();
+ }
+
+RMobileSmsMessaging::TMobileSmsAttributesV1::TMobileSmsAttributesV1()
+: iFlags(0),
+ iDataFormat(EFormatUnspecified),
+ iCdmaTeleservice(0),
+ iCdmaServiceCategory(0)
+/** Constructor. */
+ {
+ }
+
+EXPORT_C RMobileSmsMessaging::TMobileSmsReceiveAttributesV1::TMobileSmsReceiveAttributesV1()
+: iStatus(EMtMessageUnknownStatus),
+ iStoreIndex(0)
+/** Constructor. */
+ {
+ iExtensionId=KETelMobileSmsReceiveAttributesV1;
+ }
+
+EXPORT_C RMobileSmsMessaging::TMobileSmsSendAttributesV1::TMobileSmsSendAttributesV1()
+: iMsgRef(0),
+ iMore(EFalse)
+/** Constructor. */
+ {
+ iExtensionId=KETelMobileSmsSendAttributesV1;
+ }
+
+EXPORT_C RMobileSmsMessaging::TMobileSmsCdmaSendAttributesV4::TMobileSmsCdmaSendAttributesV4()
+: iMsgRef(0),
+ iMore(EFalse),
+ iAddressAuthentication(0)
+/** Constructor. */
+ {
+ iExtensionId=KETelMobileSmsCdmaSendAttributesV4;
+ }
+
+EXPORT_C RMobileSmsMessaging::TMobileSmsCapsV1::TMobileSmsCapsV1()
+: iSmsMode(0),
+ iSmsControl(0)
+/** Constructor. */
+ {
+ iExtensionId=KETelExtMultimodeV1;
+ }
+
+EXPORT_C TInt RMobileSmsMessaging::GetCaps(TDes8& aCaps) const
+/**
+ This member function gets a class that reflects the SMS messaging capabilities
+ of the phone.
+
+ @param aCaps On return, a TMobileSmsCapsV1Pckg with the SMS messaging capabilities
+ of the phone.
+ @return KErrNone if successful.
+ @see TMobileSmsCapsV1
+
+@capability None
+*/
+ {
+ return Get(EMobileSmsMessagingGetCaps, aCaps);
+ }
+
+EXPORT_C TInt RMobileSmsMessaging::GetReceiveMode(TMobileSmsReceiveMode& aReceiveMode) const
+/**
+ This member function retrieves the current setting of the TSY-phone incoming
+ SMS receive mode. This setting dictates how the phone will handle incoming
+ SMS messages before passing them on to TSY.
+
+ @param aReceiveMode On return, the current receive mode.
+ @return KErrNone if successful.
+
+@capability None
+*/
+ {
+ TPckg<TMobileSmsReceiveMode> ptr1(aReceiveMode);
+ return Get(EMobileSmsMessagingGetReceiveMode, ptr1);
+ }
+
+EXPORT_C void RMobileSmsMessaging::SetReceiveMode(TRequestStatus& aReqStatus, TMobileSmsReceiveMode aReceiveMode) const
+
+/**
+ This member function sets the setting of the TSY-phone incoming SMS receive
+ mode. This setting dictates how the phone will handle incoming SMS messages
+ before passing them on to TSY.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingSetReceiveMode)
+ to cancel a previously placed asynchronous SetReceiveMode() request.
+
+ @param aReqStatus On return, KErrNone if successful.
+ @param aReceiveMode The receive mode to set.
+
+@capability WriteDeviceData
+*/
+ {
+ __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+ iSmsMessagingPtrHolder->iReceiveMode = aReceiveMode;
+ TPtrC8& ptr1=iSmsMessagingPtrHolder->SetC(CSmsMessagingPtrHolder::ESlot1SetReceiveMode,iSmsMessagingPtrHolder->iReceiveMode);
+
+ Set(EMobileSmsMessagingSetReceiveMode, aReqStatus, ptr1);
+ }
+
+EXPORT_C void RMobileSmsMessaging::NotifyReceiveModeChange(TRequestStatus& aReqStatus, TMobileSmsReceiveMode& aReceiveMode)
+/**
+ This member function is used to notify the client if there is a change to the
+ setting of the TSY-Phone receive mode.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingNotifyReceiveModeChange)
+ to cancel a previously placed asynchronous NotifyReceiveModeChange() request.
+
+ @param aReqStatus On return, KErrNone if successful
+ @param aReceiveMode On return, the new SMS receive mode.
+
+@capability None
+*/
+ {
+ __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ TPtr8& ptr1=iSmsMessagingPtrHolder->Set(CSmsMessagingPtrHolder::ESlot1NotifyReceiveModeChange,aReceiveMode);
+
+ Get(EMobileSmsMessagingNotifyReceiveModeChange, aReqStatus, ptr1);
+ }
+
+EXPORT_C void RMobileSmsMessaging::ReceiveMessage(TRequestStatus& aReqStatus, TDes8& aMsgData, TDes8& aMsgAttributes) const
+/**
+ This member function will be used to wait for the next incoming SMS message.
+ Once this member function completes, the client should immediately repost
+ it if they want to receive the next incoming SMS message.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingReceiveMessage)
+ to cancel a previously placed asynchronous ReceiveMessage() request.
+
+ @param aReqStatus On return, KErrNone if successful.
+ @param aMsgData On completion, the message data.
+ @param aMsgAttributes On completion, a TMobileSmsReceiveAttributesV1Pckg containing
+ the message attributes.
+ @see TMobileSmsReceiveAttributesV1
+
+@capability NetworkServices
+@capability ReadUserData
+*/
+ {
+ Get(EMobileSmsMessagingReceiveMessage, aReqStatus, aMsgData, aMsgAttributes);
+ }
+
+EXPORT_C void RMobileSmsMessaging::AckSmsStored(TRequestStatus& aReqStatus, const TDesC8& aMsgData, TBool aFull) const
+/**
+ When the client receives an unstored SMS, it will use this member function
+ to return a positive acknowledgment if it manages to successfully decode and
+ store that SMS. If the client wishes to send a SMS-DELIVER-REPORT in response
+ to the received SMS-DELIVER , than the aMsgData parameter will be used to
+ hold the TPDU defined for a SMS-DELIVER-REPORT (for RP-ACK) in GSM 03.40.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingAckSmsStored)
+ to cancel a previously placed asynchronous AckSmsStored() request.
+
+ @param aReqStatus On return, KErrNone if successful.
+ @param aMsgData Holds the TPDU defined for a SMS-DELIVER-REPORT (for RP-ACK)
+ in GSM 03.40.
+ @param aFull Indicates whether, after storing the acknowledged message, the
+ client-side message store is now full or not. If client sets it to ETrue then
+ it is informing the TSY that the store is full (or almost full) and that it
+ does not want to receive any more messages until it calls ResumeSmsReception().
+
+@capability NetworkServices
+@capability NetworkControl
+*/
+ {
+ __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ iSmsMessagingPtrHolder->iAckSmsStoredFull = aFull;
+ TPtrC8& ptr1=iSmsMessagingPtrHolder->SetC(CSmsMessagingPtrHolder::ESlot1AckSmsStored,iSmsMessagingPtrHolder->iAckSmsStoredFull);
+
+ Set(EMobileSmsMessagingAckSmsStored, aReqStatus, aMsgData ,ptr1);
+ }
+
+EXPORT_C void RMobileSmsMessaging::NackSmsStored(TRequestStatus& aReqStatus, const TDesC8& aMsg, TInt aRpCause) const
+/** When the client receives an unstored SMS, it will use this member function
+ to return a negative acknowledgment if it fails to decode and/or store that
+ SMS.
+
+ This TPDU will contain the TP error cause that prevents the client from acknowledging
+ the SMS. The client should also provide the RP error cause by placing it in
+ the aRpCause parameter.
+
+ In GSM mode, once a client has rejected a received SMS due to storage full,
+ the network will keep this message for later and suspend the forwarding of
+ any further received SMS to this MS.
+
+ In CDMA mode, the network will save the message but it will repeat sending
+ of the message to the MS until either the MS eventually accepts it or the
+ retry limit is reached.
+
+ If retry limit is reached the network will tell the originator of the message
+ that the transmission failed. In either case, when client-side memory is freed-up,
+ the client must call ResumeSmsReception() in order to tell the phone and possibly
+ the network that SMS can be received again.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingNackSmsStored)
+ to cancel a previously placed asynchronous NackSmsStored() request.
+
+ @param aReqStatus On return, KErrNone if successful.
+ @param aMsg Holds the TPDU defined for a SMS-DELIVER-REPORT (for RP-ERROR)
+ in GSM 03.40.
+ @param aRpCause Contain one of the MS related extended error codes.
+
+@capability NetworkServices
+@capability NetworkControl
+*/
+ {
+ __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+ iSmsMessagingPtrHolder->iNackSmsStoredCause = aRpCause;
+ TPtrC8& ptr1=iSmsMessagingPtrHolder->SetC(CSmsMessagingPtrHolder::ESlot1NackSmsStored,iSmsMessagingPtrHolder->iNackSmsStoredCause);
+
+ Set(EMobileSmsMessagingNackSmsStored, aReqStatus, aMsg, ptr1);
+ }
+
+EXPORT_C void RMobileSmsMessaging::ResumeSmsReception(TRequestStatus& aReqStatus) const
+/**
+ This member functions resumes the reception of SMS messages.
+
+ SMS reception can become suspended because SMS storage is full. Therefore
+ if client-side storage is full, the client must stop receiving unstored messages.
+ However, if the user deletes some client-side stored SMS messages, the client
+ must use this member function to tell the TSY to inform a GSM network that
+ messages can be received again or the phone that CDMA messages can be accepted
+ again.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingResumeSmsReception)
+ to cancel a previously placed asynchronous ResumeSmsReception() request.
+
+ @param aReqStatus On return, KErrNone if successful.
+
+@capability NetworkServices
+@capability NetworkControl
+*/
+ {
+ Blank(EMobileSmsMessagingResumeSmsReception, aReqStatus);
+ }
+
+EXPORT_C void RMobileSmsMessaging::SendMessage(TRequestStatus& aReqStatus, const TDesC8& aMsgData, TDes8& aMsgAttributes) const
+/**
+ This member function sends an SMS message to the network.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingSendMessage)
+ to cancel a previously placed asynchronous SendMessage() request.
+
+ @param aReqStatus On return, KErrNone if successful, KErrNotSupported if the
+ phone does not support outgoing SMS, KErrMMEtelFormatNotSupported if the phone
+ does not support the client's chosen message data format, any of the KErrGsmSms…
+ extended errors if the phone is in GSM mode and this is the error returned
+ by the GSM network/service centre, Any of the KErrCdmaSms… extended errors
+ if the phone is in CDMA mode and this is the error returned by the CDMA network/service
+ centre. Please note that the last three examples are "extended" errors and
+ will only be returned to those clients that request them. Clients that only
+ understand core Symbian OS and ETel errors will receive KErrGeneral for any
+ error cases that the TSY can not interpret.
+ @param aMsgData The message data
+ @param aMsgAttributes A TMobileSmsSendAttributesV1Pckg with the message attributes.
+ The fields required will probably be message data format, destination and
+ possibly a new service centre address. On return, for either successful or
+ failed transmission, the message reference number assigned to this sent message
+ will be placed by the TSY in the iMsgRef field. Also, if the SMS was sent
+ during GSM or WCDMA mode, then the SMS-SUBMIT-REPORT will be placed by the
+ TSY in the iSubmitReport field.
+ @see TMobileSmsSendAttributesV1
+
+@capability NetworkServices
+@capability WriteUserData
+*/
+ {
+ SetAndGet(EMobileSmsMessagingSendMessage, aReqStatus,aMsgData,aMsgAttributes);
+ }
+
+EXPORT_C void RMobileSmsMessaging::SendMessageNoFdnCheck(TRequestStatus& aReqStatus, const TDesC8& aMsgData, TDes8& aMsgAttributes) const
+/**
+ Sends an outgoing SMS to the network.
+
+ The number used for sending the SMS is not checked against those in the
+ Fixed Dialling Number list even if the FDN service is enabled.
+
+ @param aMsgData Supplies the TPDU to send
+ @param aMsgAttributes Supplies the attributes of the outgoing message
+
+@capability NetworkServices
+@capability NetworkControl
+*/
+ {
+ SetAndGet(EMobileSmsMessagingSendMessageNoFdnCheck, aReqStatus,aMsgData,aMsgAttributes);
+ }
+
+EXPORT_C void RMobileSmsMessaging::SetMoSmsBearer(TRequestStatus& aReqStatus, TMobileSmsBearer aBearer) const
+/**
+ This member function sets the bearer type (GSM or GPRS) for sending SMS messages.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingSetMoSmsBearer)
+ to cancel a previously placed asynchronous SetMoSmsBearer() request.
+
+ @param aReqStatus On return, KErrNone if successful.
+ @param aBearer The bearer type to set.
+
+@capability WriteDeviceData
+*/
+ {
+ __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+ iSmsMessagingPtrHolder->iSmsBearer = aBearer;
+ TPtrC8& ptr1=iSmsMessagingPtrHolder->SetC(CSmsMessagingPtrHolder::ESlot1SetMoSmsBearer,iSmsMessagingPtrHolder->iSmsBearer);
+
+ Set(EMobileSmsMessagingSetMoSmsBearer, aReqStatus, ptr1);
+ }
+
+EXPORT_C TInt RMobileSmsMessaging::GetMoSmsBearer(TMobileSmsBearer& aBearer) const
+/**
+ This member function is used to retrieve the current setting for the bearer
+ type (GSM or GPRS) used for sending SMS messages.
+
+ @param aBearer On return, the current bearer type.
+ @return KErrNone if successful.
+
+@capability None
+*/
+ {
+ TPckg<TMobileSmsBearer> ptr1(aBearer);
+ return Get(EMobileSmsMessagingGetMoSmsBearer, ptr1);
+ }
+
+EXPORT_C void RMobileSmsMessaging::NotifyMoSmsBearerChange(TRequestStatus& aReqStatus, TMobileSmsBearer& aBearer)
+/**
+ This member function is used t notify the client if there is a change to the
+ setting for the bearer type used for sending SMS messages.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingNotifyMoSmsBearerChange)
+ to cancel a previously placed asynchronous NotifyMoSmsBearerChange() request.
+
+ @param aReqStatus On return, KErrNone if successful.
+ @param aBearer On completion, the new bearer.
+
+@capability None
+*/
+ {
+ __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ TPtr8& ptr1=iSmsMessagingPtrHolder->Set(CSmsMessagingPtrHolder::ESlot1NotifyMoSmsBearerChange,aBearer);
+
+ Get(EMobileSmsMessagingNotifyMoSmsBearerChange, aReqStatus, ptr1);
+ }
+
+//
+// SMS related storage
+//
+
+EXPORT_C TInt RMobileSmsMessaging::EnumerateMessageStores(TInt& aCount) const
+
+/**
+ This request gets the number of phone-side SMS message stores supported by
+ the phone in the aCount parameter.
+
+ @param aCount On return, the number of phone-side SMS message stores.
+ @return KErrNone if successful.
+
+@capability None
+*/
+ {
+ TPckg<TInt> ptr1(aCount);
+ return Get(EMobileSmsMessagingEnumerateMessageStores, ptr1);
+ }
+
+EXPORT_C void RMobileSmsMessaging::GetMessageStoreInfo(TRequestStatus& aReqStatus, TInt aIndex, TDes8& aInfo) const
+/**
+ This request gets information about the SMS message store.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingGetMessageStoreInfo)
+ to cancel a previously placed asynchronous GetMessageStoreInfo() request.
+
+ @param aReqStatus On return, KErrNone if successful
+ @param aIndex The index of the store, valid values are between 0 and (n-1),
+ where n is given by the EnumerateMessageStores() request.
+ @param aInfo On comletion, a RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg
+ holding the SMS message store info.
+ @see RMobilePhoneStore::TMobilePhoneStoreInfoV1
+
+@capability None
+*/
+ {
+ __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ iSmsMessagingPtrHolder->iGetMessageStoreInfoIndex = aIndex;
+ TPtrC8& ptr1=iSmsMessagingPtrHolder->SetC(CSmsMessagingPtrHolder::ESlot1GetMessageStoreInfo,iSmsMessagingPtrHolder->iGetMessageStoreInfoIndex);
+
+ SetAndGet(EMobileSmsMessagingGetMessageStoreInfo, aReqStatus, ptr1, aInfo);
+ }
+
+//
+// SMS Parameter Storage
+//
+
+EXPORT_C RMobileSmsMessaging::TMobileSmspEntryV1::TMobileSmspEntryV1()
+: iValidParams(0),
+ iProtocolId(0),
+ iDcs(0),
+ iValidityPeriod(0),
+ iReservedFiller(0)
+ {
+ iExtensionId=KETelExtMultimodeV1;
+ }
+
+void RMobileSmsMessaging::TMobileSmspEntryV1::InternalizeL(RReadStream& aStream)
+/**
+ This method internalizes the SMS parameter entry from a stream
+
+ @param aStream The read stream containing the SMS parameter entry
+ */
+ {
+ TMultimodeType::InternalizeL(aStream);
+ iIndex = aStream.ReadInt32L();
+ aStream >> iText;
+ iValidParams = aStream.ReadUint32L();
+ aStream >> iDestination;
+ aStream >> iServiceCentre;
+ iProtocolId = aStream.ReadUint8L();
+ iDcs = aStream.ReadUint8L();
+ iValidityPeriod = aStream.ReadUint8L();
+ }
+
+void RMobileSmsMessaging::TMobileSmspEntryV1::ExternalizeL(RWriteStream& aStream) const
+/**
+ This method externalizes the SMS parameter entry into a stream
+ @param aStream The write stream that will contain the SMS parameter entry
+ */
+ {
+ TMultimodeType::ExternalizeL(aStream);
+ aStream.WriteInt32L(iIndex);
+ aStream << iText;
+ aStream.WriteUint32L(iValidParams);
+ aStream << iDestination;
+ aStream << iServiceCentre;
+ aStream.WriteUint8L(iProtocolId);
+ aStream.WriteUint8L(iDcs);
+ aStream.WriteUint8L(iValidityPeriod);
+ }
+
+
+EXPORT_C void RMobileSmsMessaging::StoreSmspListL(TRequestStatus& aReqStatus, CMobilePhoneSmspList* aSmspList) const
+/**
+ This member function may be used to store a new version of the entire list
+ of SMSP entries. It will overwrite the current contents of the storage and
+ may cause other clients to be notified of the change in SMSP list.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingStoreSmspList)
+ to cancel a previously placed asynchronous StoreSmspListL() request.
+
+ @leave k Will leave if the CBufFlat to hold the streamed contents can not be allocated
+ @param aReqStatus On return, KErrNone if successful.
+ @param aSmspList The list of SMSP entries to store, should not contain more
+ entries than can be stored phone-side.
+
+@capability WriteDeviceData
+*/
+ {
+ __ASSERT_ALWAYS(aSmspList!=NULL,PanicClient(EEtelPanicNullHandle));
+ __ASSERT_ALWAYS(iSmsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ delete iSmsMessagingPtrHolder->iSmspBuf;
+ iSmsMessagingPtrHolder->iSmspBuf = NULL;
+
+ iSmsMessagingPtrHolder->iSmspBuf=aSmspList->StoreLC();
+ CleanupStack::Pop();
+
+ (iSmsMessagingPtrHolder->iSmspPtr).Set((iSmsMessagingPtrHolder->iSmspBuf)->Ptr(0));
+
+ Set(EMobileSmsMessagingStoreSmspList,aReqStatus,iSmsMessagingPtrHolder->iSmspPtr);
+
+ }
+
+EXPORT_C void RMobileSmsMessaging::NotifySmspListChange(TRequestStatus& aReqStatus) const
+/**
+ This member function allows a client to be notified that changes have been
+ made to the SMSP list. When it completes, it does not return the new version
+ of the list so the client will have to retrieve the list again if it is interested
+ in the new list.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingNotifySmspListChange)
+ to cancel a previously placed asynchronous NotifySmspListChange() request.
+
+ @param aReqStatus On return, KErrNone if successful.
+
+@capability None
+*/
+ {
+ Blank(EMobileSmsMessagingNotifySmspListChange,aReqStatus);
+ }
+
+
+/************************************************************************/
+//
+// RMobileBroadcastMessaging
+//
+/************************************************************************/
+
+EXPORT_C RMobileBroadcastMessaging::RMobileBroadcastMessaging() :
+ iCbsMessagingPtrHolder(NULL)
+/** Standard constructor. */
+ {
+ }
+
+EXPORT_C TInt RMobileBroadcastMessaging::Open(RMobilePhone& aPhone)
+/**
+ This function member opens a Broadcast Messaging object. The name of the sub-session
+ opened in the TSY will equal the string defined by the KETelBroadcastMessaging
+ LIT definition.
+
+ @param aPhone The existing RMobilePhone session.
+ @return KErrNone if successful, a system wide error code if not.
+
+@capability None
+*/
+ {
+ RSessionBase* session=&aPhone.SessionHandle();
+ __ASSERT_ALWAYS(session!=NULL,PanicClient(EEtelPanicNullHandle));
+ TInt subSessionHandle=aPhone.SubSessionHandle();
+ __ASSERT_ALWAYS(subSessionHandle!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ TRAPD(ret,ConstructL());
+ if (ret)
+ return ret;
+ TPtrC name(KETelBroadcastMessaging);
+ SetSessionHandle(*session);
+ TIpcArgs args(&name,TIpcArgs::ENothing,subSessionHandle);
+ ret = CreateSubSession(*session,EEtelOpenFromSubSession,args);
+ if (ret)
+ Destruct();
+ return ret;
+ }
+
+EXPORT_C void RMobileBroadcastMessaging::Close()
+/** This function member closes a RMobileBroadcastMessaging object.
+@capability None
+*/
+ {
+ CloseSubSession(EEtelClose);
+ Destruct();
+ }
+
+EXPORT_C void RMobileBroadcastMessaging::ConstructL()
+ {
+ __ASSERT_ALWAYS(iCbsMessagingPtrHolder==NULL,PanicClient(EEtelPanicHandleNotClosed));
+ iCbsMessagingPtrHolder = CCbsMessagingPtrHolder::NewL(CCbsMessagingPtrHolder::EMaxNumberBroadcastPtrSlots,CCbsMessagingPtrHolder::EMaxNumberBroadcastPtrCSlots);
+ }
+
+EXPORT_C void RMobileBroadcastMessaging::Destruct()
+/** Destructor. Deletes any dynamically allocated memory. */
+ {
+ delete iCbsMessagingPtrHolder;
+ iCbsMessagingPtrHolder = NULL;
+ ResetSessionHandle();
+ }
+
+EXPORT_C RMobileBroadcastMessaging::TMobileBroadcastCapsV1::TMobileBroadcastCapsV1() :
+ iModeCaps(0),
+ iFilterCaps(0)
+ {
+ iExtensionId=KETelExtMultimodeV1;
+ }
+
+EXPORT_C TInt RMobileBroadcastMessaging::GetCaps(TDes8& aCaps) const
+/**
+ This function member gets a class that reflects the broadcast messaging capabilities
+ of the phone.
+
+ @param aCaps On completion, a TMobileBroadcastCapsV1Pckg with the broadcast
+ messaging capabilities.
+ @return KErrNone if successful, a system wide error code if not.
+ @see TMobileBroadcastCapsV1
+
+@capability None
+*/
+ {
+ return Get(EMobileBroadcastMessagingGetCaps, aCaps);
+ }
+
+EXPORT_C RMobileBroadcastMessaging::TMobileBroadcastAttributesV1::TMobileBroadcastAttributesV1() :
+ iFlags(0),
+ iFormat(EFormatUnspecified),
+ iServiceCategory(0)
+ {
+ iExtensionId=KETelExtMultimodeV1;
+ }
+
+/**
+ This is the initialization of the TMobileBroadcastAttributesV2 structured type
+
+*/
+EXPORT_C RMobileBroadcastMessaging::TMobileBroadcastAttributesV2::TMobileBroadcastAttributesV2() :
+ TMobileBroadcastAttributesV1(),
+ iNumberOfPages(0),
+ iMessageType(0),
+ iMessageId(0),
+ iSerialNum(0),
+ iDCS(0)
+ /** Default constructor. All internal data is set to 0 and the extension ID to
+ KETelExtMultimodeV2. */
+ {
+ iExtensionId=KETelExtMultimodeV2;
+ }
+
+
+/**
+ This function member enables the client to receive the next
+ incoming broadcast message from the network.
+
+ The request will be completed when a new message arrives. The
+ client will pass a descriptor of size KBroadcastPageSize bytes,
+ provided by the typedef TBroadcastPageData, to hold the returned
+ broadcast message data into the aMsgData parameter.
+
+ This buffer size should be used for all types of messages:
+ GSM, CDMA and WCDMA.
+
+ The function explicity checks that the aMsgData parameter is of
+ size KBroadcastPageSize. If the buffer size does not equal
+ KBroadcastPageSize, the client request will be completed with
+ KErrArgument.
+
+ A TSY should handle ReceiveMessage() requests by making them repost
+ immediately (to ensure none are missed) and possibly multiple
+ completion enabled. When a new message arrives the TSY will copy the
+ broadcast message contents into its stored pointer to the broadcast
+ message data, fill in the broadcast message attributes and then
+ complete the request.
+
+ @param aReqStatus On return, KErrNone if successful, KErrArgument if the aMsgData buffer size does not equal KBroadcastPageSize, otherwise a system wide error code.
+ @param aMsgData On completion, the message data.
+ @param aMsgAttributes On completion, the broadcast message attributes, in an instance of the TMobileBroadcastAttributesV1Pckg class.
+ @see TMobileBroadcastAttributesV1
+
+@capability None
+*/
+EXPORT_C void RMobileBroadcastMessaging::ReceiveMessage(TRequestStatus& aReqStatus, TDes8& aMsgData, TDes8& aMsgAttributes) const
+ {
+ if (aMsgData.MaxLength() != KBroadcastPageSize)
+ {
+ TRequestStatus* status=&aReqStatus;
+ User::RequestComplete(status,KErrArgument);
+ return;
+ }
+ Get(EMobileBroadcastMessagingReceiveMessage, aReqStatus, aMsgData, aMsgAttributes);
+ }
+
+EXPORT_C TInt RMobileBroadcastMessaging::GetFilterSetting(TMobilePhoneBroadcastFilter& aSetting) const
+/**
+ This function member gets the current setting for the receipt of broadcast
+ messages.
+
+ This setting will indicate whether all or no messages are being accepted or
+ whether only those messages specified by the filters are going to be accepted
+ or rejected.
+
+ If the returned setting, aSetting, equals EBroadcastAcceptFilter then the
+ phone will accept messages whose identifier is included within the identifier
+ list AND whose language is included within the language filter. If the returned
+ setting, aSetting, equals EBroadcastRejectFilter then the phone will reject
+ messages whose identifier is included within the identifier list OR whose
+ language is included within the language filter.
+
+ N.B. If the phone supports both GSM/WCDMA and CDMA mode then it will probably
+ need two identifier lists - one to contain a list of CBMI (for GSM/WCDMA mode)
+ and the other to contain a list of Service Categories (for CDMA mode) This
+ function member is synchronous because it is expected that this will be a
+ TSY specific setting whose current value the TSY has previously determined.
+
+ @param aSetting On completion, the current filter settings.
+ @return KErrNone if successful, or KErrNotSupported if the phone does not support
+ a filter setting.
+
+@capability ReadUserData
+*/
+ {
+ TPckg<TMobilePhoneBroadcastFilter> ptr1(aSetting);
+ return Get(EMobileBroadcastMessagingGetFilterSetting, ptr1);
+ }
+
+EXPORT_C void RMobileBroadcastMessaging::SetFilterSetting(TRequestStatus& aReqStatus, TMobilePhoneBroadcastFilter aSetting) const
+/**
+ This function member sets a new setting for the receipt of broadcast messages.
+
+ This setting will specify whether all or no messages are being accepted or
+ whether only those messages specified by the filters are going to be accepted
+ or rejected.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingSetFilterSetting)
+ to cancel a previously placed asynchronous SetFilterSetting() request.
+
+ @param aReqStatus On return, the KErrNone if successful, KErrNotSupported
+ if the phone does not support a filter setting.
+ @param aSetting On completion, the new filter setting of the phone.
+
+@capability WriteUserData
+*/
+ {
+ __ASSERT_ALWAYS(iCbsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ iCbsMessagingPtrHolder->iSetFilterSetting=aSetting;
+
+ TPtrC8& ptr1=iCbsMessagingPtrHolder->SetC(CCbsMessagingPtrHolder::ESlot1SetFilterSetting, iCbsMessagingPtrHolder->iSetFilterSetting);
+
+ Set(EMobileBroadcastMessagingSetFilterSetting, aReqStatus, ptr1);
+ }
+
+EXPORT_C void RMobileBroadcastMessaging::NotifyFilterSettingChange(TRequestStatus& aReqStatus, TMobilePhoneBroadcastFilter& aSetting) const
+/**
+ This function member allows a client to be notified if there is a change in
+ the setting for the receipt of broadcast messages.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingNotifyFilterSettingChange)
+ to cancel a previously placed asynchronous NotifyFilterSetting() request.
+
+ @param aReqStatus On return, KErrNone if successful, KErrNotSupported if the
+ phone does not support a filter setting.
+ @param aSetting On completion, the changed filter setting.
+
+@capability ReadUserData
+*/
+ {
+ __ASSERT_ALWAYS(iCbsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ TPtr8& ptr1=iCbsMessagingPtrHolder->Set(CCbsMessagingPtrHolder::ESlot1NotifyFilterSettingChange,aSetting);
+
+ Get(EMobileBroadcastMessagingNotifyFilterSettingChange, aReqStatus, ptr1);
+ }
+
+EXPORT_C void RMobileBroadcastMessaging::GetLanguageFilter(TRequestStatus& aReqStatus, TDes16& aLangFilter) const
+/**
+ This function member allows a client to retrieve the current contents of the
+ broadcast message language filter.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingGetLanguageFilter)
+ to cancel a previously placed asynchronous GetLanguageFilter() request.
+
+ @param aReqStatus On return KErrNone if successful, KErrNotFound if there
+ is no language filter in place, and KErrNotSupported if the phone does not
+ support a language filter.
+ @param aLangFilter On completion, contain as many languages (each coded on
+ 16-bits) as can fit in the descriptor supplied by the client. This filter
+ defines which are the desired (or undesired) language(s) of incoming broadcast
+ messages. A language is defined either within one byte by its Cell Broadcast
+ Data Coding Scheme (as defined in GSM 03.38) or within two bytes by its ISO
+ 639 alphanumeric pair. Even if a language is represented by an 8-bit value
+ it will be returned as a 16-bit value with the language in the least significant
+ 8-bits.
+
+@capability ReadUserData
+*/
+ {
+ Get(EMobileBroadcastMessagingGetLanguageFilter,aReqStatus,aLangFilter);
+ }
+
+EXPORT_C void RMobileBroadcastMessaging::SetLanguageFilter(TRequestStatus& aReqStatus, const TDesC16& aLangFilter) const
+/**
+ This function member allows a client to store new contents for the broadcast
+ message language filter.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingSetLanguageFilter)
+ to cancel a previously placed asynchronous SetLanguageFilter() request.
+
+ @param aReqStatus On return, KErrNone, if successful, KErrNotSupported if
+ the phone does not support a language filter.
+ @param aLangFilter Each element in this descriptor will define a language.
+ This filter will define which are the desired (or undesired) language(s) of
+ incoming broadcast messages.
+
+@capability WriteUserData
+*/
+ {
+ Set(EMobileBroadcastMessagingSetLanguageFilter,aReqStatus,aLangFilter);
+ }
+
+EXPORT_C void RMobileBroadcastMessaging::NotifyLanguageFilterChange(TRequestStatus& aReqStatus, TDes16& aLangFilter) const
+/**
+ This function member allows a client to be notified if there is a change in
+ the contents of the language filter.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingNotifyLanguageFilterChange)
+ to cancel a previously placed asynchronous NotifyLanguageFilterChange() request.
+
+ @param aReqStatus On return, KErrNone, if successful, KErrNotSupported if
+ the phone does not support a language filter.
+ @param aLangFilter On completion, the new language filter.
+
+@capability ReadUserData
+*/
+ {
+ Get(EMobileBroadcastMessagingNotifyLanguageFilterChange,aReqStatus,aLangFilter);
+ }
+
+EXPORT_C RMobileBroadcastMessaging::TMobileBroadcastIdEntryV1::TMobileBroadcastIdEntryV1() :
+ iId(0)
+ {
+ iExtensionId=KETelExtMultimodeV1;
+ }
+
+void RMobileBroadcastMessaging::TMobileBroadcastIdEntryV1::InternalizeL(RReadStream& aStream)
+/** Internalizes the CBMI entry from a stream.
+
+ @param aStream The read stream containing the CBMI entry.
+ */
+ {
+ TMultimodeType::InternalizeL(aStream);
+ iId = aStream.ReadUint16L();
+ }
+
+void RMobileBroadcastMessaging::TMobileBroadcastIdEntryV1::ExternalizeL(RWriteStream& aStream) const
+/** Externalizes the CBMI entry into a stream.
+
+ @param aStream The write stream that will contain the CBMI entry.
+ */
+ {
+ TMultimodeType::ExternalizeL(aStream);
+ aStream.WriteInt16L(iId);
+ }
+
+EXPORT_C void RMobileBroadcastMessaging::StoreBroadcastIdListL(TRequestStatus& aReqStatus, CMobilePhoneBroadcastIdList* aBroadcastIdList, TMobileBroadcastIdType aIdType)
+/**
+ This function member may be used to store a new version of the entire BroadcastId list
+ of identifier entries.
+
+ The list, should not contain more entries than can be stored phone-side. This
+ function member will store all the identifier list entries into the phone-side
+ storage. It will overwrite the current contents of the storage and may cause
+ other clients to be notified of the change in identifier list.
+
+ Due to the probable time taken to store a list, there is only an asynchronous
+ version of this function member. This function member will leave if an out
+ of memory error occurs during allocation of a client-side buffer in which
+ to store the streamed list contents.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingStoreIdList)
+ to cancel a previously placed asynchronous StoreBroadcastIdListL() request.
+ Will leave if the CBufFlat to hold the streamed contents can not be allocated
+
+ @param aReqStatus On return, KErrNone if successful, a system wide error code
+ if not.
+ @param aBroadcastIdList The list of BroadcastId identifier entries to be stored.
+ @param aIdType Specifies whether the list is to be stored as a GSM/WCDMA list
+ of CBMI entries or a CDMA list of Service Category entries.
+
+@capability WriteUserData
+*/
+ {
+ __ASSERT_ALWAYS(aBroadcastIdList!=NULL,PanicClient(EEtelPanicNullHandle));
+ __ASSERT_ALWAYS(iCbsMessagingPtrHolder!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ delete iCbsMessagingPtrHolder->iBroadcastIdBuf;
+ iCbsMessagingPtrHolder->iBroadcastIdBuf = NULL;
+
+ iCbsMessagingPtrHolder->iBroadcastIdBuf=aBroadcastIdList->StoreLC();
+ CleanupStack::Pop();
+
+ (iCbsMessagingPtrHolder->iBroadcastIdPtr).Set((iCbsMessagingPtrHolder->iBroadcastIdBuf)->Ptr(0));
+
+ iCbsMessagingPtrHolder->iIdType = aIdType;
+ TPtrC8& ptr2=iCbsMessagingPtrHolder->SetC(CCbsMessagingPtrHolder::ESlot1StoreBroadcastIdListL,iCbsMessagingPtrHolder);
+
+ Set(EMobileBroadcastMessagingStoreIdList,aReqStatus,iCbsMessagingPtrHolder->iBroadcastIdPtr, ptr2);
+ }
+
+EXPORT_C void RMobileBroadcastMessaging::NotifyBroadcastIdListChange(TRequestStatus& aReqStatus) const
+/**
+ This function member allows a client to be notified that changes have been
+ made to the BroadcastId filter identifier list.
+
+ When it completes, it does not return the new version of the list so the client
+ will have to retrieve the list using CRetrieveMobilePhoneBroadcastIdL again if it is interested in the new list.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileBroadcastMessagingNotifyIdListChange)
+ to cancel a previously placed asynchronous NotifyBroadcastIdListChange() request.
+
+ @param aReqStatus On return, KErrNone if successful, a system wide error code
+ if not.
+
+@capability None
+*/
+ {
+ Blank(EMobileBroadcastMessagingNotifyIdListChange,aReqStatus);
+ }
+
+/************************************************************************/
+//
+// RMobileUssdMessaging
+//
+/************************************************************************/
+
+EXPORT_C RMobileUssdMessaging::RMobileUssdMessaging()
+: iUssdMessagingPtrHolder(NULL)
+/** Constructor. */
+ {
+ }
+
+EXPORT_C TInt RMobileUssdMessaging::Open(RMobilePhone& aPhone)
+/**
+ This member function opens a USSD messaging sub-session. The name of the sub-session
+ opened in the TSY will equal the string defined by the KETelUssdMessaging
+ LIT definition.
+
+ @param aPhone An existing RMobilePhone session.
+ @return KErrNone if successful.
+
+@capability None
+*/
+ {
+ RSessionBase* session=&aPhone.SessionHandle();
+ __ASSERT_ALWAYS(session!=NULL,PanicClient(EEtelPanicNullHandle));
+ TInt subSessionHandle=aPhone.SubSessionHandle();
+ __ASSERT_ALWAYS(subSessionHandle!=NULL,PanicClient(EEtelPanicNullHandle));
+
+ TRAPD(ret,ConstructL());
+ if (ret)
+ return ret;
+ TPtrC name(KETelUssdMessaging);
+ SetSessionHandle(*session);
+ TIpcArgs args(&name,TIpcArgs::ENothing,subSessionHandle);
+ ret = CreateSubSession(*session,EEtelOpenFromSubSession,args);
+ if (ret)
+ Destruct();
+ return ret;
+ }
+
+EXPORT_C void RMobileUssdMessaging::Close()
+/** This member function closes a USSD Messaging object.
+@capability None
+*/
+ {
+ CloseSubSession(EEtelClose);
+ Destruct();
+ }
+
+EXPORT_C void RMobileUssdMessaging::ConstructL()
+ {
+ }
+
+EXPORT_C void RMobileUssdMessaging::Destruct()
+/** Destructor. */
+ {
+ }
+
+EXPORT_C RMobileUssdMessaging::TMobileUssdCapsV1::TMobileUssdCapsV1() :
+ iUssdFormat(0),
+ iUssdTypes(0)
+ {
+ iExtensionId=KETelExtMultimodeV1;
+ }
+
+EXPORT_C TInt RMobileUssdMessaging::GetCaps(TDes8& aCaps) const
+/**
+ This member function returns a class that reflects the USSD messaging capabilities
+ of the phone.
+
+ @param aCaps On completion, a TMobileUssdCapsV1Pckg with the current USSD
+ messaging capabilities.
+ @return KErrNone if successful.
+ @see TMobileUssdCapsV1
+
+@capability None
+*/
+ {
+ return Get(EMobileUssdMessagingGetCaps, aCaps);
+ }
+
+EXPORT_C RMobileUssdMessaging::TMobileUssdAttributesV1::TMobileUssdAttributesV1() :
+ iFlags(0),
+ iFormat(EFormatUnspecified),
+ iType(EUssdUnknown),
+ iDcs(0)
+ {
+ iExtensionId=KETelExtMultimodeV1;
+ }
+
+EXPORT_C void RMobileUssdMessaging::ReceiveMessage(TRequestStatus& aReqStatus, TDes8& aMsgData, TDes8& aMsgAttributes) const
+/**
+ This member function enables the client to declare an interest in receiving the next
+ incoming USSD message from the network. The request will be completed when the message is
+ offered to the client. The client must then decide to either accept or reject the USSD
+ session/dialogue.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileUssdMessagingReceiveMessage)
+ to cancel a previously placed asynchronous ReceiveMessage() request.
+
+ @param aReqStatus On return, KErrNone if successful.
+ @param aMsgData A descriptor large enough to hold the returned USSD message
+ data. For GSM/ WCDMA USSD messages this will be a buffer of 160 bytes and
+ the clients are provided with a typedef called RMobileUssdMessaging::TGsmUssdMessageData.
+ @param aMsgAttributes On completion, the TMobileUssdAttributesV1Pckg with the
+ message attributes.
+
+ @see TMobileUssdAttributesV1
+ @see AcceptIncomingDialogue RejectIncomingDialogue
+
+@capability ReadDeviceData
+@capability NetworkControl
+*/
+ {
+ Get(EMobileUssdMessagingReceiveMessage, aReqStatus, aMsgData, aMsgAttributes);
+ }
+
+EXPORT_C TInt RMobileUssdMessaging::AcceptIncomingDialogue() const
+/**
+ This member function enables the client to accept an incoming USSD message
+ and thereby the rest of the session/dialogue with the network.
+
+ It would be called when ReceiveMessage has completed and the client is not
+ currently in a dialogue/session. The alternative would be to call RejectIncomingDialogue
+ if the client was not interested in the dialogue (after examining the message data)
+
+ If the client calls this function within the time limit allowed
+ further network USSD messages will be sent to this client only. And
+ the client can use SendMessage to send USSD messages. This will continue until the session
+ is terminated or there is a session timeout.
+
+ @return KErrTimedOut if exceeded allocated time period fir accepting/rejecting. Else KErrNone.
+
+ @see ReceiveMessage
+ @see RejectIncomingDialogue
+
+@capability ReadUserData
+@capability NetworkControl
+*/
+ {
+ TPckgC<TBool> accept(ETrue);
+ TPckgC<TInt> type(RTelServer::EUssdType);
+ return Set(EEtelServerAcceptIncoming, type);
+ }
+
+EXPORT_C TInt RMobileUssdMessaging::RejectIncomingDialogue() const
+/**
+ This member function enables the client to to reject an incoming USSD message.
+ This indicates the client (having examined the data) is not interested in
+ receiving further messages in this dialogue/session.
+
+ It would be called when ReceiveMessage has completed and the client is not
+ currently in a dialogue/session. The alternative would be to call AcceptIncomingDialogue
+ if the client was interested in the dialogue (after examining the message data)
+
+ If the client calls this function within the time limit allowed
+ further network USSD messages will be sent to this client only and
+ the client can use SendMessage to send USSD messages.
+ This will continue until the session is terminated or there is a session timeout.
+
+ @return KErrTimedOut if exceeded allocated time period for accepting/rejecting. Else KErrNone.
+
+ @see ReceiveMessage
+ @see RejectIncomingDialogue
+
+@capability ReadUserData
+@capability NetworkControl
+*/
+ {
+ TPckgC<TBool> accept(ETrue);
+ TPckgC<TInt> type(RTelServer::EUssdType);
+ return Set(EEtelServerRejectIncoming, type);
+ }
+
+EXPORT_C void RMobileUssdMessaging::SendMessage(TRequestStatus& aReqStatus, const TDesC8& aMsgData, const TDesC8& aMsgAttributes) const
+/**
+ This member function sends a USSD message to the network.
+
+ See 3GPP spec. 04.90 for more details on expected responses from
+ the network.
+
+ Use RTelSubSessionBase::CancelAsyncRequest(EMobileUssdMessagingSendMessage)
+ to cancel a previously placed asynchronous SendMessage() request.
+
+ @param aReqStatus On return, KErrNone if successful.
+ @param aMsgData The message data.
+ @param aMsgAttributes The TMobileUssdAttributesV1Pckg with the message attributes.
+
+ @see TMobileUssdAttributesV1
+
+@capability NetworkServices
+@capability WriteDeviceData
+@capability NetworkControl
+*/
+ {
+ Set(EMobileUssdMessagingSendMessage, aReqStatus, aMsgData, aMsgAttributes);
+ }
+
+EXPORT_C void RMobileUssdMessaging::SendMessageNoFdnCheck(TRequestStatus& aReqStatus, const TDesC8& aMsgData, const TDesC8& aMsgAttributes) const
+/**
+ Sends an outgoing USSD to the network.
+
+ The number used for sending the SMS is not checked against those
+ in the Fixed Dialling Number list even if the FDN service is enabled.
+
+ @param aMsgData Supplies the USSD message data to send
+ @param aMsgAttributes Supplies the attributes of the outgoing USSD
+
+@capability NetworkServices
+@capability NetworkControl
+@capability WriteDeviceData
+*/
+ {
+ Set(EMobileUssdMessagingSendMessageNoFdnCheck, aReqStatus, aMsgData, aMsgAttributes);
+ }
+
+EXPORT_C void RMobileUssdMessaging::SendRelease(TRequestStatus& aReqStatus, TDes8& aReturnResult) const
+/**
+ Sends a USSD release message to the network. This request can terminate an ongoing "dialogue" (send-receive) at any time.
+
+ @param aReqStatus Returns the result code after the asynchronous call completes.
+ @param aReturnResult A packaged instance of the RMobilePhone::TMobilePhoneSendSSRequestV3 class containing the result of the release.
+
+@capability NetworkServices
+@capability NetworkControl
+*/
+ {
+ Get(EMobileUssdMessagingSendRelease, aReqStatus, aReturnResult);
+ }
+
+EXPORT_C void RMobileUssdMessaging::NotifyNetworkRelease(TRequestStatus& aReqStatus, TDes8& aReturnResult) const
+/**
+ Notifies the client of a MT USSD release message to the mobile device. The notification completes when a release
+ message to terminate the session has been received and successfully acknowledged.
+ NB: This fucntion has been deprecated and it is not recommended for future development work.
+
+ @param aReqStatus Returns the result code after the asynchronous call completes.
+ @param aReturnResult A packaged instance of the RMobilePhone::TMobilePhoneSendSSRequestV3 class containing the result of the release.
+
+@capability None
+*/
+ {
+ Get(EMobileUssdMessagingNotifyNetworkRelease, aReqStatus, aReturnResult);
+ }
+
+EXPORT_C void RMobileUssdMessaging::NotifyNetworkRelease(TRequestStatus& aReqStatus, TDes8& aMsgData, TDes8& aMsgAttributes) const
+/**
+ Notifies the client of a MT USSD release message to the mobile device. The notification completes when a release
+ message to terminate the session has been received and successfully acknowledged.
+
+ @param aReqStatus Returns the result code after the asynchronous call completes.
+ @param aMsgData A packaged instance of the RMobilePhone::TMobilePhoneSendSSRequestV3 class containing the result of the release.
+ @param aMsgAttributes A packaged instance of the TMobileUssdAttributesV1Pckg class containing the message attributes.
+
+ @see TMobileUssdAttributesV1
+
+@capability None
+*/
+ {
+ Get(EMobileUssdMessagingNotifyNetworkRelease, aReqStatus, aMsgData, aMsgAttributes);
+ }
+