1.) Modifying an alias - Client2Server
<?xml version="1.0"?>
<modify_alias TYPE=""> Either creating a new one or modifying an old one
<alias_name></alias_name>
<user_info> can be 1 or more users/groups in an alias
<user_ID></user_ID> this is synonymous with groupID
<user_name></user_name>
</user_info>
</modify_alias>
DTD
===
<!ELEMENT update_alias(alias_name, user_info+)>
<!ATTLIST modify_alias TYPE (create|update) #REQUIRED>
<!ELEMENT alias_name (#PCDATA)>
<!ELEMENT user_info (user_ID, user_name) >
<!ELEMENT user_ID (#PCDATA)>
<!ELEMENT user_name(#PCDATA) >
TYPE=You can either modify an existing alias or create a new one.
This packet is sent whenever a user adds someone to an alias. This is also sent
when someone is added to a user's contact list. There is an invisible System alias
called UNFILED that all entities in the contact list without an alias belong too!
2.) Renaming an alias - Client2Server
<?xml version="1.0"?>
<rename_alias>
<old_name></old_name>
<new_name></new_name>
</rename_alias>
DTD
===
<!ELEMENT rename_alias (old_name, new_name)>
<!ELEMENT old_name (#PCDATA)>
<!ELEMENT new_name (#PCDATA)>
Title is self explanatory
3.) Deleting an alias - Client2Server
<?xml version="1.0"?>
<delete_alias>
<alias2delete></alias2delete>
</delete_alias>
DTD
===
<!ELEMENT delete_alias (alias2delete)>
<!ELEMENT alias2delete (#PCDATA)>
Title is self explanatory
4.) Client Initialization - Server2Client
<?xml version="1.0"?>
<client_initialization>
<contact_list>
<alias NAME=""> one or more
<user_info> ditto
<user_name></user_name>
<user_ID></user_ID>
<online_status></online_status> groups are always online
<user_defined_status></user_defined_status> optional, can be away, DND, occupied, etc
<status_message></status_message> optional message for away, DND, occupied, etc
</user_info>
</alias>
</contact_list> more data may be added to this packet later
</client_initialization>
DTD
====
<!ELEMENT client_initialization (contact_list) >
<!ELEMENT contact_list (alias)>
<!ELEMENT alias (user_info)>
<!ATTLIST alias NAME CDATA #CDATA>
<!ELEMENT user_info (user_name, user_ID, online_status, user_defined_status?, status_message?)>
<!ELEMENT user_name (#PCDATA)>
<!ELEMENT user_ID (#PCDATA)>
<!ELEMENT online_status (#PCDATA)>
<!ELEMENT user_defined_status (#PCDATA)>
<!ELEMENT status_message (#PCDATA)>
This packet is sent after the user logs in
5.) User Search - Client2Server
<?xml version="1.0"?>
<user_search MODE="">
<user_ID></user_ID> you can either request a <user_ID>'s info
or search by first name and/or last name
<firstname></firstname>
<lastname></lastname>
</user_search>
DTD
===
<!ELEMENT user_search ((firstname?, lastname?)|user_ID) >
<!ATTLIST user_search MODE CDATA (getinfo|search) "search" >
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT user_ID (#PCDATA)>
MODE=getinfo means grab the user's entire info. This should be accessed via an option similar
to the User's Details option in ICQ.This option sends the userID
MODE=search is a profile search feature. User's can search for others by first name and/or
last name. This option sends the first name and/or the last name.
6.) User Search Response - Server2Client
<?xml version="1.0"?>
<user_info_list>
<user_info> one or more
<user_ID></user_ID> the first three will always appear
<user_name></user_name>
<firstname></firstname>
<lastname></lastname>
<job_title></job_title> the rest are optional and may be blank
<contact_info>
<email_addr></email_addr>
<phone_numbers>
<home_phone></home_phone>
<cell_phone></cell_phone>
<work_phone></work_phone>
</phone_numbers>
</contact_info>
</user_info>
</user_info_list>
DTD
===
<!ELEMENT user_info_list (user_info+)>
<!ELEMENT user_info (user_ID, user_name, firstname, lastname, job_title?, contact_info?)>
<!ELEMENT user_ID (#PCDATA)>
<!ELEMENT user_name (#PCDATA)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT job_title (#PCDATA)>
<!ELEMENT contact_info (email_addr, phone_numbers)>
<!ELEMENT email_addr (#PCDATA)>
<!ELEMENT phone_numbers (home_phone, work_phone, cell_phone)>
<!ELEMENT home_phone (#PCDATA)>
<!ELEMENT work_phone (#PCDATA)>
<!ELEMENT cell_phone (#PCDATA)>
There will only be one user sent as the response the response to a "getinfo" user_search
while many users can be sent as the response to a "search" user_search
7.) Group Search - Client2Server
<?xml version="1.0"?>
<send_group_info>
<group_ID></group_ID> if this is empty then the entire group list is sent
</send_group_info>
DTD
===
<!ELEMENT send_group_info (group_ID?)>
<!ELEMENT group_ID(#PCDATA) >
This is a request for a listing of all the group pages
8.)Group Search Response - Server2Client
<?xml version="1.0"?>
<group_listing>
<group> zero or more
<group_ID></group_ID>
<group_name></group_name>
<group_description></group_description>
<owner>
<user_ID></user_ID>
<user_name></user_name>
</owner> the creator(s) of the group and can add new members
</group>
</group_listing>
DTD
===
<!ELEMENT group_listing (group*)>
<!ELEMENT group (group_ID, group_name, group_description, owner+)>
<!ELEMENT group_ID (#PCDATA)>
<!ELEMENT group_name (#PCDATA)>
<!ELEMENT group_description(#PCDATA)>
<!ELEMENT owner (user_ID, user_name)>
<!ELEMENT user_ID (#PCDATA)>
<!ELEMENT user_name (#PCDATA)>
NOTE: Users can add group pages to their contact list from these results, if they are already
members of the group. If they are not members of the group, the server will send an a packet
containing the error message. See (14.) below
9.) Requesting User History - Client2Server
<?xml version="1.0"?>
<send_msg_history>
<user_ID></user_ID> one or more
</send_msg_history> can't be requested for groups
DTD
===
<!ELEMENT send_msg_history (user_ID+)>
<!ELEMENT user_ID (#PCDATA) >
User's can click on an alias an request a Message History. The CSIM will grab the userIDs
in that Alias and send that to the server. Also users can request message history for multiple
users. (i.e. I can obtain the message history of messages between myself, Dmitri and Drew)
10.) Sending Message History - Server2Client
<?xml version="1.0"?>
<msg_history>
<conversation> zero or more
<subject></subject>
<start_time></start_time>
<message_info> one or more
<user_name></user_name>
<time_sent></time_sent>
<message_text>< ![CDATA[ ]]> </message_text> Stuff inside font color="red"CDATA/font is treated as a string literal
</message_info>
</conversation>
</msg_history>
DTD
===
<!ELEMENT msg_history (conversation)>
<!ELEMENT conversation (subject?, start_time, message_info+)>
<!ELEMENT subject (#PCDATA)>
<!ELEMENT start_time (#PCDATA)>
<!ELEMENT message_info (user_name, time_sent, message_text)>
<!ELEMENT user_name (#PCDATA)>
<!ELEMENT time_sent (#PCDATA)>
<!ELEMENT message_text (#CDATA)>
The messages will be grouped according to conversations. A CSIM conversation ends an hour
after the last message was sent.
11.) Change User Status (Away) - Server2Client AND Client2Server
<?xml version="1.0"?>
<update_status>
<user_ID></user_ID> This is the user whose status has changed
<online_status></online_status>
<user_defined_status></user_defined_status> This is the status message E.g. Away, N/A
<status_message></status_message> This is the message users see when they
</update_status> try to send a message to the away person E.g.I have gone to bed
DTD
===
<!ELEMENT update_status (user_ID, online_status, user_defined_status, status_message)>
<!ELEMENT user_ID (#PCDATA)>
<!ELEMENT online_status (#PCDATA)>
<!ELEMENT user_defined_status (#PCDATA)>
<!ELEMENT status_message (#PCDATA)>
This works the same way ICQ's does. By default the user_defined_status is AWAY and there's a
short blurb stating that the user is away. User's can change the name of the status as well
as the status message (away message). This message also pops up when they select disconnect
just in case the user wants a special message for when they are offline
12.) Message Body - Client2Server AND Server2Client
<message>
<to> one or more of these
<user_ID></user_ID> these can be users or groups
<user_name></user_name>
</to>
<from> only one of these
<user_ID></user_ID>
<user_name></user_name>
</from>
<subject></subject> optional
<time_sent></time_sent>
<msg_text>< ![CDATA[ ]]> </msg_text>
</message>
DTD
===
<!ELEMENT message (to+,from, subject?, time_sent, msg)>
<!ELEMENT to (user_ID, user_name)>
<!ELEMENT user_ID (#PCDATA)>
<!ELEMENT user_name (#PCDATA)>
<!ELEMENT from (user_ID, user_name)>
<!ELEMENT user_ID (#PCDATA)>
<!ELEMENT user_name (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ELEMENT time_sent (#PCDATA)>
<!ELEMENT msg_text (#PCDATA)>
If the CSIM wants to reply to a message, it should grab all the userIDs in the to and from
fields (minus the user) and use those to send the message
13.) Error Message - Server2Client
<?xml version="1.0"?>
<error_message>
<title></title>
<body></body>
</error_message>
DTD
===
<!ELEMENT error_message (title,body) >
<!ELEMENT title (#PCDATA) >
<!ELEMENT body (#PCDATA) >
This can be sent for a variety of reasons (Attempting to add a group to your contact list when
you're not a member of the group, searching for a non-existent firstname-lastname combo, etc