4.2 Sample MMS Object

A user creates an MMS message, gives it a subject, types some text, attaches a picture, and sends it. The following is a description of what a client might do to accomplish the user's intentions and the responses a server might return. For more details about ROPs, see [MS-OXCPRPT] and [MS-OXCMSG].

Before manipulating an MMS object, the client asks the server to map the named properties to property IDs by sending a RopGetPropertyIDsFromNames ROP request ([MS-OXCROPS] section 2.2.8.1).

Property

Property set GUID

NameID

PidNameOMSMobileModel (section 2.2.1.6)

{00020329-0000-0000-C00000000046}

OMSMobileModel

PidNameOMSAccountGuid (section 2.2.1.1)

{00020329-0000-0000-C00000000046}

OMSAccountGuid

PidNameOMSServiceType (section 2.2.1.3)

{00020329-0000-0000-C00000000046}

OMSServiceType

PidNameOMSSourceType (section 2.2.1.4)

{00020329-0000-0000-C00000000046}

OMSSourceType

The server might send a RopGetPropertyIDsFromNames ROP response with the following property IDs, which are used in the example that follows. (The actual property IDs are at the discretion of the server.)

Property

Property ID

PidNameOMSMobileModel

0x84CE

PidNameOMSAccountGuid

0x84CF

PidNameOMSServiceType

0x84D0

PidNameOMSSourceType

0x84D1

To create an MMS object, the client uses the RopCreateMessage ROP ([MS-OXCROPS] section 2.2.6.2). The server returns a success code and a handle to an object.

After the user inputs the content for the MMS object, the client transmits the data to the server by using the RopSetProperties ROP ([MS-OXCROPS] section 2.2.8.6).

Property

Property ID

Data type

Value

PidNameOMSAccountGuid

0x84CF

PtypString ([MS-OXCDATA] section 2.11.1)

{01234567-0123-0123-0123-0123456789AB}

PidNameOMSMobileModel

0x84CE

PtypString

(empty)

PidNameOMSServiceType

0x84D0

PtypInteger32 ([MS-OXCDATA] section 2.11.1)

0x00000004

PidNameOMSSourceType

0x84D1

PtypInteger32

0x00000000

PidTagInternetCodepage ([MS-OXCMSG] section 2.2.1.58.6)

0x3FDE

PtypInteger32

0x0000FDE9

PidTagHtml ([MS-OXCMSG] section 2.2.1.58.9)

0x1013

PtypBinary ([MS-OXCDATA] section 2.11.1)

(The content of this property is given following the table.)

PidTagIconIndex (section 2.2.2.1)

0x1080

PtypInteger32

0xFFFFFFFFFF

PidTagMessageClass ([MS-OXCMSG] section 2.2.1.3)

0x001A

PtypString

IPM.Note.Mobile.MMS

PidTagMessageFlags ([MS-OXCMSG] section 2.2.1.6)

0x0E07

PtypInteger32

Flags: 0x00000018 MSGFLAG_UNSENT MSGFLAG_HASATTACH

PidTagNormalizedSubject ([MS-OXCMSG] section 2.2.1.10)

0x0E1d

PtypString

Here's the photo.

PidTagSubjectPrefix ([MS-OXCMSG] section 2.2.1.9)

0x003d

PtypString

(empty)

The PidTagHtml property is a binary property containing the following text.

 <HTML>
 <BODY>
 <IMG SRC="cid:Att1.jpg@AB1B43B2B0594564.B94EF7ABB12B49BA" border="0">
 <BR>
 This is the photo you asked for.
 <BR>
 <A HREF="cid:Att0.txt@AB1B43B2B0594564.B94EF7ABB12B49BA"></A>
 </BODY>
 </HTML>

The client allocates space for a data file in the message by using the RopCreateAttachment ROP ([MS-OXCROPS] section 2.2.6.13). In response, the server returns a success code and a handle to an Attachment object. The client uses this handle with the RopSetProperties ROP ([MS-OXCROPS] section 2.2.8.6) to transmit data about the attachment to the server.

Property

Property ID

Data type

Value

PidTagAttachmentHidden ([MS-OXCMSG] section 2.2.2.24)

0x7FFE

PtypBoolean ([MS-OXCDATA] section 2.11.1)

0x01

PidTagAttachMethod ([MS-OXCMSG] section 2.2.2.9)

0x3705

PtypInteger32

0x00000001 (ATTACH_BY_VALUE)

PidTagAttachContentId ([MS-OXCMSG] section 2.2.2.29)

0x3712

PtypString

MMS.smil@AB1B43B2B0594564.B94EF7ABB12B49BA

PidTagAttachMimeTag ([MS-OXCMSG] section 2.2.2.29)

0x370E

PtypString

application/smil

PidTagAttachLongFilename ([MS-OXCMSG] section 2.2.2.10)

0x3707

PtypString

MMS.smil

The client sets the contents of the attachment by using the attachment handle with the RopOpenStream ROP ([MS-OXCROPS] section 2.2.9.1), passing in the PidTagAttachDataBinary property ([MS-OXPROPS] section 2.589) as the property to open. With the handle returned from the RopOpenStream ROP, the client calls the RopWriteStream ROP ([MS-OXCROPS] section 2.2.9.3), writing out the contents of the Synchronized Multimedia Integration Language (SMIL) file, the format of which is described in [SMIL2.1], describing the layout of the MMS message. The client follows this with the RopRelease ROP ([MS-OXCROPS] section 2.2.15.3) on the stream handle, then commits the changes by using the RopSaveChangesAttachment ROP ([MS-OXCROPS] section 2.2.6.15), releases the handle to the attachment by using the RopRelease ROP.

The client repeats the process from the RopCreateAttachment ROP ([MS-OXCROPS] section 2.2.6.13) for the RopRelease ROP with the attachment handle twice more, once for a plain-text version of the body, and once for the image. The attachment containing the body uses the following properties and values with the RopSetProperties ROP.

Property

Property ID

Data type

Value

PidTagAttachmentHidden

0x7FFE

PtypBoolean

0x01

PidTagAttachMethod

0x3705

PtypInteger32

0x00000001 (ATTACH_BY_VALUE)

PidTagAttachContentId

0x3712

PtypString

Att0.txt@AB1B43B2B0594564.B94EF7ABB12B49BA

PidTagAttachMimeTag

0x370E

PtypString

text/plain

PidTagAttachLongFilename

0x3707

PtypString

1.txt

The RopOpenStream ROP for the plain-text body is also on the PidTagAttachDataBinary property, but the contents written are Unicode text. The last attachment the client creates contains the image, and the RopSetProperties ROP sends the following data.

Property

Property ID

Data type

Value

PidTagAttachmentHidden

0x7FFE

PtypBoolean

0x01

PidTagAttachMethod

0x3705

PtypInteger32

0x00000001 (ATTACH_BY_VALUE)

PidTagAttachContentId

0x3712

PtypString

Att1.jpg@AB1B43B2B0594564.B94EF7ABB12B49BA

PidTagAttachMimeTag

0x370E

PtypString

image/jpeg

PidTagAttachLongFilename

0x3707

PtypString

photo.jpg

The contents of the PidTagAttachDataBinary property on the image attachment are the binary contents of the image file.

When the user sends the message, the client commits the properties on the server by using the RopSaveChangesMessage ROP ([MS-OXCROPS] section 2.2.6.3) and then releases the MMS object by using the RopRelease ROP. The client then submits the message to an MMS provider by using the RopSubmitMessage ROP ([MS-OXCROPS] section 2.2.7.1).

The values of some properties change during the processing of the RopSaveChangesMessage ROP, but the properties specified in this protocol do not change.