Chan.I.SMS — Telepathy D-Bus Interface Specification

# Interface Channel.Interface.SMS

Interface Index (Compact) | Summary | Description | Methods | Signals | Properties

### Methods

GetSMSLength | (aa{sv}: Message) | → | u: Chunks_Required, i: Remaining_Characters, i: Estimated_Cost |

### Signals

SMSChannelChanged | (b: SMSChannel) |

### Properties

Flash | b | Read only | Immutable |
SMSChannel | b | Read only | Sometimes immutable, Requestable |

Added in 0.19.12. Imported from rtcom-telepathy-glib, with the unused properties removed and the documentation tidied up.
Objects implementing this interface must also implement:

- org.freedesktop.Telepathy.Channel.Type.Text

### Description

This interface contains SMS-specific properties for text channels.

The presence of this interface on a channel does not imply that messages will be delivered via SMS.

This interface MAY appear in the Interfaces property of channels where SMSChannel would be immutable and false. It SHOULD appear on channels where SMSChannel is immutable and true, and also on channels where SMSChannel is mutable (i.e. channels that might fall back to sending SMS at any time, such as on MSN).

#### Handler filters

A handler for class 0 SMSes should advertise the following filter:

> `{ ...ChannelType: ...Text,
> ...TargetHandleType: Contact,
> ...SMS.Flash: True,
> }`

It should also set its BypassApproval property to `True`, so that it is invoked immediately for new channels.

#### Contact Capabilities

Contacts to whom SMSes can be sent SHOULD indicate this via a requestable channel class with SMSChannel = True as a fixed property.

For instance, a contact that can accept both text and SMS channels:

> `[
> ({ ...ChannelType: ...Text,
> ...TargetHandleType: Contact,
> },
> [ ...TargetHandle, ...TargetID ]),
> ({ ...ChannelType: ...Text,
> ...TargetHandleType: Contact,
> ...SMSChannel: True,
> },
> [ ...TargetHandle, ...TargetID ]),
> ]`

# Methods

(Permalink)

## GetSMSLength (aa{sv}: Message) → u: Chunks_Required, i: Remaining_Characters, i: Estimated_Cost

Added in 0.23.1.

### Parameters

- Message — aa{sv} (Message_Part_List)
The message the user wishes to send.

### Returns

- Chunks_Required — u

The number of 140 octet chunks required to send this message.

For example, in the GSM standard 7-bit encoding, a 162 character message would require 2 chunks.

- Remaining_Characters — i

The number of further characters that can be fit in the final chunk. A negative value indicates that the message will be truncated by `abs(Remaining_Characters)`. The value `MIN_INT32` (`-231`) indicates the message will be truncated by an unknown amount.

For example, in the GSM standard 7-bit encoding, a 162 character message would return 144 remaining characters (because of the space required for the multipart SMS header).

- Estimated_Cost — i

The estimated cost of sending this message. The currency and scale of this value are the same as the Balance.AccountBalance property.

A value of `-1` indicates the cost could not be estimated.

Returns the number of 140 octet chunks required to send a message via SMS, as well as the number of remaining characters available in the final chunk and, if possible, an estimate of the cost.

##### Rationale:

There are a number of different SMS encoding mechanisms, and the client doesn't know which mechanisms an individual CM might support. This method allows the client, without any knowledge of the encoding mechanism, to provide length details to the user.

Clients SHOULD limit the frequency with which this method is called and SHOULD NOT call it for every keystroke. Clients MAY estimate the remaining size between single keystrokes.

### Possible Errors

- Not Implemented
Raised when the method is not available on this channel. Clients MAY choose to make their own estimation.
- Invalid Argument
Raised when the content cannot be encoded into a valid SMS.

# Signals

(Permalink)

## SMSChannelChanged (b: SMSChannel)

Added in 0.21.7.

### Parameters

- SMSChannel — b
The new value for SMSChannel.

This signal indicates a change in the SMSChannel property.

# Properties

Accessed using the org.freedesktop.DBus.Properties interface.
(Permalink)

## Flash — b

Read only
This property is immutable which means that it can never change once the channel has been created. Immutable properties SHOULD appear in the channel detail list of NewChannels signals.

If `True`, then this channel is exclusively for receiving class 0 SMSes (and no SMSes can be sent using SendMessage on this channel). If `False`, no incoming class 0 SMSes will appear on this channel.

This property is immutable (cannot change), and therefore SHOULD appear wherever immutable properties are reported, e.g. NewChannels signals.

##### Rationale:

Class 0 SMSes should be displayed immediately to the user, and need not be saved to the device memory unless the user explicitly chooses to do so. This is unlike “normal”, class 1 SMSes, which must be stored, but need not be shown immediately in their entirity to the user.

Separating class 0 SMSes into their own channel with this immutable property allows them to be dispatched to a different Handler—which would include this property in its HandlerChannelFilter—avoiding the normal Text channel handler having to decide for each message whether it should be displayed to the user immediately or handled normally.

Currently, no mechanism is defined for sending class 0 SMSes. It seems reasonable to support specifying the class of an outgoing SMS in its header Message_Part, rather than requiring the UI to request a special channel for such SMSes; hence, we define here that channels with Flash set to `True` are read-only.

(Permalink)

## SMSChannel — b

Read only
Depending on the protocol, this property may be immutable which means that it can never change once the channel has been created. Immutable properties SHOULD appear in the channel detail list of NewChannels signals.
This property is requestable, which means that it is allowed in the properties hash of a channel request such as in the CreateChannel and EnsureChannel methods on Requests and ChannelDispatcher. The property should also appear in either the Fixed_Properties or Allowed_Properties of a RequestableChannelClass advertised by the CM.
Added in 0.21.7.

If TRUE, messages sent and received on this channel are transmitted via SMS.

If this property is included in the channel request, the Connection Manager MUST return an appropriate channel (i.e. if TRUE the channel must be for SMSes, if FALSE it must not), or else fail to provide the requested channel with the NotCapable error.

For example, to explicitly request an SMS channel to a contact. You might construct a channel request like:

>     {
>       Channel.Type: Channel.Type.Text,
>       Channel.TargetHandleType: Handle_Type_Contact,
>       Channel.TargetID: escher.cat,
>       Channel.Interface.SMS.SMSChannel: True,
>     }

##### Rationale:

Some protocols allow us to send SMSes to a remote contact, without knowing the phone number to which those SMSes will be sent. This provides a mechanism to request such channels.

If this property is not included in the channel request, the Connection Manager MAY return an SMS channel if that is the most appropriate medium (i.e. if the channel target is a phone number).

##### Rationale:

To some types of identifiers (i.e. phone numbers) it only makes sense to return an SMS channel, this is what happens currently with telepathy-ring. We don't want to break this behaviour when we are not explicit about the type of channel we want. Alternatively, for protocols where there is an SMS fallback for IM messages, it's possible that we don't care what sort of channel we get, and simply want notification of the transport.

Some protocols have a fallback to deliver IM messages via SMS. On these protocols, the Connection Manager SHOULD set the property value as appropriate, and notify its change with SMSChannelChanged.

##### Rationale:

Protocols such as MSN can fall back to delivering IM messages via SMS. Where possible we want clients to be able to inform the user that their messages are going to be redirected to the remote contact's phone.