From 3680a6bbbb6c2ae26d5c9bf361bc2feea362b553 Mon Sep 17 00:00:00 2001 From: Jonathan Ballet Date: Sun, 3 Jul 2011 15:05:04 +0200 Subject: doc/protocol: add some missing specifications --- doc/protocol.xml | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 127 insertions(+), 7 deletions(-) (limited to 'doc') diff --git a/doc/protocol.xml b/doc/protocol.xml index 3eb5aa93..0b4f0d17 100644 --- a/doc/protocol.xml +++ b/doc/protocol.xml @@ -8,18 +8,54 @@ General protocol syntax
- Requests + Protocol overview + + + The MPD command protocol exchanges line-based text records + between client and server over TCP. Once the client is + connected to the server, they conduct a conversation until the + client closes the connection. The conversation flow is always + initiated by the client. + + + + The client transmits a command sequence, terminated by the + newline character \n. The server will + respond with one or more lines, the last of which will be a + completion code. + - If arguments contain spaces, they should be surrounded by double quotation - marks. + When the client connects to the server, the server will answer + with the following line: + + OK MPD version + + where version is a version identifier such as + 0.12.2. This version identifier is the version of the protocol + spoken, not the real version of the daemon. (There is no way to + retrieve this real version identifier from the connection.) +
+ +
+ Requests COMMAND ARG + + If arguments contain spaces, they should be surrounded by double + quotation marks. + + + + Argument strings are separated from the command and any other + arguments by linear white-space (' ' or '\t'). + + All data between the client and the server is encoded in UTF-8. (Note: In UTF-8 all standard ansi characters, 0-127 are @@ -38,13 +74,97 @@ Responses - A command returns OK on completion - or ACK some error on failure. - These denote the end of command execution. + A command returns OK on completion or + ACK some error on failure. These + denote the end of command execution. + +
+ Failure responses + + + The nature of the error can be gleaned from the information + that follows the ACK. + ACK lines are of the form: + + ACK [error@command_listNum] {current_command} message_text\n + + These responses are generated by a call to + commandError. They contain four separate + terms. Let's look at each of them: + + + + + error: numeric value of one + of the ACK_ERROR constants defined + in ack.h. + + + + + command_listNum: + offset of the command that caused the error in a Command List. + An error will always cause a command list to terminate + at the command that causes the error. + + + + + current_command: + name of the command, in a Command List, + that was executing when the error occurred. + + + + + message_text: + some (hopefully) informative text that describes the + nature of the error. + + + + + + + foo + + An example might help. Consider the following sequence + sent from the client to the server. + + + command_list_begin + volume 86 + play 10240 + status + command_list_end + + + + + The server responds with: + + + ACK [50@1] {play} song doesn't exist: "10240" + + + + + This tells us that the play command, which was the + second in the list (the first or only command is + numbered 0), failed with error 50. The number 50 + translates to ACK_ERROR_NO_EXIST--the + song doesn't exist. This is reiterated by the message text + which also tells us which song doesn't exist. + + + +
-
+
Command lists -- cgit v1.2.3