Protocols/MSNP/Commands

From NINA Wiki
Jump to navigation Jump to search
MSNP Protocol
IntroductionTermsClients
Reference
Error ListCommandsRelaying Party SuiteSpotlife
Services
XMPPHTTP GatewayTabsActivities
Documentation
Development ToolsMSNP Grid
PolygamyURLs used by MSN
Documents
Protocol Versions
Version 21
Version 18
Version 16
Version 15
Version 14
Version 13
Version 12
Version 11
Version 9
Version 8
MSNC
IntroductionP2PObject DescriptorDisplay PicturesFile Transfer
Scenarios
Microsoft Messenger for Mac
MSNP on WebTV (MSNTV)

This page lists all commands employed by MSNP, for a table showing command support over different versions, see the command table article.

What are Commands?

Everything sent between the client and the server is in the form of a command. Commands are represented with a three letter, all-caps, command code. All normal commands have a transaction ID (explained below) and end with a newline (also explained below). Commands sent by the client will generally cause the server to respond with one or more commands.

There are four special types of commands which behave slightly differently than normal commands. Payload Commands span over multiple lines. Error commands have numbers instead of letters in their command code. Asynchronous commands are sent by the server without the client explicitly requesting them, and do not contain transaction IDs. Finally, the PNG command and some SYN responses don't contain transaction IDs.

Newlines

Every command ends with a newline with the exception of a Payload Command. The official client always ends commands with \r\n and the server always ends commands with \r\n. It is recommended that you do this too.

However, the server will accept commands ending with just \n, but not just \r. If you are looking to save as much bandwidth as possible, go ahead and use \n, and there shouldn't be any problems unless MSN changes their server code.

Parameters

Parameters exist to provide additional information with each command. Most commands have at least one parameter. Each parameter is separated by a space. Some commands also have a transaction ID immediately after the command and before the parameters. For the purposes of this documentation, the TrID does not count as a parameter. The following command has one parameter:

FLN example@passport.com\r\n

FLN is the command, example@passport.com is the parameter, and \r\n is the newline.

Transaction IDs

Transaction IDs, abbreviated as TrIDs, are used to match a client command with a server response. Commands sent by the client are required to contain a TrID, and commands from the server sent in direct response to that command will contain the same TrID (with the exceptions noted above). In most cases, there will be just one response to each client command.

Every TrID is a number between 0 and 4294967295 (2 to the power 32, minus 1). Even though completely legal, it is advisable not to use 0 as a TrID because some Asynchronous commands use 0 as the TrID and it may cause confusion. The TrID always comes right after the three letter (or three digit, in the case of errors) command code, and they are separated by a space. If the command has parameters, the parameters will follow the TrID and they will be separated by another space. Otherwise, there will be no space after the TrID. Below is an example of sending the VER command with a TrID of 15 and receiving the response from the server.

C: VER 15 MSNP8 FOO CVR0 BAR\r\n
S: VER 15 MSNP8 CVR0\r\n

The server does not make any changes based on your TrID; it only responds using the same TrID you sent it. If your TrID is greater than 4294967295, the server will behave unpredictably. If you send a TrID that is not a positive integer, the server will immediately disconnect you. If you repeat the same TrID in multiple commands, the server will not do anything differently, but it will be more difficult for the client to track responses.

The official client always increments the TrID by one after sending each command. As long as you stay in the correct range and don't repeat TrIDs, it doesn't make much of a difference. Keeping the number low will save a small amount of bandwidth - probably not more than 5% of your total bandwidth for the session. Using random numbers will increase your processor use and not increase your security at all.

Error Commands

An error is a special type of command sent by the server in response to a client command which it couldn't obey or couldn't understand. Errors follow all of the normal rules of commands, except that the three-character command codes are always three-digit numbers. A detailed list of errors can be found in the Error List page.

If something goes wrong, an error will be sent in place of the expected command. For example, if a client sends an ADD command, it should normally receive another ADD command back from the server. However, if the client specifies a nonexistent account name as a parameter, the server will respond with error 201 instead of the ADD command.

Clients never send error codes to the server. The server never sends error codes that aren't in response to any particular client command.

Payload Commands

Most messages are just one line of data, ending with a newline. Payload commands have a chunk of data following the newline. The length of this data (in bytes) is specified in the last parameter of the command. The payload commands in MSNP8 are QRY, PAG, NOT and (most importantly) MSG. Here is an example of a payload command:

QRY 1049 msmsgs@msnmsgr.com 32\r\n
8f2f5a91b72102cd28355e9fc9000d6e (no newline)

Asynchronous Commands

Asynchronous commands are commands sent by the server, but not in response to any command sent by the client. Because of their nature, they have no assigned TrID. Some asynchronous commands have no TrID, and just have the parameter immediately after the command code. Some of these commands are NLN, FLN, and BPR.

Other asynchronous commands always have a TrID of zero. Some of these commands are ADD and REM. The reason that these commands still have TrIDs is because they are also used as a client command with a server response. Only in special cases, like where a principal is added to the reverse list, does the server send the command as an asynchronous command with a TrID of zero.

Asynchronous commands can be sent at any legal place in the protocol - even between a block of related replies such as in between two ILNs.

Command Order

Usually, replies to commands will come in the order that you sent the commands. But this is not always the case. Sometimes, you may send commands in the order of 1, 2, 3, and the server will respond to them in the order of 2, 3, 1. This is why TrIDs are very useful.

Some commands have multiple responses from the server. These responses contain the same TrID as the original command (except SYN responses). A command that can have multiple responses is CHG.

Unfortunately, there are no real rules on the order of unrelated commands. For example, a client can receive an ILN in the middle of a list of BPRs. If you examine the server behaviour enough, you can start to make rules, but Microsoft often changes the server implementation and you would have to start all over. It's best for a client to just expect anything to happen...

Command List

Dispatch Server

These commands are sent/received when connecting to the dispatch server or the notification server. For more detail, see Protocols/MSNP/Notification/Authentication

  • VER - Protocol version
  • CVR - Sends version information
  • INF - List supported authentication systems, now obsolete
  • USR - Authentication command
  • XFR - Redirection to Notification Server

Notification Server

These commands are sent/recieved after logging in through a notification server. For more details, see: Protocols/MSNP/MSNP8/Presence, Protocols/MSNP/MSNP8/Challenges, Protocols/MSNP/MSNP8/Getting Details, Protocols/MSNP/MSNP8/Setting Details and Protocols/MSNP/MSNP8/Messages.

Initial synchronisation commands

since MSNP8 or earlier

  • BLP - Initial settings download (deprecated as of MSNP13)
  • BPR - Initial settings download (deprecated as of MSNP13)
  • GTC - Initial contact list/settings download (deprecated as of MSNP13)
  • ILN - Initial contact presence notification
  • LSG - Initial group listing (deprecated as of MSNP13)
  • LST - Initial contact listing (deprecated as of MSNP13)
  • SYN - Begin contact list synchronization (deprecated as of MSNP13)
  • MSG - Initial profile download
  • PRP - Initial mobile settings / display name download

Standard send/receive commands

since MSNP8 or earlier

  • ADD - Add user to a (contact) list (deprecated as of MSNP11)
  • ADG - Create groups
  • CHG - Change client's online status
  • IMS - Block or allow new switchboard sessions
  • IPG - Incoming page
  • QRY - Response to CHL by client
  • OUT - Gracefully logout
  • PAG - Page someone on MSN mobile device
  • PNG - Client ping
  • QNG - Server response to PNG
  • REA - Change display name (deprecated as of MSNP11)
  • REM - Remove contact (deprecated as of MSNP13)
  • REG - Rename group (deprecated as of MSNP13)
  • RMG - Remove group (deprecated as of MSNP13)
  • SND - Sends a localized chat invitation to an email address
  • SDC - Sends an email invitation to a Passport member with an optional message
  • URL - Retrieve an URL for a specifed service
  • XFR - Requests a new switchboard session

since MSNP11

  • ADC - Add user to a (contact) list (deprecated as of MSNP13)
  • SBS - Unknown
  • SBP - Update buddy's details

since MSNP12

  • LKP - Verifies whether a phone number is valid (for messaging in the MSN system)

since MSNP13

  • ADL - Add users to your contact lists or initial contact list dump
  • FQY - Federated query; Query contact's network types
  • GCF - Get config; Request a configuration file
  • RML - Remove contact
  • UUN - Send sharing invitation or reply to invitation

since MSNP14

  • UUM - to update...

Asynchronous commands

since MSNP8 or earlier

  • CHL - Client challenge (see Protocols/MSNP/MSNP8/Challenges)
  • FLN - Buddy signed off
  • NLN - Buddy signed on/changed presence/changed name
  • NOT - Incoming notification (probably connected with MSN Spaces)
  • RNG - Invitation to a switchboard session

since MSNP11

  • UBX - Informs you with buddy's personal message or current media

since MSNP13

  • RFS - Requests contact list from client
  • UBN - Incoming sharing invitation or reply to invitation

since MSNP14

  • UBM - to update...

Switchboard

These commands are sent/received after connecting to a switchboard session, and are work only on the same session.

  • ANS - Answer an invitation request received from the notification server (join a switchboard session upon client got RNG'd)
  • IRO - Initial Roster
  • USR - Authenticate yourself after requesting SB
  • CAL - Invite a user
  • JOI - Participant has joined
  • MSG - Send / receive messages
  • BYE - Participant has left
  • OUT - Gracefully leave the session