# Table of contents:
- Introduction
- Client/Request
- Server/Response
- Examples
- Known changes
# Introduction
XFR is a command introduced with MSNP2.
It is a Dispatch Server and Notification Server command, without either a request or response payload.
It tells the client what server to connect to for the request.
# Client/Request
XFR TrID server-type
Where server-type is either SB (for a Switchboard Server), or NS (for a new Notification Server).
# Server/Response
XFR TrID server-type address:port {...}
Where server-type is either SB (for Switchboard), or NS (for a Notification Server).
Where address:port is the server you have requested or being referred to is.
If this is set to 0, proceed to ignore the server-type parameter
and restart the login process on the current server from VER.
# XFR NS
XFR TrID NS address:port {0|U} {current-server|D}
In MSNP3 and above until MSNP13,
0 is always set to 0.
In MSNP7 and above until MSNP13,
current-server is the current server you are connected to.
In MSNP13 and higher,
the 0 is replaced with a constant U,
and the current-server is replaced with a constant D.
# XFR SB
XFR TrID SB address:port authentication-method authentication-parameter {U} {domain} {direct-connect}
Where authentication-method is almost always CKI.
CTP and MD5 are also allowed values until MSNP11.CKI is not avaliable in Beta 2. It is recommended you use MD5 when authenticating these clients.
Where authentication-parameter depends on the specified authentication-method:
- CTP: Omit this parameter.
- MD5: Salt to prepend password with for hash.
CKI: The authentication cookie.
Where U is always set to U. Since MSNP13.
No use documented.
Where domain is always set to messenger.msn.com. Since MSNP13.
No use documented.
Where direct-connect is set to one of these two values, Since MSNP14:
0: Thisaddress:portcan only be accessed only via the HTTP Gateway.1: Thisaddress:portcan be connected to via TCP as well as the HTTP Gateway.
# Examples
# Before rework
# Client requests a new Switchboard session
C: XFR 1 SB
S: XFR 1 SB 10.0.1.200:1865 CKI 123456789.123456789.123456789
# Client requests a new Notification server
Only used as-is in Beta 2 as the first command sent to a Dispatch Server.
C: XFR 2 NS
S: XFR 2 NS 10.0.0.5:1863
Client disconnects from server.
Client opens a connection to 10.0.0.5:1863.
# Client referred from Dispatch Server
# Very Old
Only in MSNP2.
C: USR 3 MD5 I example@hotmail.com
S: XFR 3 NS 10.0.0.5:1863
Client disconnects from server.
Client opens a connection to 10.0.0.5:1863.
# Classic
C: USR 4 MD5 I example@hotmail.com
S: XFR 4 NS 10.0.0.5:1863 0
Client disconnects from server.
Client opens a connection to 10.0.0.5:1863.
# Modern
C: USR 5 MD5 I example@hotmail.com
S: XFR 5 NS 10.0.0.5:1863 0 10.0.0.1:1863
Client disconnects from server.
Client opens a connection to 10.0.0.5:1863.
# After rework
Since MSNP13.
# Client requests a new Switchboard session
# Without direct connect parameter
Only in MSNP13.
C: XFR 6 SB
S: XFR 6 SB 10.0.1.200:1865 CKI 123456789.123456789.123456789 U messenger.msn.com
# With direct connect parameter
Since MSNP14.
C: XFR 7 SB
S: XFR 7 SB 10.0.1.200:1865 CKI 123456789.123456789.123456789 U messenger.msn.com 1
# Client referred from Dispatch Server
C: USR 8 TWN I example@hotmail.com
S: XFR 8 NS 10.0.0.5:1863 U D
# Forced soft reset
Applies for any protocol version.
S: XFR 0 NS 0
C: VER 9 MSNP7 MSNP6 MSNP5 MSNP4
# You can not be hidden or semi-offline while requesting a new Switchboard session
Applies for any protocol version.
C: XFR 10 SB
S: 913 10
# Known changes
- MSNP3: Added a new parameter that is always
0to XFR NS. - MSNP7: Added a new parameter that is the current server you are communicating with to XFR NS.
- MSNP11: Removed support for non-CKI-based authentication methods in XFR SB.
- MSNP13: Replaced
0and the current server parameter withUandDrespectively in XFR NS, and also added two parameters to XFR SB, one that is alwaysU, and one that is a domain name, which is alwaysmessenger.msn.com. - MSNP14: Added a new parameter that is either
0or1to XFR SB to denote whenever the client should directly connect to the address, or use the HTTP Gateway to connect instead.