# Table of contents:
- MIME Content-Types
- text/plain
- text/plain; charset=UTF-8
- text/html
- text/html; charset=UTF-8
- text/x-msmsgscontrol
- image/gif
- application/x-ms-ink
- text/x-msmsgssystemmessage
- text/x-msmsgssystemmessage; charset=UTF-8
- application/x-msmsgssystemmessage
- text/x-msmsgsprofile
- text/x-msmsgsprofile; charset=UTF-8
- text/x-msmsgsemailnotification
- text/x-msmsgsemailnotification; charset=UTF-8
- application/x-msmsgsemailnotification
- text/x-msmsgsinitialemailnotification
- text/x-msmsgsinitialemailnotification; charset=UTF-8
- text/x-msmsgsactivemailnotification
- text/x-msmsgsactivemailnotification; charset=UTF-8
- text/x-msmsgsinvite; charset=UTF-8
- text/x-mms-emoticon
- text/x-mms-animemoticon
- text/search-query
- text/x-msnmsgr-datacast
- application/x-msnmsgrp2p
- Various other headers
# MIME Content-Types
Content-Types are a part of the
Multi-purpose Internet Mail Extensions,
though technically they predate that spec (in RFC1049,
however not in their most well-known form, which was only introduced with the original
RFC1341 spec itself.
As the MSG MSNP command heavily relys on MIME formatting and interpretation,
an informal declaration of all (well, most of them) valid types may be useful.
# text/plain
Not sent by the Official Client.
Standard text. Decoded with your system's codepage.
MIME-Version: 1.0
Content-Type: text/plain
This is a text/plain message.
# text/plain; charset=UTF-8
Standard text. Always decodes using the UTF-8 format.
Can contain multiple headers:
X-MMS-IM-Format: In the exact format ofFN=; EF=; CO=; CS=; PF=with an optional; RL=1:FN: The font name. URL encoded.EF: Text effects, including any of the characters will set the respective effect(s):B: Bold.I: Italics.S: Strike-through.U: Underline.
CO: Text color. Hexadecimal but in BBGGRR (blue green red) instead of RRGGBB (red green blue). Leading zeros may be truncated.CS: Character set. Usually 0 (ANSI) or 1 (allow any replacement font).PF: Pitch and Family, two nybbles combined into one, describes what kind of font to replace with:0?: Use any font family.1?: Use any seriffed font family.2?: Use any sans-seriffed font family.3?: Use any monospace font family.4?: Use any script (writing-like) font family.5?: Use any decorative font family.?0: Use any font family.?1: Use a monospace font.?2: Use a variable-spaced font.
RL: If1, this message meant to be right-to-left.
Roster: Contains the current Switchboard session ID and server. Since MSNP16.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Roster: 987654321;10.0.1.200:1863
X-MMS-IM-Format: FN=MS%20Sans%20Serif; EF=; CO=0; CS=0; PF=0
This is a text/plain; charset=UTF-8 message.
# text/html
Not sent by the Official Client.
HTML markup. Decoded with your system's codepage.
MIME-Version: 1.0
Content-Type: text/html
(If you know what gets this to render in the client, please let me know.)
# text/html; charset=UTF-8
Not sent by the Official Client.
HTML markup. Always decodes using the UTF-8 format.
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
(If you know what gets this to render in the client, please let me know.)
# text/x-msmsgscontrol
A control message.
Usually contains the TypingUser header, which has the user handle of the person writing a message.
Otherwise, may contain the RecordingUser header with the user handle of the person recording a voice message.
MIME-Version: 1.0
Content-Type: text/x-msmsgscontrol
TypingUser: example@hotmail.com
# image/gif
GIF (Graphics Interchange Format).
Used for handwritten messages when a client announces support for such, but not for ISF.
Content is base64 encoded.
Expected to be chunked.
MIME-Version: 1.0
Content-Type: image/gif
base64:...
# application/x-ms-ink
ISF (Ink Serialized Format).
Used for handwritten messages when a client announces support for it.
Content is base64 encoded.
Expected to be chunked.
MIME-Version: 1.0
Content-Type: application/x-ms-ink
base64:...
# text/x-msmsgssystemmessage
A system notification that tells the client something based on the body's Type.
This type is not parsed when sent over Switchboard.
This type has six headers inside it's body:
Message-Number: Mac only. Unknown. Required for parsing.Minutes-To-Shutdown: Mac only. The specified amount of time before the server shuts down. Required for parsing.Minutes-Downtime: Mac only. The specified amount of time to expect the server to be down for.Type: The type of this system message:1: The server will shutdown inArg1minutes.
Arg1: The first argument for the system message.Arg2: The second argument for the system message.
MIME-Version: 1.0
Content-Type: text/x-msmsgssystemmessage
Message-Number: 1
Minutes-To-Shutdown: 5
Type: 1
Arg1: 5
# text/x-msmsgssystemmessage; charset=UTF-8
Same function as text/x-msmsgssystemmessage.
This type is not parsed when sent over Switchboard.
So far there is no reason to specify a UTF-8 formatted system message, as there are no formatted strings being used.
MIME-Version: 1.0
Content-Type: text/x-msmsgssystemmessage; charset=UTF-8
Type: 1
Arg1: 5
# application/x-msmsgssystemmessage
Same function as text/x-msmsgssystemmessage.
This type is not parsed when sent over Switchboard.
MIME-Version: 1.0
Content-Type: application/x-msmsgssystemmessage
Type: 1
Arg1: 5
# text/x-msmsgsprofile
The user's profile. Sent after log in from the Notification Server.
Text-based fields are decoded with your system's codepage.
This type is not parsed when sent over Switchboard.
This type supports at most twenty five headers:
LoginTime: The user's log in time. Expressed as a number of seconds since January 1st, 1970 at 00:00 UTC (unix epoch)EmailEnabled: If1, this account has an e-mail inbox.MemberIdHigh: The high 32-bits (signed) of your Passport Unique ID.MemberIdLow: The low 32-bits (signed) of your Passport Unique ID.lang_preference: The decimal language ID associated with this account.PreferredEmail: The e-mail address you would prefer to get mail on.country: An ISO 3166-1 alpha-2.PostalCode: Either your ZIP (US only) or post code. Not used.Gender: The user's gender. Can either bemfor male,ffor female, orUfor unspecified. Can be empty.Kid: If this is1, this is a child's account.BDayPre: The precision of theBirthdayvalue:0: None.1: Years only.2: All days.3: None.4: None.5: None.
Birthday: The number of days since you were born, aligned to yourBDayPreprecision.Wallet: If1, the account has a wallet attached.Flags: A field of 32 bits that may or may not be set depending on parameters the login server sets:1: This account's preferred e-mail is verified.2: This account has an active inbox.4: The password on this account has been recovered.32: This account has given consent to share partial data with third parties.64: This account has given consent to share data with third parties.512: The account's e-mail address is provided by a third party.1024: This account's original display name has been verified.4096: This account has a active premium mobile services subscription.
sid: The Passport Site ID the service is associated with.kv: The version of the profile? Seems to increase linearly from what i've read.MSPAuth: The authentication token. Either generated at this point or uses whatever you sent if avaliable.ClientIP: The connecting IP of the user.ClientPort: The connecting port of the user. Please note that this value is endian swapped.ABCHMigrated: In MSNP10, notifies the client that the contact list ID format has been changed.Nickname: Used sometimes to set your current display name.RouteInfo: Introduced with MSNP16. The first part seems to be the Notification Server used. There is no known format for the second part.BetaInvites: The number of invitations you have left for the beta program.MPOPEnabled: If1, multiple logins are supported. Since MSNP16.
MIME-Version: 1.0
Content-Type: text/x-msmsgsprofile
LoginTime: 1780900587
EmailEnabled: 1
MemberIdHigh: 1
MemberIdLow: 2
lang_preference: 1033
PreferredEmail: example@hotmail.com
country: US
PostalCode:
Gender:
Kid: 0
Age:
BDayPre:
Birthday:
Wallet:
Flags: 1027
sid: 507
kv: 11
MSPAuth: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA$$
ClientIP: 192.168.1.111
ClientPort: 18183
ABCHMigrated: 1
Nickname: example user
RouteInfo: msnp://10.0.0.5/00000000
BetaInvites: 5
MPOPEnabled: 1
# text/x-msmsgsprofile; charset=UTF-8
Same function as text/x-msmsgsprofile.
Text-based fields are decoded with UTF-8.
This type is not parsed when sent over Switchboard.
MIME-Version: 1.0
Content-Type: text/x-msmsgsprofile; charset=UTF-8
LoginTime: 1780900587
EmailEnabled: 1
MemberIdHigh: 1
MemberIdLow: 2
lang_preference: 1033
PreferredEmail: example@hotmail.com
country: US
PostalCode:
Gender:
Kid: 0
Age:
BDayPre:
Birthday:
Wallet:
Flags: 1027
sid: 507
kv: 11
MSPAuth: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA$$
ClientIP: 192.168.1.111
ClientPort: 18183
ABCHMigrated: 1
Nickname: example user
RouteInfo: msnp://10.0.0.5/00000000
BetaInvites: 5
MPOPEnabled: 1
# text/x-msmsgsemailnotification
An e-mail notification.
Text-based fields are decoded with your system's codepage.
This type is not parsed when sent over Switchboard.
This type supports some headers:
From: The display name of the sender.Message-URL: A relative path or absolute URL to read an e-mail message.Post-URL: A absolute URL that is authenticated with that should take you toMessage-URL.Subject: The name of the message. May be encoded by RFC2047.Dest-Folder: The name of the e-mail folder the e-mail was put in:ACTIVE: Your inbox.sAVeD: Outgoing mail.drAfT: Your drafts.trAsH: The trash.HM_BuLkMail_: The spam e-mail inbox.
id: The Passport Site ID to use forMessage-URL.
MIME-Version: 1.0
Content-Type: text/x-msmsgsemailnotification
From: Example User
Message-URL: /cgi-bin/getmsg?msg=MSG1728932553.00&start=1&len=12&curmbox=ACTIVE
Post-URL: https://loginnet.passport.com/ppsecure/md5auth.srf?lc=1033
Subject: Just saying hello.
Dest-Folder: ACTIVE
From-Addr: example@hotmail.com
id: 2
# text/x-msmsgsemailnotification; charset=UTF-8
Same function as text/x-msmsgsemailnotification.
Text-based fields are decoded with UTF-8.
This type is not parsed when sent over Switchboard.
MIME-Version: 1.0
Content-Type: text/x-msmsgsemailnotification; charset=UTF-8
From: Example User
Message-URL: /cgi-bin/getmsg?msg=MSG1728932553.00&start=1&len=12&curmbox=ACTIVE
Post-URL: https://loginnet.passport.com/ppsecure/md5auth.srf?lc=1033
Subject: =?"us-ascii"?Q?Just saying hello.?=
Dest-Folder: ACTIVE
From-Addr: example@hotmail.com
id: 2
# application/x-msmsgsemailnotification
Used as both text/x-msmsgsemailnotification.
and text/x-msmsgsinitialemailnotification
in MSNP2.
Only the id header is not supported.
Text-based fields are decoded with your system's codepage.
This type is not parsed when sent over Switchboard.
MIME-Version: 1.0
Content-Type: application/x-msmsgsemailnotification; charset=UTF-8
From: Example User
Message-URL: /cgi-bin/getmsg?msg=MSG1728932553.00&start=1&len=12&curmbox=ACTIVE
Post-URL: https://loginnet.passport.com/ppsecure/md5auth.srf?lc=1033
Subject: =?"us-ascii"?Q?Just saying hello.?=
Dest-Folder: ACTIVE
From-Addr: example@hotmail.com
# text/x-msmsgsinitialemailnotification
The initial e-mail service configuration data.
Text-based fields are decoded with your system's codepage.
This type is not parsed when sent over Switchboard.
MIME-Version: 1.0
Content-Type: text/x-msmsgsinitialemailnotification
Inbox-Unread: 1
Folders-Unread: 0
Inbox-URL: /cgi-bin/HoTMaiL
Folders-URL: /cgi-bin/folders
Post-URL: http://www.hotmail.com
# text/x-msmsgsinitialemailnotification; charset=UTF-8
Same function as text/x-msmsgsinitialemailnotification.
Text-based fields are decoded with UTF-8.
This type is not parsed when sent over Switchboard.
MIME-Version: 1.0
Content-Type: text/x-msmsgsinitialemailnotification; charset=UTF-8
Inbox-Unread: 1
Folders-Unread: 0
Inbox-URL: /cgi-bin/HoTMaiL
Folders-URL: /cgi-bin/folders
Post-URL: http://www.hotmail.com
# text/x-msmsgsactivemailnotification
Used when moving messages around in your e-mail inbox, or when a message is read if the source and destination are the same.
Text-based fields are decoded with the system's codepage.
This type is not parsed when sent over Switchboard.
This type has three headers in it's body:
Src-Folder: The name of the e-mail folder the e-mail was moved from:ACTIVE: Your inbox.sAVeD: Outgoing mail.drAfT: Your drafts.trAsH: The trash.HM_BuLkMail_: The spam e-mail inbox.
Dest-Folder: The name of the e-mail folder the e-mail was moved to:ACTIVE: Your inbox.sAVeD: Outgoing mail.drAfT: Your drafts.trAsH: The trash.HM_BuLkMail_: The spam e-mail inbox..!!trAsH: If moved here, the messages are instead fully deleted.
Message-Delta: The amount of messages moved.
MIME-Version: 1.0
Content-Type: text/x-msmsgsactivemailnotification
Src-Folder: trAsH
Dest-Folder: .!!trAsH
Message-Delta: 1
# text/x-msmsgsactivemailnotification; charset=UTF-8
Same function as text/x-msmsgsactivemailnotification.
Text-based fields are decoded with UTF-8.
This type is not parsed when sent over Switchboard.
MIME-Version: 1.0
Content-Type: text/x-msmsgsactivemailnotification; charset=UTF-8
Src-Folder: trAsH
Dest-Folder: .!!trAsH
Message-Delta: 1
# text/x-msmsgsinvite; charset=UTF-8
An application invite.
Text-based fields are decoded with UTF-8.
This type can have many headers in it's body:
Invitation-Command: The current stage of the invitation process:INVITE: You are initiating an invitation.ACCEPT: You have accpeted the invitation.CANCEL: You have canceled the invitation, reason inCancel-Code.Context: The application requested to send additional session context. SeeContext-Data.
Invitation-Cookie: The unique numerical ID for this invitation session.0is invalid. It should be the same value for each step.Application-Name: The display name of the application.Application-GUID: The GUID of the application. Usually it's DirectPlay lobby ID. Might be parsed case sensitively.Application-URL: The URL to learn more about the application.Application-File: For file transfers. The name of the file.Application-FileSize: For file transfers. The size of the file.Launch-Application: IfTRUE, the relevant application is launched, otherwise useFALSE.Session-Protocol: UsuallySM1.Cancel-Code: Only appears ifInvitation-CommandisCANCEL:FAIL: The invitation failed (possibly the application failed to launch?)REJECT: The other party rejected the invitation.REJECT_NOT_INSTALLED: The invitation could not be accepted because the other party does not have the application installed.OUTBANDCANCEL: The invitation was canceled before a connection was made.FTTIMEOUT: The file transfer timed out.TIMEOUT: You failed to connect to the inviter's application.NETWORK_CONFIG_FAILURE: Unknown.USE_RELAY: The client wants to use the relay instead.CONFIRM_RELAY: The client accepts the usage of the relay.RELAY_FAILURE: The relay failed.
Request-Data: IfIP-Address:, theIP-Addressheader is expected to be sent by the other party in the invite process.Context-Data: The context data. URL encoded.AuthCookie: File transfers only. A unique numerical ID to specify which file transfer session this should be.Session-ID: A GUID generated for the user that should stay consistant.Sender-Connect: IfTRUE, the inviter should connect to the invitee instead of the inverse.Connectivity: IfN, the sender of this is under NAT, and you cannot directly connect to the sender.
If this is not the case, useU.IP-Address: The IP address provided by the profile or the one associated with your network adapter.IP-Address-Internal: The IP address on your internal network.Port: The TCP port you are going to listen on.PortX: ThePortvalue XORed with 12609.PortX-Internal: Usually the same asPortX. Only use a different value if the client is meant to use a different port for internal network connections.File-Type: Mac file transfers only. The decimalized type code. Use0if there isn't one.File-Creator: Mac file transfers only. The decimalized creator code. Use0if there isn't one.DataFile-Name: Mac file transfers only. Denotes that this is a resource fork for a seperate file, of which it's name is specified here.Total-FileSize: Mac file transfers only. The combined size of both the resource fork and the data fork.IP-Address-Enc64: A base64 encoded version ofIP-Address. Introduced with Client Version 6.0.Public-IP: (Possibly only used in audio/video invitations?) The public IPv4 address, usually from the initial profile'sClientIP.Private-IP: (Possibly only used in audio/video invitations?) The private IPv4 address, usually from your network adapter.Conn-Type: (Possibly only used in audio/video invitations?) The network condition:Unknown-Connect: Undetermined.Direct-Connect: Direct connection is possible.UPnP-NAT: Under NAT, but Universal Plug and Play is avaliable.Unknown-NAT: NAT, but with unknown symptoms.IP-Restrict-NAT: Incoming connections are allowed on any port after an outbound connection is established..Port-Restrict-NAT: Incoming connections are allowed only on the same port after an outbound connection is established, and can be reused.Symmetric-NAT: Incoming connections are allowed only on the same port after an outbound connection is established, but they can not be reused.Firewall: Inbound connections are not allowed.ISALike: You seem to be under a Internet Security and Acceleration server.
Sip-Capability: Audio/video invitations only. If Real-Time Communications support is avaliable, this is1, otherwise it is0.UPnP: Audio/video invitations only. If Universal Plug and Play support is detected, this isTRUE, otherwise it isFALSE.Avm-Support: Audio/video invitations only. Is always7if the audio/video relay is enabled.Avm-Request: Audio/video invitations only. Is always2if the audio/video relay is enabled.UsingRendezvous: (Possibly only used in audio/video invitations?) Unknown. EitherTRUEorFALSE.Precedence-GUID: Only inUSE_RELAYcancel messages. A GUID.RelayCallId: Audio/Video Relay invitations only. A GUID that denotes the call.RelayURI: Audio/Video Relay invitations only. Unknown.
The invitation proceedure goes as such:
- Inviter sends
INVITE. - Target sends
ACCEPTwhich asks for inviter's IP. - Inviter sends
ACCEPTwith their IP (of the current network interface), port, other parameters if necessary. - Target connects to inviter, or sends a
CANCEL.
If NAT detection is enabled and is triggered, the proceedure is changed:
- Inviter sends
INVITEwhich asks for target's IP. - Target sends
ACCEPTwith their IP (from the profile), port and other parameters if necessary. - Inviter connects to target, or sends a
CANCEL.
If the target does not support the Connectivity header, it will fall back to the standard proceedure from step 3 onward,
and the inviter will have to send their own IP (likely from the profile?) and port.
For more information on the file transfer protocol used, learn more about MSNFTP.
MIME-Version: 1.0
Content-Type: text/x-msmsgsinvite; charset=UTF-8
Application-Name: NetMeeting
Application-GUID: {44BBA842-CC51-11CF-AAFA-00AA00B6015C}
Session-Protocol: SM1
Application-URL: http://microsoft.com
Invitation-Command: INVITE
Invitation-Cookie: 11223344
Session-ID: {44BFD5A4-7450-4BDA-BA3A-C51B3031126D}
# text/x-mms-emoticon
Used for custom emoticon descriptors.
Format is tab deliminated:
- The text to replace with the emoticon.
- The
<msnobj>object descriptor. You have to initiate the download for the object if it is unavaliable. - Terminator, if there are more emoticons to send, concatenate all descriptors and send as one message.
NOTE: The XML <msnobj> has been exploded for visibility. Formatting <msnobj>s are undefined behaviour.
MIME-Version: 1.0
Content-Type: text/x-mms-emoticon
(?) <msnobj
Creator="example@hotmail.com"
Size="889"
Type="2"
Location="example.png"
Friendly="AAA="
SHA1D="L/Q/zm2QjISFKvv2HBmxLr9lox8="
SHA1C="MA0ktY4VStXZ0amX5uQyosUTOak="
/>
# text/x-mms-animemoticon
Same format as text/x-mms-emoticon, but for animated emoticons.
NOTE: The XML <msnobj> has been exploded for visibility. Formatting <msnobj>s are undefined behaviour.
MIME-Version: 1.0
Content-Type: text/x-mms-emoticon
bones1 <msnobj
Creator="example@hotmail.com"
Size="136540"
Type="2"
Location="skeleton.gif"
Friendly="AAA="
SHA1D="vL+zg1YhmXGgk1gbIPcA44bHai0="
SHA1C="lFsgLlLe4IkpU8L//0IjRr0Wo60="
/>
# text/search-query
Sent when a client wants to perform a shared search.
MIME-Version: 1.0
Content-Type: text/search-query
This is a search query.
# text/x-msnmsgr-datacast
Sent for various types of data with no explict type.
What's sent depends on the ID header sent in the body:
1: Nudge. No parameters.2: Wink. SeeDataheader for a<msnobj>. You have to initiate the download for the object if it is unavaliable.3: Voice clip. SeeDataheader for a<msnobj>. You have to initiate the download for the object if it is unavaliable.4: Action message. SeeDataheader for the message to display.
MIME-Version: 1.0
Content-Type: text/x-msnmsgr-datacast
ID: 1
# application/x-msnmsgrp2p
Peer to peer session context data.
Always has the header P2P-Dest, which is the user handle of the receiving user.
Since MSNP16, there is also the P2P-Src header, which is the user handle of the sending user.
Peer to peer version 1 messages use this format:
00 00 00 00 11 11 11 11 22 22 22 22 22 22 22 22
33 33 33 33 33 33 33 33 44 44 44 44 55 55 55 55
66 66 66 66 77 77 77 77 88 88 88 88 88 88 88 88
Where (values in little endian):
00s (32-bit) is the P2P session ID. Use0if one has not been established. Use0x00000040(64) if this is an ink message.11s (32-bit) is the message ID. Expected to be incremented for each message, following these rules:- Messages for the same data chunk may use the same ID.
- Messages can be sent out of order.
22s (64-bit) is the number of bytes to offset this message's data for in the P2P data.33s (64-bit) is the count of bytes for the P2P data.44s (32-bit) is the count of bytes currently being sent.55s (32-bit) are the P2P flags:0x2(decimal2): This is an acknowledgement message.0x4(decimal4): This is a send receipt request.
66s (32-bit) is the sequence ID, except in acknowledgements and send receipts, where it is the relevant message ID. For ink messages, use the message ID decremented by 1.77s (32-bit) is the sequence ID that contains the message ID that this message acknowledges. For non-acknowledgement messages, it is always0.88s (64-bit) is the total size of the sequence to acknowledge. For non-acknowledgement messages, it is always0.
The peer to peer message always ends with a 32-bit value (values in little endian):
0x00000000: The default.0x01000030: The message sent was (part of) a file transfer.0x03000000: The message sent was (part of) an ink message.0x08000000: The message sent was (part of) an unknown message type. (NOTE: Used for DDP moods.)
The Official Client will chunk messages every 1202 bytes.
You may chunk any size below the maximum size of bytes by setting the relevant values in the header, and 1202 bytes is the maximum size.
NOTE: The binary header and footer has been represented as hexadecimal.
MIME-Version: 1.0
Content-Type: application/x-msnmsgrp2p
P2P-Dest: example@hotmail.com
00 00 00 00 12 34 56 78 00 00 00 00 00 00 00 00
a5 04 00 00 00 00 00 00 a5 04 00 00 00 00 00 00
9a bc de f0 00 00 00 00 00 00 00 00 00 00 00 00
(actual body)
00 00 00 00
# MSNSLP bodies
These messages resemble those of the Session Initialization Protocol.
As an invitation, it will start with INVITE MSNMSGR:user-handle MSNSLP/1.0:
Where user-handle is the user handle.
As a response, it will start with MSNSLP/1.0 status-code status-message:
Where status-code and status-message are:
180:Ringing200:OK400:Bad Request401:Unauthorized403:Forbidden404:Not Found405:Not Allowed408:Timeout413:Too Large481:No Such Call486:Busy487:Request Terminated488:Unacceptable493:Undecipherable500:Internal Error501:Not Implemented505:Unsupported Version603:Decline606:Unacceptable
As a termination, it will start with BYE MSNMSGR:user-handle MSNSLP/1.0:
Where user-handle is the user handle.
Any of these messages contains the following eight headers:
To: The target's user handle in the format<msnmsgr:user-handle>.From: The sender's user handle in the format<msnmsgr:user-handle>.Via: Always in the format ofMSNSLP/1.0/TLP ;branch=branch-id, wherebranch-idis a GUID. Shared for the full sequence.CSeq: The current sequence ID. If this is the first message in the sequence, this is0.Call-ID: A GUID. Shared for the full sequence.Max-Forwards: The number of times this message may be forwarded. Usually0.Content-Type: The MIME type of the inner body.Content-Length: The byte length of the inner body.
NOTE: The terminating null byte has been transcribed as [0x00], and the Context has been split across multiple lines.
INVITE MSNMSGR:anotheruser@hotmail.com MSNSLP/1.0
To: <msnmsgr:anotheruser@hotmail.com>
From: <msnmsgr:example@hotmail.com>
Via: MSNSLP/1.0/TLP ;branch={1C741604-1F35-446E-A50C-A97345A10452}
CSeq: 0
Call-ID: {2F22F5DD-3EFC-4576-8634-FAD287B8D733}
Max-Forwards: 0
Content-Type: application/x-msnmsgr-sessionreqbody
Content-Length: 327
EUF-GUID: {A4268EEC-FEC5-49E5-95C3-F126696BDBF6}
SessionID: 12345678
AppID: 1
Context: PG1zbm9iaiBDcmVhdG9yPSJleGFtcGxlQGhvdG1haWwuY29tIiBTaXplPSI4ODki
IFR5cGU9IjIiIExvY2F0aW9uPSJleGFtcGxlLnBuZyIgRnJpZW5kbHk9IkFBQT0iIFNIQTFEP
SJML1Evem0yUWpJU0ZLdnYySEJteExyOWxveDg9IiBTSEExQz0iTUEwa3RZNFZTdFhaMGFtWD
V1UXlvc1VUT2FrPSIvPgA=
[0x00]
NOTE: The terminating null byte has been transcribed as [0x00].
MSNSLP/1.0 200 OK
To: <msnmsgr:example@hotmail.com>
From: <msnmsgr:anotheruser@hotmail.com>
Via: MSNSLP/1.0/TLP ;branch={1C741604-1F35-446E-A50C-A97345A10452}
CSeq: 1
Call-ID: {2F22F5DD-3EFC-4576-8634-FAD287B8D733}
Max-Forwards: 0
Content-Type: application/x-msnmsgr-sessionreqbody
Content-Length: 25
SessionID: 12345678
[0x00]
NOTE: As the body of this type is all special characters, the entire body has been transcribed as hexadecimal.
BYE MSNMSGR:anotheruser@hotmail.com MSNSLP/1.0
To: <msnmsgr:anotheruser@hotmail.com>
From: <msnmsgr:example@hotmail.com>
Via: MSNSLP/1.0/TLP ;branch={9B973CE6-BCA7-4D46-A995-C684E6CB7776}
CSeq: 0
Call-ID: {95E7E9D3-BA3B-46D7-80FD-BB03C9FAB349}
Max-Forwards: 0
Content-Type: application/x-msnmsgr-sessionclosebody
Content-Length: 3
0d 0a 00
# application/x-msnmsgr-sessionreqbody
A session request.
This type has up to four headers:
EUF-GUID: Only seen in invitations. The unique type GUID that sets the type of data that will be sent:{A4268EEC-FEC5-49E5-95C3-F126696BDBF6}: An<msnobj>-based transfer.{6A13AF9C-5308-4F35-923A-67E8DDA40C2F}: P4 application.{5D3E02AB-6190-11D3-BBBB-00C04F795683}: File transfer.{E073B06B-636E-45B7-ACA4-6D4B5978C93C}: An<msnobj>-based transfer for winks.{4BD96FC0-AB17-4425-A14A-439185962DC8}: Viewing a webcam stream.{1C9AA97E-9C05-4583-A3BD-908A196F1E92}: Sending a webcam stream.{534142D5-1F2A-431F-A60C-B0CF723FDF7D}: Shared folder? (TODO: confirm){41D3E74E-04A2-4B37-96F8-08ACDB610874}: Photo sharing? (TODO: confirm)
SessionID: A numerical field that specifies what session ID to use for the rest of the session.AppID: Only seen in invitations. The numerical application ID that sets the subtype of theEUF-GUID.Context: Base64 data. Format of such depends on various factors, such as theAppIDandEUF-GUID:- TODO: put context descriptions here!
NOTE: The Context has been split across multiple lines.
EUF-GUID: {A4268EEC-FEC5-49E5-95C3-F126696BDBF6}
SessionID: 12345678
AppID: 1
Context: PG1zbm9iaiBDcmVhdG9yPSJleGFtcGxlQGhvdG1haWwuY29tIiBTaXplPSI4ODki
IFR5cGU9IjIiIExvY2F0aW9uPSJleGFtcGxlLnBuZyIgRnJpZW5kbHk9IkFBQT0iIFNIQTFEP
SJML1Evem0yUWpJU0ZLdnYySEJteExyOWxveDg9IiBTSEExQz0iTUEwa3RZNFZTdFhaMGFtWD
V1UXlvc1VUT2FrPSIvPgA=
# application/x-msnmsgr-sessionclosebody
An end of session notification. Always comes from a BYE message.
NOTE: As the body of this type is all special characters, the entire body has been transcribed as hexadecimal.
0d 0a 00
# application/x-msnmsgr-transreqbody
A transfer request.
This body has nine headers:
Bridges: A list of supported bridges:TRUDPv1: Trivial UDP bridge, version 1.TCPv1: TCP bridge, version 1.SBBridge: Switchboard bridge.TURNv1: TURN (Traversal Using Relays around NAT) bridge, version 1.
NetID: A decimal ID (TODO: What is this used for?)Conn-Type: The network condition:Unknown-Connect: Undetermined.Direct-Connect: Direct connection is possible.UPnP-NAT: Under NAT, but Universal Plug and Play is avaliable.Unknown-NAT: NAT, but with unknown symptoms.IP-Restrict-NAT: Incoming connections are allowed on any port after an outbound connection is established..Port-Restrict-NAT: Incoming connections are allowed only on the same port after an outbound connection is established, and can be reused.Symmetric-NAT: Incoming connections are allowed only on the same port after an outbound connection is established, but they can not be reused.Firewall: Inbound connections are not allowed.ISALike: You seem to be under a Internet Security and Acceleration server.
TCP-Conn-Type: The network condition for a TCP bridge, only sent since Client Version 8.1:Unknown-Connect: Undetermined.Direct-Connect: Direct connection is possible.UPnP-NAT: Under NAT, but Universal Plug and Play is avaliable.Unknown-NAT: NAT, but with unknown symptoms.IP-Restrict-NAT: Incoming connections are allowed on any port after an outbound connection is established..Port-Restrict-NAT: Incoming connections are allowed only on the same port after an outbound connection is established, and can be reused.Symmetric-NAT: Incoming connections are allowed only on the same port after an outbound connection is established, but they can not be reused.Firewall: Inbound connections are not allowed.ISALike: You seem to be under a Internet Security and Acceleration server.
UPnPNat: Iftrue, the user has a UPnP-compatible gateway.ICF: Iftrue, this user is running a software firewall.IPv6-global: An IPv6 address that is assumed to be publically avaliable.Hashed-Nonce: A GUID. Note that it doesn't have to be a valid GUID, just the length of one. TODO: How do you generate this?Nonce: A GUID. Should be unique every time. Obsoleted byHashed-Nonce, but still supported.
Bridges: TRUDPv1 TCPv1
NetID: 0
Conn-Type:
UPnPNat: false
ICF: true
IPv6-global: 1111:2222:3333:4444:5555:6666:7777:8888
Hashed-Nonce: {6DF18B56-8FD1-3716-E9B9-A8F396E01250}
# application/x-msnmsgr-transrespbody
A transfer response.
This body has many headers:
Bridge: The transport to use:TRUDPv1: Trivial UDP bridge, version 1.TCPv1: TCP bridge, version 1.SBBridge: Switchboard bridge.TURNv1: TURN (Traversal Using Relays around NAT) bridge, version 1.
Hashed-Nonce: A GUID. Note that it doesn't have to be a valid GUID, just the length of one. TODO: How do you generate this?Nonce: A GUID. Should be unique every time. Obsoleted byHashed-Nonce, but still supported.Listening: If this istrue, the invitee should connect to the receiver.IPv4External-Addrs: A list of IPv4 addresses that are publically accessible.IPv4External-Port: The port to use for public IPv4 addresses.IPv4Internal-Addrs: A list of private IPv4 addresses.IPv4Internal-Port: The port to use for private IPv4 addresses.IPv6-Addrs: A list of IPv6 addresses.IPv6-Port: The port to use for IPv6 addresses.SessionID: The associated session ID with this transfer.Conn-Type: The network condition, may not always be sent:Unknown-Connect: Undetermined.Direct-Connect: Direct connection is possible.UPnP-NAT: Under NAT, but Universal Plug and Play is avaliable.Unknown-NAT: NAT, but with unknown symptoms.IP-Restrict-NAT: Incoming connections are allowed on any port after an outbound connection is established..Port-Restrict-NAT: Incoming connections are allowed only on the same port after an outbound connection is established, and can be reused.Symmetric-NAT: Incoming connections are allowed only on the same port after an outbound connection is established, but they can not be reused.Firewall: Inbound connections are not allowed.ISALike: You seem to be under a Internet Security and Acceleration server.
TCP-Conn-Type: The network condition for a TCP bridge, and may be sent since Client Version 8.1:Unknown-Connect: Undetermined.Direct-Connect: Direct connection is possible.UPnP-NAT: Under NAT, but Universal Plug and Play is avaliable.Unknown-NAT: NAT, but with unknown symptoms.IP-Restrict-NAT: Incoming connections are allowed on any port after an outbound connection is established..Port-Restrict-NAT: Incoming connections are allowed only on the same port after an outbound connection is established, and can be reused.Symmetric-NAT: Incoming connections are allowed only on the same port after an outbound connection is established, but they can not be reused.Firewall: Inbound connections are not allowed.ISALike: You seem to be under a Internet Security and Acceleration server.
Bridge: TCPv1
Listening: true
Hashed-Nonce: {6DF18B56-8FD1-3716-E9B9-A8F396E01250}
IPv4External-Addrs: 11.22.33.44
IPv4External-Port: 5555
IPv4Internal-Addrs: 192.168.1.111
IPv4Internal-Port: 5555
IPv6-Addrs: 1111:2222:3333:4444:5555:6666:7777:8888
IPv6-Port: 5559
# application/x-msnmsgr-transdestaddrupdate
A transfer destination address update.
This body has three headers:
IPv4ExternalAddrsAndPorts: A list of publically accessible IPv4 addresses and respective ports to use.IPv4InternalAddrsAndPorts: A list of private IPv4 addresses and respective ports to use.IPv4External-Connecting-Port-End-Range: The highest port number that is acceptable to be used for the current transfer.
IPv4ExternalAddrsAndPorts: 11.22.33.44:5555
IPv4InternalAddrsAndPorts: 192.168.1.111:5556
IPv4External-Connecting-Port-End-Range: 5558
# application/x-msnmsgr-transudpswitch
A transfer UDP switch.
This body has three headers:
IPv6AddrsAndPorts: A list of IPv6 addresses and respective ports to use. Uses#to seperate IPv6 addresses and ports.IPv4ExternalAddrsAndPorts: A list of publically accessible IPv4 addresses and respective ports to use.IPv4InternalAddrsAndPorts: A list of private IPv4 addresses and respective ports to use.
IPv6AddrsAndPorts: 1111:2222:3333:4444:5555:6666:7777:8888#5556
IPv4ExternalAddrsAndPorts: 11.22.33.44:5555
IPv4InternalAddrsAndPorts: 192.168.1.111:5555
# other P2P bodies
TODO: Write any of these. Highly volatile to parameters.
These three headers show up on many bodies when SChannel is usable:
SessionID: The session ID. Used if the client supports SChannel.Capabilities-Flags: This is usually1if the client supports SChannel.SChannelState: The SChannel state. Only sent if the client supports SChannel.
# Various other headers
A list of various other headers, which may be valid for multiple types.
# Chunking
If the feature is enabled, you may get messages with the following headers:
Message-ID: The GUID of this message.Chunks: The number of chunks that will be sent. The number includes this message.Chunk: The number of this chunk. Indexed from0, but not included in message 0 since it has theChunksheader.
MIME-Version: 1.0
Content-Type: image/gif
Message-ID: {DEE6A95E-1BAE-4123-807E-E49DC41F9957}
Chunks: 2
base64:...
MIME-Version: 1.0
Content-Type: image/gif
Message-ID: {DEE6A95E-1BAE-4123-807E-E49DC41F9957}
Chunk: 1
...
# Special headers
If the message was sent by an action not done by the user, any one of these headers may be set:
PlugIn-Context: If1, this message was sent by a plugin.P4-Context: If set, replace the sender of the message with the contents of this header.FromSendTextAPI: Iftrue, this message was sent using theSendTextAPI.