imfreedom/knowledgebase

658a6c987ae3
Parents 2f11a24a8c91
Children 55bb33cac801
Make sure the MSN is all caps in the navigation

Testing Done:
Ran locally with `mkdocs serve`

Reviewed at https://reviews.imfreedom.org/r/1452/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/protocols/MSN/audiovideo.md Tue May 17 01:08:45 2022 -0500
@@ -0,0 +1,92 @@
+# Audio/video
+
+The MSN protocol supports Audio/Video chatting.
+
+Unfortunately, there are at least five different protocols that allows you to
+do this, each implementing a different type of A/V chat.
+
+## The Audio/Video conversation
+
+The 'old style' audio/video conversation is a feature that allows bidirectional
+Audio and optionally Video streaming.
+
+It is an old protocol that is not used anymore in WLM but is still there for
+keeping that feature interoperable with the windows messenger product still
+running on MSNP9.
+
+This protocol is compatible with netmeeting and gnomemeeting.
+
+## The Video Call
+
+The 'Video Call' feature is a bidirectional Audio and Video conversation which
+relies on the MSNP2P protocol for the signaling.
+
+The video frames use the WMV3 video codec and the audio frames use the Siren
+codec.
+
+The video and audio frames are interlaced
+
+Uses MSNP2P Protocol for signaling.
+
+Codecs:
+
+* Video: WMV3
+* Audio: Siren
+
+## The Webcam
+
+The 'Webcam' feature is a unidirectional Video only conversation which relies
+on MSNP2P for the signaling.
+
+The Video frames are encoded with the ML20 codec.
+
+The only difference between this feature and the 'Video Call' feature in terms of protocol is the 'Context' field of the MSNP2P invite and the actual data being sent and received.
+
+Unidirectional video only
+
+Signaling:
+
+* MSNP2P
+
+Codec:
+
+* ML20
+
+## The Computer Call
+
+The 'Computer Call' feature is a bidirectional Audio only feature which uses
+SIP and RTP for the signaling.
+
+It supports multiple codecs which are to be negociated during the SIP invite
+using the SDP payload.
+
+The codecs officially supported by WLM are :
+
+1. x-msrta/16000
+1. Siren/16000
+1. G722.1/16000
+1. x-msrta/8000
+1. AAL2-G726-32/8000
+1. G723/8000
+1. PCMA/8000
+1. PCMU/8000
+
+## The Voice clips
+
+The 'Voice clips' feature is a unidirectional audio clip.
+
+It relies on the MSNP2P protocol for transferring the audio clip and use the
+Siren codec.
+
+The 'Voice clips' are WAV/RIFF files encoding with the Siren codec and have a
+maximum of 15 seconds in length.
+
+Unidirectional audio in form of clips.
+
+Maximum length: 15seconds
+
+Signaling:
+* MSNP2P
+
+Codec:
+* Siren
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/protocols/MSN/index.md Tue May 17 01:08:45 2022 -0500
@@ -0,0 +1,34 @@
+This page is a draft, an attempt to document the MSN protocol used by the MSN
+Messenger and Windows Live Messenger products from Microsoft.
+
+## Introduction
+
+The protocol behind the MSN products is called MSNP and is implemented in
+multiple versions. The latest version is MSNP18 used in Windows Live Messenger
+2009 Beta (14.0.5027).
+
+In this document, we will try to document this protocol as much as possible,
+using multiple sources and reverse engineering made so far on this protocol.
+
+## MSNP Versions
+
+Since October 13th 2003, The Microsoft servers will only accept versions of the
+protocol equal to or newer than MSNP8.
+
+For a history on the MSNP protocol version, read this page :
+http://en.wikipedia.org/wiki/MSNP
+
+The latest protocol version of MSNP uses multiple subprotocols for doing
+different tasks. Mainly, it heavily depends on SOAP for most of its
+transactions. It also depends on SIP and other proprietary protocols, like
+MSNP2P.
+
+## Useful Links
+* [Protocol versions information](http://en.wikipedia.org/wiki/MSNP)
+* [Original reverse engineering documentation. outdated.](http://www.hypothetic.org/docs/msn/)
+* [Incomplete documentation for multiple protocol versions](http://msnpiki.msnfanatic.com/)
+* [Raw paste of contact list SOAP actions](http://telepathy.freedesktop.org/wiki/Pymsn/MSNP/ContactListActions)
+* [Audio/Video conferencing protocol specifications](http://ml20rc.msnfanatic.com/vc_1_1/index.html)
+* [ISF file format specifications (obsolete)](http://synce.org/moin/FormatDocumentation/InkSerializedFormat)
+* [Official ISF file format specifications](http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/InkSerializedFormat(ISF)Specification.pdf)
+* [Current status of MSN service](http://messengergeek.wordpress.com/messenger-status/)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/protocols/MSN/login.md Tue May 17 01:08:45 2022 -0500
@@ -0,0 +1,1 @@
+# Login
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/protocols/MSN/multiplepointsofpresence.md Tue May 17 01:08:45 2022 -0500
@@ -0,0 +1,23 @@
+# Multiple Points of Presence
+
+Since MSNP16 the client is able to login from multiple points.
+
+To get this working it's just needed to add a new field MachineGuid to the
+MSPAuth. This field is stored in the registry at
+
+```
+HKEY_USERS\S-1-5-21-1960408961-688789844-682003330-1003\Software\Microsoft\MSNMessenger\MachineGuid
+```
+
+```
+"MSNP16 resp" = "MSNP16 resp" + {MachneGuid}
+```
+
+Non windows systems can generate a random MachineGuid at runtime and keep it
+during the whole session.
+
+## References
+
+http://forums.fanatic.net.nz/index.php?showtopic=18166
+
+login trace: http://forums.fanatic.net.nz/index.php?showtopic=18701&mode=threaded
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/protocols/MSN/notifications.md Tue May 17 01:08:45 2022 -0500
@@ -0,0 +1,29 @@
+# Notifications
+
+In the MSN protocol, notifications are the primary means of receiving MSN
+Mobile messages. They are received with the IPG command and are in the XML
+format as follows.
+
+```
+<NOTIFICATION id="Number (Message Counter?)" siteid="111100400" siteurl="http://mobile.msn.com/">
+ <TO name="Email Address">
+ <VIA agent="mobile"/>
+ </TO>
+ <FROM name="tel:+Mobile Phone Number|Email Address"/>
+ <MSG pri="1" id="1|407">
+ <CAT Id="110110001"/>
+ <ACTION url="2wayIM.asp"/>
+ <SUBSCR url="2wayIM.asp"/>
+ <BODY lcid="1033">
+ <TEXT>Message Text</TEXT>
+ </BODY>
+ </MSG>
+</NOTIFICATION>
+```
+
+* The name attribute of the FROM tag may contain either a mobile phone number
+ with the prefix "tel:+" or an email address, depending on whether the sender
+ has their mobile phone set up with MSN Mobile or not.
+* The id attribute of the MSG tag is a 1 if it is a normal message, but a 407
+ indicates that the message you just sent was too long for the mobile device
+ and the TEXT tag is then empty.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/protocols/MSN/notificationserver.md Tue May 17 01:08:45 2022 -0500
@@ -0,0 +1,171 @@
+# Notification server
+
+## Challenges
+
+The MSN servers will periodically send a message to the client to verify that
+it is an official client. This message is received as a "CHL" command and must
+be replied to with a "QRY" command. The method for calculating the response
+outlined below has been in effect since MSNP11.
+
+Challenges are also used to verify the validity of a client when sending OIM's.
+
+## Protocol Sequence
+
+```
+Server:
+<<< CHL 0 ChallengeString\r\n
+Client:
+>>> QRY TrID ProductID PayloadLength\r\n
+ MD5Digest
+Server:
+<<< QRY TrID\r\n
+```
+
+* TrID: The TransactionID of the command.
+* ChallengeString: A string required for the response
+* ProductID: Client identification string
+* PayloadLength: Size of the payload, always 32 because MD5 hashes are constant in length
+* MD5Digest: MD5 digest as calculated below
+
+## Calculating Response
+
+In order to calculate a response, you must be able to manipulate 64-bit
+integers, using them for bitwise operations as well as basic math.
+Additionally, you will need an implementation of the MD5 hashing algorithm.
+Note: while MD5 hashes are generally written out as 32-character hexadecimal
+strings, this is purely for presentation's sake. This document will assume the
+MD5 hash has been left in its binary form, that is, 128 bits or 16 bytes of
+data.
+
+## MD5 Hash
+
+The first step in the process of creating the challenge response is creating an
+MD5 digest from the ChallengeString (from the server's CHL command) followed by
+a special key, called the "Product Key". This Product Key is specific to every
+version of the MSN client.
+
+The MD5 hash can then be split into 4 32-bit unsigned integers in little-endian
+format. You should then bitwise AND each of these integers with 0x7FFFFFFF and
+save the result.
+
+## The Product ID
+
+The Product ID is another string specific to every version of the MSN client.
+This string is sent in the QRY command, and is used to calculate the 64-bit
+key.
+
+First, take the challenge data and append the Product ID to it. This string is
+then padded with '0' (not 'NULL'!) until its length is a multiple of 8. The
+string should be split into an array of 32-bit unsigned little-endian integers.
+
+## The 64-bit Key
+
+In the third step in the process we are going to create a key based on the data
+from the previous steps. You will need two variables, called High and Low, both
+initialized to 0. Note: High and Low must be 64-bit variables because they may
+hold very large values. We will loop through the previous data array two
+elements at a time, calling the current element N and the element after it
+N + 1.
+
+The first step in the loop should be to create a temporary variable and fill it
+with the value of piece N, multiply it by 0x0E79A9C1, modulo 0x7FFFFFFF and add
+the variable Low to it (which will be 0 the first run). After this, multiply
+the temporary variable by the first element of the MD5 hash and add the second
+element of the MD5 hash, again modulo 0x7FFFFFFF.
+
+Next, calculate the high part of the key. This can be done by filling the
+variable Low with the value of piece N + 1. Add the temporary variable to it,
+modulo 0x7FFFFFFF. Multiply it by the value of the third element of the MD5
+hash and add the fourth element of the MD5 hash to it, again modulo 0x7FFFFFFF.
+
+At the end of the loop, add the values from the variable Low and the temporary
+variable to High.
+
+After the loop, add the second element of the MD5 hash to Low and the fourth
+element to High, both modulo 0x7FFFFFFF.
+
+To create the key, take the variables High and Low, and treat them as one large
+64-bit integer.
+
+## The Final Result
+
+The final step in the process is to create the new challenge hash.
+
+First, the MD5 hash must be split in two parts (both 8 bytes long). You can
+treat each of these parts as a 64-bit little-endian integer, which should then
+be XOR'd with the key.
+
+This result should be converted to its hexadecimal string representation (Each
+byte becomes two characters representing its hexadecimal value). If the string
+is less than 32 characters in length you need to prefix it with '0' (again, not
+NULL). This final result is the MD5Digest that is sent as the payload of the
+QRY command.
+
+## Example
+
+```
+Server:
+<<< CHL 0 22210219642164014968\r\n
+```
+
+Using the MSNP15 Product Key, the MD5 Hash is:
+
+```
+67780f8e134b77b535a64c7c0f7f1eb0
+```
+
+Treating this as four integers gives:
+
+```
+0x0e0f7867 (235894887)
+0x35774b13 (897010451)
+0x7c4ca635 (2085398069)
+0x301e7f0f (807304975)
+```
+
+Using the Product ID gives:
+
+```
+0x31323232 (825373234)
+0x39313230 (959525424)
+0x31323436 (825373750)
+0x31303436 (825242678)
+0x38363934 (943077684)
+0x444f5250 (1146049104)
+0x39313130 (959525168)
+0x554a5347 (1430934343)
+0x38312443 (942744643)
+0x30303030 (808464432)
+```
+
+The 64-bit key is:
+
+```
+High: 0x08188389 (135824265)
+Low: 0x0ea078c3 (245397699)
+Key: 0x081883890ea078c3 (583360776423635395)
+```
+
+The final result is:
+
+```
+a400af809ac86fbdf6deec7286fc06b8
+```
+
+```
+Client:
+>>> QRY 5 PROD0119GSJUC$18 32\r\n
+ a400af809ac86fbdf6deec7286fc06b8
+Server:
+>>> QRY 5\r\n
+```
+
+## Product Key and ID
+
+MSNP15 is currently used by Windows Live Messenger version 8.5.1288.816. The
+Product Key and ID for that particular version are:
+
+```
+Product Key: ILTXC!4IXB5FB*PX
+Product ID: PROD0119GSJUC$18
+```
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/protocols/MSN/p2p.md Tue May 17 01:08:45 2022 -0500
@@ -0,0 +1,98 @@
+# P2P Protocol
+
+## SLP
+
+### P2Pv1 Headers
+
+#### Flags
+
+The flags define the type of P2P message that is being sent.
+
+* 0x0 Normal Message
+* 0x1 Nak
+* 0x2 Ack
+* 0x4 Waiting for a pending invite
+* 0x8 Notify a binary error
+* 0x10 File
+* 0x20 Msn Object: Display Picture or Custom Emoticon Data
+* 0x40 Close session
+* 0x80 Error at transport layer protocol
+* 0x100 Direct Handshake
+* 0x1000000 Define data for File transfer
+
+#### Footer
+
+The footer is 4 bytes long (DWORD) in big endian. It represents the Application
+Identifier (AppID)
+
+* 0x0 Negotiating session
+* 0x1 MsnObject: Display Picture or Custom Emoticon
+* 0x2 File transfer
+* 0xB CustomEmoticon (0d11)
+* 0xC Display Image (0d12)
+
+#### Refs
+
+* [Msnp-sharp Code](http://code.google.com/p/msnp-sharp/source/browse/branches/MSNPSHARP_30_STABLE/MSNPSharp/DataTransfer/P2PMessage.cs)
+* [MsnPiki](http://msnpiki.msnfanatic.com/index.php/MSNC:P2Pv1_Headers)
+
+## Msnobj based transfers
+
+#### MSNObject Description
+
+The MSNObject is the way of MSNP to identify contents: Display Pictures, Custom Emoticons, Backgrounds, Voice Clips, etc.
+
+##### Format
+
+The MSNObject has always the following format
+
+```
+<msnobj Creator="buddy@hotmail.com" Size="24539" Type="3" Location="TFR2C.tmp" Friendly="AAA=" SHA1D="trC8SlFx2sWQxZMIBAWSEnXc8oQ=" SHA1C="U32o6bosZzluJq82eAtMpx5dIEI="/>
+```
+
+###### Creator
+
+This field specify the person who made the object, in other words, the sender.
+Typically is the address of the buddy.
+
+###### Size
+
+The total size of the data the object represents, in bytes.
+
+###### Type
+
+Indicates which kind of transaction this object describes.
+
+The known types are documented in the Reference page.
+
+###### Location
+
+Contains the filename under which the filename will be, or has been stored.
+
+###### Friendly
+
+Contains the name of the picture in Unicode (UTF-16 Little Endian) format. The
+string is encoded with Base64. For most types of descpritors this field is a
+null character or 'AAA=' when encoded.
+
+###### SHA1D
+
+The SHA1D field contains the SHA1 hash of the images data encoded in Base64.
+It's also known as the Data Hash or the SHA1 Data Field.
+
+###### SHA1C
+
+Contains all previous fields hashed with SHA1, and then encoded in Base64. This
+field is better known as the Checksum or SHA1 Checksum Field. The string format
+must be hashed to get the resulting SHA1C value looks similar to:
+
+```
+Creatorbuddy1@hotmail.comSize24539Type3LocationTFR2C.tmpFriendlyAAA=SHA1DtrC8SlFx2sWQxZMIBAWSEnXc8oQ=
+```
+
+It is suspected, but not verified, that the order in which the fields are
+hashed must be the same as the order of the fields in the XML format.
+
+##### Sources
+
+[Msnpiki:MSNObject](http://msnpiki.msnfanatic.com/index.php/MSNC:MSNObject)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/protocols/MSN/protocolbasics.md Tue May 17 01:08:45 2022 -0500
@@ -0,0 +1,31 @@
+# Protocol Basics
+
+## Features
+
+The MSN protocol has the following features:
+
+* Avatars
+* Conferencing
+* File transfer
+* Instant messaging
+* Remote assistance
+* Voice chat
+* Webcam support
+* Whiteboard
+
+## Network
+
+The MSN protocol connects to its servers over the following ports:
+
+* Chat port: 1863 (TCP)
+* HTTP chat port: 80 (TCP)
+* File transfer port: 6891-6900 (TCP)
+* Phone: 2001-2120, 6801, 6901 (UDP)
+* RTP: 5100
+* Voice chat: 6901 (UDP, TCP)
+* Whiteboard: 7800-7825 (TCP)
+
+Known servers are:
+
+* Pager server: messenger.hotmail.com
+* HTTP method server: gateway.messenger.hotmail.com
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/protocols/MSN/reference.md Tue May 17 01:08:45 2022 -0500
@@ -0,0 +1,28 @@
+# Reference
+
+## Client IDs
+
+## Msnobj types
+
+1. Avatar (Unknown, present since Messenger 6.0).
+1. Custom Emoticon.
+1. User Tile (Static display picture only).
+1. Shared File (Unkonw, present since Messenger 6.0).
+1. Backgrounds (Static backgrounds only).
+1. History (Unknown).
+1. Deluxe Display Pictures (Dynamic display pictures).
+1. Wink.
+1. Map File (A map file contains a list of items in the store).
+1. Dynamic Background (Animated).
+1. Voice Clip.
+1. Plug-in State (Saved state of Add-ins).
+1. Roaming Objects (eg.Roaming display picture).
+1. Signature Sounds (Introduced in Messenger 9.0)
+
+**Note!** The value 14 was used for Location information in some BETA clients,
+but was later removed because of privacy reasons. In the Messenger 9.0 client
+it was re-used for signature sounds.
+
+## EUF-GUIDs
+
+## Error Codes
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/protocols/MSN/soap.md Tue May 17 01:08:45 2022 -0500
@@ -0,0 +1,218 @@
+# SOAP
+
+## Contact List Management
+
+### Retrieving the Address Book
+The address book is retrieved by posting this SOAP request to
+http://contacts.msn.com/abservice/abservice.asmx or
+https://contacts.msn.com/abservice/abservice.asmx for an encrypted connection.
+
+```http
+POST /abservice/abservice.asmx HTTP/1.1
+SOAPAction: http://www.msn.com/webservices/AddressBook/ABFindAll
+Content-Type:text/xml; charset=utf-8
+User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
+Accept: */*
+Host: contacts.msn.com
+Content-Length: Variable Number
+Connection: Keep-Alive
+Cache-Control: no-cache
+
+<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'
+ xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
+ xmlns:xsd='http://www.w3.org/2001/XMLSchema'
+ xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'>
+ <soap:Header>
+ <ABApplicationHeader xmlns='http://www.msn.com/webservices/AddressBook'>
+ <ApplicationId>09607671-1C32-421F-A6A6-CBFAA51AB5F4</ApplicationId>
+ <IsMigration>false</IsMigration>
+ <PartnerScenario>Initial</PartnerScenario>
+ </ABApplicationHeader>
+ <ABAuthHeader xmlns='http://www.msn.com/webservices/AddressBook'>
+ <ManagedGroupRequest>false</ManagedGroupRequest>
+ <TicketToken>Variable</TicketToken>
+ </ABAuthHeader>
+ </soap:Header>
+ <soap:Body>
+ <ABFindAll xmlns='http://www.msn.com/webservices/AddressBook'>
+ <abId>00000000-0000-0000-0000-000000000000</abId>
+ <abView>Full</abView>
+ <deltasOnly>true</deltasOnly>
+ <lastChange>0001-01-01T00:00:00.0000000-08:00</lastChange>
+ </ABFindAll>
+ </soap:Body>
+</soap:Envelope>
+```
+
+* deltasOnly: whether you want to receive a full or partial address book update
+* lastChange: the time your address book was last synchronized
+
+*deltasOnly and lastChange are only necessary if you want to do a partial
+address book update.*
+
+The server will then reply with this response.
+
+```http
+HTTP/1.1 200 OK
+Date: Wed, 02 Apr 2008 03:17:04 GMT
+Server: Microsoft-IIS/6.0
+P3P:CP="BUS CUR CONo FIN IVDo ONL OUR PHY SAMo TELo"
+X-Powered-By: ASP.NET
+X-MSNSERVER: BAYABCHWBB128
+X-AspNet-Version: 2.0.50727
+Cache-Control: private, max-age=0
+Content-Type: text/xml; charset=utf-8
+Content-Length: Variable Number
+
+<?xml version="1.0" encoding="utf-8"?>
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <soap:Header>
+ <ServiceHeader xmlns="http://www.msn.com/webservices/AddressBook">
+ <Version>13.02.2514.0000</Version>
+ <CacheKey>Base64 Encoded Data?</CacheKey>
+ <CacheKeyChanged>true|false</CacheKeyChanged>
+ <PreferredHostName>by4.contacts.msn.com</PreferredHostName>
+ </ServiceHeader>
+ </soap:Header>
+ <soap:Body>
+ <ABFindAllResponse xmlns="http://www.msn.com/webservices/AddressBook">
+ <ABFindAllResult>
+ <groups>
+ <Group>
+ <groupId>GUID</groupId>
+ <groupInfo>
+ <annotations>
+ <Annotation>
+ <Name>MSN.IM.Display</Name>
+ <Value>1</Value>
+ </Annotation>
+ <Annotation>
+ <Name>MSN.IM.HasSharedFolder</Name>
+ <Value>1</Value>
+ </Annotation>
+ The rest of these annotations have only been seen so far on ContactType of "Me"
+ <Annotation>
+ <Name>MSN.IM.MBEA</Name>
+ <Value>0</Value>
+ </Annotation>
+ <Annotation>
+ <Name>MSN.IM.GTC</Name>
+ <Value>1</Value>
+ </Annotation>
+ <Annotation>
+ <Name>MSN.IM.BLP</Name>
+ <Value>1</Value>
+ </Annotation>
+ <Annotation>
+ <Name>MSN.IM.RoamLiveProperties</Name>
+ <Value>1|2</Value>
+ </Annotation>
+ </annotations>
+ <groupType>c8529ce2-6ead-434d-881f-341e17db3ff8</groupType>
+ <name>Group Name</name>
+ <IsNotMobileVisible>true|false</IsNotMobileVisible>
+ <IsPrivate>true|false</IsPrivate>
+ </groupInfo>
+ <propertiesChanged />
+ <fDeleted>true|false</fDeleted>
+ <lastChange>ISO 8601 timestamp</lastChange>
+ </Group>
+ ...
+ </groups>
+ <contacts>
+ <Contact>
+ <contactId>GUID</contactId>
+ <contactInfo>
+ <phones>
+ <ContactPhone>
+ <contactPhoneType>ContactPhoneMobile</contactPhoneType>
+ <number>Phone Number</number>
+ <isMessengerEnabled>true|false</isMessengerEnabled>
+ <propertiesChanged />
+ </ContactPhone>
+ </phones>
+ <groupIds>
+ <guid>GUID</guid>
+ </groupIds>
+ <emails>
+ <ContactEmail>
+ <contactEmailType>ContactEmailPersonal</contactEmailType>
+ <email>Email Address</email>
+ <isMessengerEnabled>true|false</isMessengerEnabled>
+ <Capability>0</Capability>
+ <MessengerEnabledExternally>true|false</MessengerEnabledExternally>
+ <propertiesChanged />
+ </ContactEmail>
+ </emails>
+ <contactType>Me|Regular|LivePending</contactType>
+ <quickName>Quick Name</quickName>
+ <firstName>First Name</firstName>
+ <lastName>Last Name</lastName>
+ <passportName>MSN Passport (Email Address)</passportName>
+ <IsPassportNameHidden>true|false</IsPassportNameHidden>
+ <displayName>Display Name</displayName>
+ <puid>0</puid>
+ <CID>Contact Id (Number, some prepended with a hyphen)</CID>
+ <IsNotMobileVisible>true|false</IsNotMobileVisible>
+ <isMobileIMEnabled>true|false</isMobileIMEnabled>
+ <isMessengerUser>true|false</isMessengerUser>
+ <isFavorite>true|false</isFavorite>
+ <isSmtp>true|false</isSmtp>
+ <hasSpace>true|false</hasSpace>
+ <spotWatchState>NoDevice</spotWatchState>
+ <birthdate>ISO 8601 timestamp</birthdate>
+ <primaryEmailType>ContactEmailPersonal</primaryEmailType>
+ <PrimaryLocation>ContactLocationPersonal</PrimaryLocation>
+ <PrimaryPhone>ContactPhonePersonal</PrimaryPhone>
+ <IsPrivate>true|false</IsPrivate>
+ <Gender>Unspecified</Gender>
+ <TimeZone>None</TimeZone>
+ </contactInfo>
+ <propertiesChanged />
+ <fDeleted>true|false</fDeleted>
+ <lastChange>ISO 8601 timestamp</lastChange>
+ </Contact>
+ ...
+ </contacts>
+ <CircleResult>
+ <CircleTicket>
+ &lt;?xml version="1.0" encoding="utf-16"?&gt;
+ &lt;SignedTicket xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" ver="1" keyVer="1"&gt;
+ <Data&gt;Base64 Encoded "Ticket"&lt;/Sig&gt;
+ &lt;/SignedTicket&gt;
+ </CircleTicket>
+ </CircleResult>
+ <ab>
+ <abId>00000000-0000-0000-0000-000000000000</abId>
+ <abInfo>
+ <ownerPuid>0</ownerPuid>
+ <OwnerCID>Number</OwnerCID>
+ <ownerEmail>Email Address</ownerEmail>
+ <fDefault>true|false</fDefault>
+ <joinedNamespace>true|false</joinedNamespace>
+ <IsBot>true|false</IsBot>
+ <IsParentManaged>true|false</IsParentManaged>
+ <SubscribeExternalPartner>true|false</SubscribeExternalPartner>
+ <NotifyExternalPartner>true|false</NotifyExternalPartner>
+ <AddressBookType>Individual</AddressBookType>
+ <MessengerApplicationServiceCreated>false</MessengerApplicationServiceCreated>
+ </abInfo>
+ <lastChange>ISO 8601 timestamp</lastChange>
+ <DynamicItemLastChanged>ISO 8601 timestamp</DynamicItemLastChanged>
+ <RecentActivityItemLastChanged>ISO 8601 timestamp</RecentActivityItemLastChanged>
+ <createDate>ISO 8601 timestamp</createDate>
+ <propertiesChanged />
+ </ab>
+ </ABFindAllResult>
+ </ABFindAllResponse>
+ </soap:Body>
+</soap:Envelope>
+```
+
+* CID: is zero for email only contacts
+* birthdate: is 0001-01-01T00:00:00 if not set
+
+*passportName and displayName aren't in email only contacts*
--- a/docs/protocols/msn/audiovideo.md Mon Apr 11 08:17:26 2022 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-# Audio/video
-
-The MSN protocol supports Audio/Video chatting.
-
-Unfortunately, there are at least five different protocols that allows you to
-do this, each implementing a different type of A/V chat.
-
-## The Audio/Video conversation
-
-The 'old style' audio/video conversation is a feature that allows bidirectional
-Audio and optionally Video streaming.
-
-It is an old protocol that is not used anymore in WLM but is still there for
-keeping that feature interoperable with the windows messenger product still
-running on MSNP9.
-
-This protocol is compatible with netmeeting and gnomemeeting.
-
-## The Video Call
-
-The 'Video Call' feature is a bidirectional Audio and Video conversation which
-relies on the MSNP2P protocol for the signaling.
-
-The video frames use the WMV3 video codec and the audio frames use the Siren
-codec.
-
-The video and audio frames are interlaced
-
-Uses MSNP2P Protocol for signaling.
-
-Codecs:
-
-* Video: WMV3
-* Audio: Siren
-
-## The Webcam
-
-The 'Webcam' feature is a unidirectional Video only conversation which relies
-on MSNP2P for the signaling.
-
-The Video frames are encoded with the ML20 codec.
-
-The only difference between this feature and the 'Video Call' feature in terms of protocol is the 'Context' field of the MSNP2P invite and the actual data being sent and received.
-
-Unidirectional video only
-
-Signaling:
-
-* MSNP2P
-
-Codec:
-
-* ML20
-
-## The Computer Call
-
-The 'Computer Call' feature is a bidirectional Audio only feature which uses
-SIP and RTP for the signaling.
-
-It supports multiple codecs which are to be negociated during the SIP invite
-using the SDP payload.
-
-The codecs officially supported by WLM are :
-
-1. x-msrta/16000
-1. Siren/16000
-1. G722.1/16000
-1. x-msrta/8000
-1. AAL2-G726-32/8000
-1. G723/8000
-1. PCMA/8000
-1. PCMU/8000
-
-## The Voice clips
-
-The 'Voice clips' feature is a unidirectional audio clip.
-
-It relies on the MSNP2P protocol for transferring the audio clip and use the
-Siren codec.
-
-The 'Voice clips' are WAV/RIFF files encoding with the Siren codec and have a
-maximum of 15 seconds in length.
-
-Unidirectional audio in form of clips.
-
-Maximum length: 15seconds
-
-Signaling:
-* MSNP2P
-
-Codec:
-* Siren
--- a/docs/protocols/msn/index.md Mon Apr 11 08:17:26 2022 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-This page is a draft, an attempt to document the MSN protocol used by the MSN
-Messenger and Windows Live Messenger products from Microsoft.
-
-## Introduction
-
-The protocol behind the MSN products is called MSNP and is implemented in
-multiple versions. The latest version is MSNP18 used in Windows Live Messenger
-2009 Beta (14.0.5027).
-
-In this document, we will try to document this protocol as much as possible,
-using multiple sources and reverse engineering made so far on this protocol.
-
-## MSNP Versions
-
-Since October 13th 2003, The Microsoft servers will only accept versions of the
-protocol equal to or newer than MSNP8.
-
-For a history on the MSNP protocol version, read this page :
-http://en.wikipedia.org/wiki/MSNP
-
-The latest protocol version of MSNP uses multiple subprotocols for doing
-different tasks. Mainly, it heavily depends on SOAP for most of its
-transactions. It also depends on SIP and other proprietary protocols, like
-MSNP2P.
-
-## Useful Links
-* [Protocol versions information](http://en.wikipedia.org/wiki/MSNP)
-* [Original reverse engineering documentation. outdated.](http://www.hypothetic.org/docs/msn/)
-* [Incomplete documentation for multiple protocol versions](http://msnpiki.msnfanatic.com/)
-* [Raw paste of contact list SOAP actions](http://telepathy.freedesktop.org/wiki/Pymsn/MSNP/ContactListActions)
-* [Audio/Video conferencing protocol specifications](http://ml20rc.msnfanatic.com/vc_1_1/index.html)
-* [ISF file format specifications (obsolete)](http://synce.org/moin/FormatDocumentation/InkSerializedFormat)
-* [Official ISF file format specifications](http://download.microsoft.com/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/InkSerializedFormat(ISF)Specification.pdf)
-* [Current status of MSN service](http://messengergeek.wordpress.com/messenger-status/)
--- a/docs/protocols/msn/login.md Mon Apr 11 08:17:26 2022 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-# Login
\ No newline at end of file
--- a/docs/protocols/msn/multiplepointsofpresence.md Mon Apr 11 08:17:26 2022 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-# Multiple Points of Presence
-
-Since MSNP16 the client is able to login from multiple points.
-
-To get this working it's just needed to add a new field MachineGuid to the
-MSPAuth. This field is stored in the registry at
-
-```
-HKEY_USERS\S-1-5-21-1960408961-688789844-682003330-1003\Software\Microsoft\MSNMessenger\MachineGuid
-```
-
-```
-"MSNP16 resp" = "MSNP16 resp" + {MachneGuid}
-```
-
-Non windows systems can generate a random MachineGuid at runtime and keep it
-during the whole session.
-
-## References
-
-http://forums.fanatic.net.nz/index.php?showtopic=18166
-
-login trace: http://forums.fanatic.net.nz/index.php?showtopic=18701&mode=threaded
--- a/docs/protocols/msn/notifications.md Mon Apr 11 08:17:26 2022 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-# Notifications
-
-In the MSN protocol, notifications are the primary means of receiving MSN
-Mobile messages. They are received with the IPG command and are in the XML
-format as follows.
-
-```
-<NOTIFICATION id="Number (Message Counter?)" siteid="111100400" siteurl="http://mobile.msn.com/">
- <TO name="Email Address">
- <VIA agent="mobile"/>
- </TO>
- <FROM name="tel:+Mobile Phone Number|Email Address"/>
- <MSG pri="1" id="1|407">
- <CAT Id="110110001"/>
- <ACTION url="2wayIM.asp"/>
- <SUBSCR url="2wayIM.asp"/>
- <BODY lcid="1033">
- <TEXT>Message Text</TEXT>
- </BODY>
- </MSG>
-</NOTIFICATION>
-```
-
-* The name attribute of the FROM tag may contain either a mobile phone number
- with the prefix "tel:+" or an email address, depending on whether the sender
- has their mobile phone set up with MSN Mobile or not.
-* The id attribute of the MSG tag is a 1 if it is a normal message, but a 407
- indicates that the message you just sent was too long for the mobile device
- and the TEXT tag is then empty.
--- a/docs/protocols/msn/notificationserver.md Mon Apr 11 08:17:26 2022 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-# Notification server
-
-## Challenges
-
-The MSN servers will periodically send a message to the client to verify that
-it is an official client. This message is received as a "CHL" command and must
-be replied to with a "QRY" command. The method for calculating the response
-outlined below has been in effect since MSNP11.
-
-Challenges are also used to verify the validity of a client when sending OIM's.
-
-## Protocol Sequence
-
-```
-Server:
-<<< CHL 0 ChallengeString\r\n
-Client:
->>> QRY TrID ProductID PayloadLength\r\n
- MD5Digest
-Server:
-<<< QRY TrID\r\n
-```
-
-* TrID: The TransactionID of the command.
-* ChallengeString: A string required for the response
-* ProductID: Client identification string
-* PayloadLength: Size of the payload, always 32 because MD5 hashes are constant in length
-* MD5Digest: MD5 digest as calculated below
-
-## Calculating Response
-
-In order to calculate a response, you must be able to manipulate 64-bit
-integers, using them for bitwise operations as well as basic math.
-Additionally, you will need an implementation of the MD5 hashing algorithm.
-Note: while MD5 hashes are generally written out as 32-character hexadecimal
-strings, this is purely for presentation's sake. This document will assume the
-MD5 hash has been left in its binary form, that is, 128 bits or 16 bytes of
-data.
-
-## MD5 Hash
-
-The first step in the process of creating the challenge response is creating an
-MD5 digest from the ChallengeString (from the server's CHL command) followed by
-a special key, called the "Product Key". This Product Key is specific to every
-version of the MSN client.
-
-The MD5 hash can then be split into 4 32-bit unsigned integers in little-endian
-format. You should then bitwise AND each of these integers with 0x7FFFFFFF and
-save the result.
-
-## The Product ID
-
-The Product ID is another string specific to every version of the MSN client.
-This string is sent in the QRY command, and is used to calculate the 64-bit
-key.
-
-First, take the challenge data and append the Product ID to it. This string is
-then padded with '0' (not 'NULL'!) until its length is a multiple of 8. The
-string should be split into an array of 32-bit unsigned little-endian integers.
-
-## The 64-bit Key
-
-In the third step in the process we are going to create a key based on the data
-from the previous steps. You will need two variables, called High and Low, both
-initialized to 0. Note: High and Low must be 64-bit variables because they may
-hold very large values. We will loop through the previous data array two
-elements at a time, calling the current element N and the element after it
-N + 1.
-
-The first step in the loop should be to create a temporary variable and fill it
-with the value of piece N, multiply it by 0x0E79A9C1, modulo 0x7FFFFFFF and add
-the variable Low to it (which will be 0 the first run). After this, multiply
-the temporary variable by the first element of the MD5 hash and add the second
-element of the MD5 hash, again modulo 0x7FFFFFFF.
-
-Next, calculate the high part of the key. This can be done by filling the
-variable Low with the value of piece N + 1. Add the temporary variable to it,
-modulo 0x7FFFFFFF. Multiply it by the value of the third element of the MD5
-hash and add the fourth element of the MD5 hash to it, again modulo 0x7FFFFFFF.
-
-At the end of the loop, add the values from the variable Low and the temporary
-variable to High.
-
-After the loop, add the second element of the MD5 hash to Low and the fourth
-element to High, both modulo 0x7FFFFFFF.
-
-To create the key, take the variables High and Low, and treat them as one large
-64-bit integer.
-
-## The Final Result
-
-The final step in the process is to create the new challenge hash.
-
-First, the MD5 hash must be split in two parts (both 8 bytes long). You can
-treat each of these parts as a 64-bit little-endian integer, which should then
-be XOR'd with the key.
-
-This result should be converted to its hexadecimal string representation (Each
-byte becomes two characters representing its hexadecimal value). If the string
-is less than 32 characters in length you need to prefix it with '0' (again, not
-NULL). This final result is the MD5Digest that is sent as the payload of the
-QRY command.
-
-## Example
-
-```
-Server:
-<<< CHL 0 22210219642164014968\r\n
-```
-
-Using the MSNP15 Product Key, the MD5 Hash is:
-
-```
-67780f8e134b77b535a64c7c0f7f1eb0
-```
-
-Treating this as four integers gives:
-
-```
-0x0e0f7867 (235894887)
-0x35774b13 (897010451)
-0x7c4ca635 (2085398069)
-0x301e7f0f (807304975)
-```
-
-Using the Product ID gives:
-
-```
-0x31323232 (825373234)
-0x39313230 (959525424)
-0x31323436 (825373750)
-0x31303436 (825242678)
-0x38363934 (943077684)
-0x444f5250 (1146049104)
-0x39313130 (959525168)
-0x554a5347 (1430934343)
-0x38312443 (942744643)
-0x30303030 (808464432)
-```
-
-The 64-bit key is:
-
-```
-High: 0x08188389 (135824265)
-Low: 0x0ea078c3 (245397699)
-Key: 0x081883890ea078c3 (583360776423635395)
-```
-
-The final result is:
-
-```
-a400af809ac86fbdf6deec7286fc06b8
-```
-
-```
-Client:
->>> QRY 5 PROD0119GSJUC$18 32\r\n
- a400af809ac86fbdf6deec7286fc06b8
-Server:
->>> QRY 5\r\n
-```
-
-## Product Key and ID
-
-MSNP15 is currently used by Windows Live Messenger version 8.5.1288.816. The
-Product Key and ID for that particular version are:
-
-```
-Product Key: ILTXC!4IXB5FB*PX
-Product ID: PROD0119GSJUC$18
-```
--- a/docs/protocols/msn/p2p.md Mon Apr 11 08:17:26 2022 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-# P2P Protocol
-
-## SLP
-
-### P2Pv1 Headers
-
-#### Flags
-
-The flags define the type of P2P message that is being sent.
-
-* 0x0 Normal Message
-* 0x1 Nak
-* 0x2 Ack
-* 0x4 Waiting for a pending invite
-* 0x8 Notify a binary error
-* 0x10 File
-* 0x20 Msn Object: Display Picture or Custom Emoticon Data
-* 0x40 Close session
-* 0x80 Error at transport layer protocol
-* 0x100 Direct Handshake
-* 0x1000000 Define data for File transfer
-
-#### Footer
-
-The footer is 4 bytes long (DWORD) in big endian. It represents the Application
-Identifier (AppID)
-
-* 0x0 Negotiating session
-* 0x1 MsnObject: Display Picture or Custom Emoticon
-* 0x2 File transfer
-* 0xB CustomEmoticon (0d11)
-* 0xC Display Image (0d12)
-
-#### Refs
-
-* [Msnp-sharp Code](http://code.google.com/p/msnp-sharp/source/browse/branches/MSNPSHARP_30_STABLE/MSNPSharp/DataTransfer/P2PMessage.cs)
-* [MsnPiki](http://msnpiki.msnfanatic.com/index.php/MSNC:P2Pv1_Headers)
-
-## Msnobj based transfers
-
-#### MSNObject Description
-
-The MSNObject is the way of MSNP to identify contents: Display Pictures, Custom Emoticons, Backgrounds, Voice Clips, etc.
-
-##### Format
-
-The MSNObject has always the following format
-
-```
-<msnobj Creator="buddy@hotmail.com" Size="24539" Type="3" Location="TFR2C.tmp" Friendly="AAA=" SHA1D="trC8SlFx2sWQxZMIBAWSEnXc8oQ=" SHA1C="U32o6bosZzluJq82eAtMpx5dIEI="/>
-```
-
-###### Creator
-
-This field specify the person who made the object, in other words, the sender.
-Typically is the address of the buddy.
-
-###### Size
-
-The total size of the data the object represents, in bytes.
-
-###### Type
-
-Indicates which kind of transaction this object describes.
-
-The known types are documented in the Reference page.
-
-###### Location
-
-Contains the filename under which the filename will be, or has been stored.
-
-###### Friendly
-
-Contains the name of the picture in Unicode (UTF-16 Little Endian) format. The
-string is encoded with Base64. For most types of descpritors this field is a
-null character or 'AAA=' when encoded.
-
-###### SHA1D
-
-The SHA1D field contains the SHA1 hash of the images data encoded in Base64.
-It's also known as the Data Hash or the SHA1 Data Field.
-
-###### SHA1C
-
-Contains all previous fields hashed with SHA1, and then encoded in Base64. This
-field is better known as the Checksum or SHA1 Checksum Field. The string format
-must be hashed to get the resulting SHA1C value looks similar to:
-
-```
-Creatorbuddy1@hotmail.comSize24539Type3LocationTFR2C.tmpFriendlyAAA=SHA1DtrC8SlFx2sWQxZMIBAWSEnXc8oQ=
-```
-
-It is suspected, but not verified, that the order in which the fields are
-hashed must be the same as the order of the fields in the XML format.
-
-##### Sources
-
-[Msnpiki:MSNObject](http://msnpiki.msnfanatic.com/index.php/MSNC:MSNObject)
--- a/docs/protocols/msn/protocolbasics.md Mon Apr 11 08:17:26 2022 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-# Protocol Basics
-
-## Features
-
-The MSN protocol has the following features:
-
-* Avatars
-* Conferencing
-* File transfer
-* Instant messaging
-* Remote assistance
-* Voice chat
-* Webcam support
-* Whiteboard
-
-## Network
-
-The MSN protocol connects to its servers over the following ports:
-
-* Chat port: 1863 (TCP)
-* HTTP chat port: 80 (TCP)
-* File transfer port: 6891-6900 (TCP)
-* Phone: 2001-2120, 6801, 6901 (UDP)
-* RTP: 5100
-* Voice chat: 6901 (UDP, TCP)
-* Whiteboard: 7800-7825 (TCP)
-
-Known servers are:
-
-* Pager server: messenger.hotmail.com
-* HTTP method server: gateway.messenger.hotmail.com
--- a/docs/protocols/msn/reference.md Mon Apr 11 08:17:26 2022 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-# Reference
-
-## Client IDs
-
-## Msnobj types
-
-1. Avatar (Unknown, present since Messenger 6.0).
-1. Custom Emoticon.
-1. User Tile (Static display picture only).
-1. Shared File (Unkonw, present since Messenger 6.0).
-1. Backgrounds (Static backgrounds only).
-1. History (Unknown).
-1. Deluxe Display Pictures (Dynamic display pictures).
-1. Wink.
-1. Map File (A map file contains a list of items in the store).
-1. Dynamic Background (Animated).
-1. Voice Clip.
-1. Plug-in State (Saved state of Add-ins).
-1. Roaming Objects (eg.Roaming display picture).
-1. Signature Sounds (Introduced in Messenger 9.0)
-
-**Note!** The value 14 was used for Location information in some BETA clients,
-but was later removed because of privacy reasons. In the Messenger 9.0 client
-it was re-used for signature sounds.
-
-## EUF-GUIDs
-
-## Error Codes
--- a/docs/protocols/msn/soap.md Mon Apr 11 08:17:26 2022 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,218 +0,0 @@
-# SOAP
-
-## Contact List Management
-
-### Retrieving the Address Book
-The address book is retrieved by posting this SOAP request to
-http://contacts.msn.com/abservice/abservice.asmx or
-https://contacts.msn.com/abservice/abservice.asmx for an encrypted connection.
-
-```http
-POST /abservice/abservice.asmx HTTP/1.1
-SOAPAction: http://www.msn.com/webservices/AddressBook/ABFindAll
-Content-Type:text/xml; charset=utf-8
-User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
-Accept: */*
-Host: contacts.msn.com
-Content-Length: Variable Number
-Connection: Keep-Alive
-Cache-Control: no-cache
-
-<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'
- xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
- xmlns:xsd='http://www.w3.org/2001/XMLSchema'
- xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'>
- <soap:Header>
- <ABApplicationHeader xmlns='http://www.msn.com/webservices/AddressBook'>
- <ApplicationId>09607671-1C32-421F-A6A6-CBFAA51AB5F4</ApplicationId>
- <IsMigration>false</IsMigration>
- <PartnerScenario>Initial</PartnerScenario>
- </ABApplicationHeader>
- <ABAuthHeader xmlns='http://www.msn.com/webservices/AddressBook'>
- <ManagedGroupRequest>false</ManagedGroupRequest>
- <TicketToken>Variable</TicketToken>
- </ABAuthHeader>
- </soap:Header>
- <soap:Body>
- <ABFindAll xmlns='http://www.msn.com/webservices/AddressBook'>
- <abId>00000000-0000-0000-0000-000000000000</abId>
- <abView>Full</abView>
- <deltasOnly>true</deltasOnly>
- <lastChange>0001-01-01T00:00:00.0000000-08:00</lastChange>
- </ABFindAll>
- </soap:Body>
-</soap:Envelope>
-```
-
-* deltasOnly: whether you want to receive a full or partial address book update
-* lastChange: the time your address book was last synchronized
-
-*deltasOnly and lastChange are only necessary if you want to do a partial
-address book update.*
-
-The server will then reply with this response.
-
-```http
-HTTP/1.1 200 OK
-Date: Wed, 02 Apr 2008 03:17:04 GMT
-Server: Microsoft-IIS/6.0
-P3P:CP="BUS CUR CONo FIN IVDo ONL OUR PHY SAMo TELo"
-X-Powered-By: ASP.NET
-X-MSNSERVER: BAYABCHWBB128
-X-AspNet-Version: 2.0.50727
-Cache-Control: private, max-age=0
-Content-Type: text/xml; charset=utf-8
-Content-Length: Variable Number
-
-<?xml version="1.0" encoding="utf-8"?>
-<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <soap:Header>
- <ServiceHeader xmlns="http://www.msn.com/webservices/AddressBook">
- <Version>13.02.2514.0000</Version>
- <CacheKey>Base64 Encoded Data?</CacheKey>
- <CacheKeyChanged>true|false</CacheKeyChanged>
- <PreferredHostName>by4.contacts.msn.com</PreferredHostName>
- </ServiceHeader>
- </soap:Header>
- <soap:Body>
- <ABFindAllResponse xmlns="http://www.msn.com/webservices/AddressBook">
- <ABFindAllResult>
- <groups>
- <Group>
- <groupId>GUID</groupId>
- <groupInfo>
- <annotations>
- <Annotation>
- <Name>MSN.IM.Display</Name>
- <Value>1</Value>
- </Annotation>
- <Annotation>
- <Name>MSN.IM.HasSharedFolder</Name>
- <Value>1</Value>
- </Annotation>
- The rest of these annotations have only been seen so far on ContactType of "Me"
- <Annotation>
- <Name>MSN.IM.MBEA</Name>
- <Value>0</Value>
- </Annotation>
- <Annotation>
- <Name>MSN.IM.GTC</Name>
- <Value>1</Value>
- </Annotation>
- <Annotation>
- <Name>MSN.IM.BLP</Name>
- <Value>1</Value>
- </Annotation>
- <Annotation>
- <Name>MSN.IM.RoamLiveProperties</Name>
- <Value>1|2</Value>
- </Annotation>
- </annotations>
- <groupType>c8529ce2-6ead-434d-881f-341e17db3ff8</groupType>
- <name>Group Name</name>
- <IsNotMobileVisible>true|false</IsNotMobileVisible>
- <IsPrivate>true|false</IsPrivate>
- </groupInfo>
- <propertiesChanged />
- <fDeleted>true|false</fDeleted>
- <lastChange>ISO 8601 timestamp</lastChange>
- </Group>
- ...
- </groups>
- <contacts>
- <Contact>
- <contactId>GUID</contactId>
- <contactInfo>
- <phones>
- <ContactPhone>
- <contactPhoneType>ContactPhoneMobile</contactPhoneType>
- <number>Phone Number</number>
- <isMessengerEnabled>true|false</isMessengerEnabled>
- <propertiesChanged />
- </ContactPhone>
- </phones>
- <groupIds>
- <guid>GUID</guid>
- </groupIds>
- <emails>
- <ContactEmail>
- <contactEmailType>ContactEmailPersonal</contactEmailType>
- <email>Email Address</email>
- <isMessengerEnabled>true|false</isMessengerEnabled>
- <Capability>0</Capability>
- <MessengerEnabledExternally>true|false</MessengerEnabledExternally>
- <propertiesChanged />
- </ContactEmail>
- </emails>
- <contactType>Me|Regular|LivePending</contactType>
- <quickName>Quick Name</quickName>
- <firstName>First Name</firstName>
- <lastName>Last Name</lastName>
- <passportName>MSN Passport (Email Address)</passportName>
- <IsPassportNameHidden>true|false</IsPassportNameHidden>
- <displayName>Display Name</displayName>
- <puid>0</puid>
- <CID>Contact Id (Number, some prepended with a hyphen)</CID>
- <IsNotMobileVisible>true|false</IsNotMobileVisible>
- <isMobileIMEnabled>true|false</isMobileIMEnabled>
- <isMessengerUser>true|false</isMessengerUser>
- <isFavorite>true|false</isFavorite>
- <isSmtp>true|false</isSmtp>
- <hasSpace>true|false</hasSpace>
- <spotWatchState>NoDevice</spotWatchState>
- <birthdate>ISO 8601 timestamp</birthdate>
- <primaryEmailType>ContactEmailPersonal</primaryEmailType>
- <PrimaryLocation>ContactLocationPersonal</PrimaryLocation>
- <PrimaryPhone>ContactPhonePersonal</PrimaryPhone>
- <IsPrivate>true|false</IsPrivate>
- <Gender>Unspecified</Gender>
- <TimeZone>None</TimeZone>
- </contactInfo>
- <propertiesChanged />
- <fDeleted>true|false</fDeleted>
- <lastChange>ISO 8601 timestamp</lastChange>
- </Contact>
- ...
- </contacts>
- <CircleResult>
- <CircleTicket>
- &lt;?xml version="1.0" encoding="utf-16"?&gt;
- &lt;SignedTicket xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema" ver="1" keyVer="1"&gt;
- <Data&gt;Base64 Encoded "Ticket"&lt;/Sig&gt;
- &lt;/SignedTicket&gt;
- </CircleTicket>
- </CircleResult>
- <ab>
- <abId>00000000-0000-0000-0000-000000000000</abId>
- <abInfo>
- <ownerPuid>0</ownerPuid>
- <OwnerCID>Number</OwnerCID>
- <ownerEmail>Email Address</ownerEmail>
- <fDefault>true|false</fDefault>
- <joinedNamespace>true|false</joinedNamespace>
- <IsBot>true|false</IsBot>
- <IsParentManaged>true|false</IsParentManaged>
- <SubscribeExternalPartner>true|false</SubscribeExternalPartner>
- <NotifyExternalPartner>true|false</NotifyExternalPartner>
- <AddressBookType>Individual</AddressBookType>
- <MessengerApplicationServiceCreated>false</MessengerApplicationServiceCreated>
- </abInfo>
- <lastChange>ISO 8601 timestamp</lastChange>
- <DynamicItemLastChanged>ISO 8601 timestamp</DynamicItemLastChanged>
- <RecentActivityItemLastChanged>ISO 8601 timestamp</RecentActivityItemLastChanged>
- <createDate>ISO 8601 timestamp</createDate>
- <propertiesChanged />
- </ab>
- </ABFindAllResult>
- </ABFindAllResponse>
- </soap:Body>
-</soap:Envelope>
-```
-
-* CID: is zero for email only contacts
-* birthdate: is 0001-01-01T00:00:00 if not set
-
-*passportName and displayName aren't in email only contacts*