epoc32/include/cdmasmsaddr.h
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
equal deleted inserted replaced
3:e1b950c65cb4 4:837f303aceeb
     1 // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // 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
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Declares the cdmau address classes and constants.
       
    15 // 
       
    16 //
       
    17 
       
    18 
       
    19 
       
    20 /**
       
    21  @file 
       
    22  @publishedAll
       
    23  @interim
       
    24 */
       
    25 
       
    26 #if !(defined __CDMASMSADDR_H__)
       
    27 #define __CDMASMSADDR_H__
       
    28 
       
    29 #include <smsuaddr.h>
       
    30 #include "tia637.h"
       
    31 
       
    32 // CDMA SMS PROT public constants start 
       
    33 _LIT(KCdmaSmsDatagram,"CDMA SMS Datagram");
       
    34 /** Cdma SMS sockets family identifier. */
       
    35 const TUint KCdmaSMSAddrFamily = 0x012;
       
    36 /** Cdmd SMS sockets protocol ID. */
       
    37 const TUint KCdmaSMSDatagramProtocol = KSMSDatagramProtocol;
       
    38 
       
    39 // Followings are the Ioctl commands used in cdmssmsprot
       
    40 // Ioctl commands that are supported in both cdma and gsm include the following from smsuaddr.h:
       
    41 // KIoctlDeleteSmsMessage        = 0x0300; 
       
    42 // KIoctlEnumerateSmsMessages    = 0x0301;
       
    43 // KIoctlReadMessageSucceeded    = 0x0304; 
       
    44 // KIoctlReadMessageFailed       = 0x0305; 
       
    45 // KIoctlSendSmsMessage          = 0x0306; 
       
    46 // KIoctlWriteSmsMessage         = 0x0307; 
       
    47 
       
    48 // Gsm Ioctl commands 0x0308-0x0310 are not supported for cdma
       
    49 
       
    50 /** Ioctl command for retrieving message identifier token object
       
    51 
       
    52 @capability NetworkServices
       
    53 @see RSocket::Ioctl(TUint aLevel,TUint aName,TDes8* aOption)
       
    54 */
       
    55 const TUint KIoctlGetMsgId=0x0311;
       
    56 
       
    57 /** Ioctl command for retrieving the last transport layer acknowledgement cause code
       
    58 This command is valid only after a KIoctlSendSmsMessage ioctl command and
       
    59 	aReqestStatus return one of the KErrCdmaSms extended errors and
       
    60 	bearer reply option parameter was present in the previous sent message.
       
    61 Otherwise the cause error received will be meaningless
       
    62 
       
    63 @capability NetworkServices
       
    64 @see RSocket::Ioctl(TUint aLevel,TUint aName,TDes8* aOption)
       
    65 */
       
    66 const TUint KIoctlGetLastSendError=0x0312;
       
    67 /** Value that aOptions could take when client demand traffic channel to stay open.
       
    68 	Used only for KIoctlSendSmsMessage Ioctl command */
       
    69 const TUint KKeepChannelOpen=0x01;
       
    70 
       
    71 /** Maximum size of storage location */
       
    72 const TInt KCdmaMaxLocationStorageSize=256;
       
    73 
       
    74 typedef TBuf8<KCdmaMaxLocationStorageSize>	TCdmaSmsStorageLocation;
       
    75 
       
    76 
       
    77 // CDMA SMS PROT public constants end
       
    78 
       
    79 /**
       
    80 Sockets for CDMA SMS messages must be bound to an address.  The 'address' 
       
    81 provides a rule that tells the CDMA SMS stack which received messages should 
       
    82 be given to the socket; see TCdmaSmsAddr for a more detailed explanation.
       
    83 
       
    84 Each address must belong to a family.  The family must be one of the values 
       
    85 listed below.
       
    86 */
       
    87 enum TCdmaSmsAddrFamily
       
    88 	{
       
    89 	// as in GSMU
       
    90 	/** This indicates that the address's family has not been set
       
    91 	*/
       
    92 	ECdmaSmsAddrUnbound=ESmsAddrUnbound,
       
    93 	/** Sockets bound to a ECdmaSmsAddrSendOnly address can only be for 
       
    94 	sending CDMA SMS messages; they will not receive any messages until they 
       
    95 	are bound to a different address.
       
    96 
       
    97 	Note that a socket bound to any address family except for 
       
    98 	ECdmaSmsAddrLocalOperation can be used to send messages; not just 
       
    99 	ECdmaSmsAddrSendOnly
       
   100 	*/
       
   101 	ECdmaSmsAddrSendOnly=ESmsAddrSendOnly,
       
   102 	/** Sockets bound to a ECdmaSmsAddrLocalOperation address can only be used 
       
   103 	for local protocol operations such as enumerating, writing and deleting 
       
   104 	messages.  These sockets cannot be used for sending or receiving messages 
       
   105 	until they are bound to a different address.
       
   106 	
       
   107 	Any socket kind of binded address and be used for writing and deleting messages.
       
   108 	Only LocalOperation can be used for enumerating messages.
       
   109 	*/
       
   110 	ECdmaSmsAddrLocalOperation=ESmsAddrLocalOperation,
       
   111 	/** 
       
   112 	Sockets bound to a ECdmaSmsWemtAddrMatchIEI address will receive messages 
       
   113 	on the WEMT teleservice that have a particular Information Element 
       
   114 	Identifier (IEI). 
       
   115 
       
   116 	As well as setting the address's family to ECdmaSmsWemtAddrMatchIEI, set 
       
   117 	the address's 'port'to one of the IEIs in TSmsInformationElementIdentifier;
       
   118 	 see CSmsInformationElement..  
       
   119 
       
   120 	The following example binds a socket so that it will receive messages on 
       
   121 	the WEMT teleservice that have the IEI "Special SMS Message Indication":
       
   122 
       
   123 	@code
       
   124 	smsaddr.SetCdmaSmsAddrFamily(ECdmaSmsWemtAddrMatchIEI);	
       
   125 	smsaddr.SetPort(CSmsInformationElement::ESmsIEISpecialSMSMessageIndication);
       
   126 	ret=socket.Bind(smsaddr);
       
   127 	@endcode
       
   128 	*/
       
   129 	ECdmaSmsWemtAddrMatchIEI=ESmsAddrMatchIEI,
       
   130 	/** 
       
   131 	Sockets bound to a ECdmaSmsAddrMatchText address will receive messages 
       
   132 	whose user data matches contains particular text.  The messages 
       
   133 	teleservice does not matter.
       
   134 
       
   135 	As well as setting the address's family to ECdmaSmsAddrMatchText, use 
       
   136 	TCdmaSmsAddr::SetTextMatch to specify an ASCII string.  This string is 
       
   137 	compared to the user data in the message.  If the two match then the 
       
   138 	message is delivered to the socket.  The string can contain the wildcards 
       
   139 	'?' to match one instance of any character and '*' to match any number of 
       
   140 	characters.
       
   141 
       
   142 	@code
       
   143 	// match messages that start with 12345 
       
   144 	smsaddr.SetCdmaSmsAddrFamily(ECdmaSmsAddrMatchText);
       
   145 	smsaddr.SetTextMatch(_L8("12345"));
       
   146 	ret=socketMatchText.Bind(smsaddr);
       
   147 
       
   148 	// match messages that end with 12345
       
   149 	smsaddr.SetCdmaSmsAddrFamily(ECdmaSmsAddrMatchText);
       
   150 	smsaddr.SetTextMatch(_L8("*12345"));
       
   151 	ret=socketMatchText.Bind(smsaddr);
       
   152 
       
   153 	// match message that contain 12345
       
   154 	smsaddr.SetCdmaSmsAddrFamily(ECdmaSmsAddrMatchText);
       
   155 	smsaddr.SetTextMatch(_L8("*12345*"));
       
   156 	ret=socketMatchText.Bind(smsaddr);
       
   157 	@endcode
       
   158 	*/
       
   159 	ECdmaSmsAddrMatchText=ESmsAddrMatchText,
       
   160 	/**
       
   161 	Sockets bound to a ECdmaSmsWemtAddrApplication8BitPort address will 
       
   162 	receive messages on the WEMT teleservice that are from a particular 8 bit 
       
   163 	application port. 
       
   164 
       
   165 	As well as setting the address's family to ECdmaSmsWemtAddrMatchIEI, set 
       
   166 	the address's 'port' to an 8-bit  number.
       
   167 
       
   168 	The following example binds a socket so that it will receive messages on 
       
   169 	the WEMT teleservice that are on the port 83:
       
   170 
       
   171 	@code
       
   172 	smsaddr.SetCdmaSmsAddrFamily(ECdmaSmsWemtAddrApplication8BitPort);	
       
   173 	smsaddr.SetPort(83);
       
   174 	ret=socket.Bind(smsaddr);
       
   175 	@endcode
       
   176 	*/
       
   177 	ECdmaSmsWemtAddrApplication8BitPort=ESmsAddrApplication8BitPort,
       
   178 	/**
       
   179 	This is similar to ECdmaSmsWemtAddrApplication8BitPort, except that the 
       
   180 	WEMT message must be from a particular 16 bit application port.  The 
       
   181 	address's port must be set to a 16-bit number.  For example:
       
   182 
       
   183 	@code
       
   184 	smsaddr.SetCdmaSmsAddrFamily(ECdmaSmsWemtAddrApplication16BitPort);	
       
   185 	smsaddr.SetPort(1000);
       
   186 	ret=socket.Bind(smsaddr);
       
   187 	@endcode
       
   188 	*/
       
   189   	ECdmaSmsWemtAddrApplication16BitPort=ESmsAddrApplication16BitPort,
       
   190 
       
   191 	// new values
       
   192 
       
   193 	/** 
       
   194 	Sockets bound to a ECdmaSmsAddrTeleservice address will receive messages 
       
   195 	on a particular teleservice.
       
   196 
       
   197 	As well as setting the address's family to ECdmaSmsAddrTeleservice, use 
       
   198 	TCdmaSmsAddr::SetTeleserviceId to set the required teleservice.  For 
       
   199 	example, to receive messages on the WEMT teleservice:
       
   200 
       
   201 	@code
       
   202 	smsaddr.SetCdmaSmsAddrFamily(ECdmaSmsAddrTeleservice);
       
   203 	smsaddr.SetTeleserviceId(KTeleserviceWEMT);
       
   204 	ret=socket.Bind(smsaddr);
       
   205 	@endcode
       
   206 	*/
       
   207 	ECdmaSmsAddrTeleservice =10,
       
   208 	/**
       
   209 	Sockets bound to a ECdmaSmsWemtAddrWdp address will receive messages on 
       
   210 	the WAP teleservice that are for a particular WDP port.
       
   211 
       
   212 	As well as setting the address's family to ECdmaSmsWemtAddrWdp, set the 
       
   213 	address's 'port' to a WDP port.  For example:
       
   214 
       
   215 	@code
       
   216 	smsaddr.SetCdmaSmsAddrFamily(ECdmaSmsAddrWdp);
       
   217 	smsaddr.SetPort(wdpPort);
       
   218 	ret=socket.Bind(smsaddr);
       
   219 	@endcode
       
   220 	*/
       
   221 	ECdmaSmsAddrWdp =11,
       
   222 	/** 
       
   223 	Sockets bound to a ECdmaSmsAddrBroadcast address will receive broadcast 
       
   224 	messages.  Note that broadcast messages cannot be received using other 
       
   225 	address family.
       
   226 
       
   227 	Broadcast messages belong to a service category. A socket can 
       
   228 	be bound so that it receives broadcast messages from a specified service 
       
   229 	category. Alternatively it can receive all broadcast messages, whatever 
       
   230 	the service category.
       
   231 
       
   232 	As well as setting the address's family to ECdmaSmsAddrBroadcast, use 
       
   233 	TCdmaSmsAddr::SetPort to set the required service category from those in 
       
   234 	tia637::TServiceCategory.
       
   235 	
       
   236 	@code
       
   237 	// Receive messages from the Emergency Broadcast service catagory
       
   238 	smsaddr.SetCdmaSmsAddrFamily(ECdmaSmsAddrBroadcast);
       
   239 	smsaddr.SetPort(KEmergencyBroadcasts);
       
   240 	ret=broadcastSocket.Bind(smsaddr);
       
   241 
       
   242 	// Receive messages from any service category by setting the port to zero
       
   243 	smsaddr.SetCdmaSmsAddrFamily(ECdmaSmsAddrBroadcast);
       
   244 	smsaddr.SetPort(0);
       
   245 	ret=broadcastSocket2.Bind(smsaddr);
       
   246 	@endcode
       
   247 	*/
       
   248 	ECdmaSmsAddrBroadcast=12
       
   249 	};
       
   250 
       
   251 
       
   252 /**
       
   253 Sockets for CDMA SMS messages must be bound to an address. A 
       
   254 socket's address can be thought of as a rule that tells the sockets server 
       
   255 which messages should be delivered to the socket. When the CDMA SMS stack 
       
   256 receives a message, it compares the message to the address (or rule) of each 
       
   257 of the CDMA SMS sockets.  If the message's contents match one of the rules, 
       
   258 the SMS stack uses Symbian OS's sockets server to pass the message to an 
       
   259 appropriate socket.
       
   260 
       
   261 The address is an instance of TCdmaSmsAddr.  Create an instance then use its 
       
   262 setter methods to configure up the address.  Before receiving SMS messages, 
       
   263 RSocket::Bind must be called to bind a socket to a appropriate address.
       
   264 
       
   265 Each address must belong to a family. This broadly defines the type of rule 
       
   266 used to match messages to socket.   Set an address's family with 
       
   267 SetCdmaSmsAddrFamily.  Depending upon the family, call methods to set further 
       
   268 address variables, thus refining the rule further. To understand address 
       
   269 better, see the descriptions of the address families in TCdmaSmsAddrFamily.
       
   270 
       
   271 Two sockets cannot be bound to the same address - the second attempt to bind a 
       
   272 socket will fail.
       
   273 
       
   274 Sometimes, a message is received matches several addresses, and so could 
       
   275 be sent to more than one socket.  The messages are compared to address in a 
       
   276 particular order; see CdmaSmsAddressPriority below for more information.
       
   277 */
       
   278 class TCdmaSmsAddr : public TSockAddr
       
   279 	{
       
   280 public:
       
   281 	/** Maximum length of the text pattern used to match the incoming text. */
       
   282 	enum { EMaxTextMatchLength = 24 };
       
   283 public:
       
   284 	IMPORT_C TCdmaSmsAddr();
       
   285 	IMPORT_C TCdmaSmsAddrFamily CdmaSmsAddrFamily() const;
       
   286 	IMPORT_C void SetCdmaSmsAddrFamily(TCdmaSmsAddrFamily aFamily);		
       
   287 	IMPORT_C TPtrC8 TextMatch() const;
       
   288 	IMPORT_C void SetTextMatch(const TDesC8& aText);
       
   289 	IMPORT_C TInt NumTextMatchChar() const;
       
   290 	IMPORT_C TBool operator==(const TCdmaSmsAddr& aAddr) const;
       
   291 	IMPORT_C TInt CdmaSmsAddressPriority()const;
       
   292 	IMPORT_C tia637::TTeleserviceId TeleserviceId() const;
       
   293 	IMPORT_C void SetTeleserviceId(tia637::TTeleserviceId aTeleserviceId);
       
   294 	};
       
   295 
       
   296 #endif //__CDMASMSADDR_H__