ae-protocol.md: Whitespace
[fuse-aexplorer.git] / ae-protocol.md
index 176ef9d71ffecaa27b90e04f2464262d3b7360af..bf06a0762d7c4726aaa4a1b8cde11953e5c935f0 100644 (file)
@@ -4,14 +4,30 @@ Overview
 The AE protocol works by exchanging messages between the Amiga and the Client (e.g. an IBM PC).
 
 Each message consists of a header and optionally payload data. Both parts carry CRC32 checksums
-to ensure data integrity. 
+to ensure data integrity.
 
 Message header
 --------------
 
 | Bytes          | Content                      |
 | -------------- | ---------------------------- |
-| TODO           |                              |
+| 2              | Msg (see below)              |
+| 2              | Payload length               |
+| 4              | Sequence                     |
+| 4              | CRC32                        |
+
+Payload (if any)
+----------------
+
+| Bytes          | Content                      |
+| -------------- | ---------------------------- |
+| n              | Payload                      |
+| 4              | CRC32                        |
+
+Each message is acknowledged by the receiving side by a 4-Byte "PkOk" response if the checksum matches, "PkRs" otherwise.
+
+Recovery from checksum errors: on "PkRs" non-ack, the sending side re-sends the whole message until "PkOk" is received.
+FIXME: is this correct?
 
 Message types
 =============
@@ -30,7 +46,7 @@ Message types
 | 0x0a | MSG_ACK_CLOSE     | Amiga        | Close response                                            |
 | 0x0b |                   | Amiga        | Format response?                                          |
 |      |                   |              |                                                           |
-| 0x64 |                   | Client       | List directory                                            |
+| 0x64 | MSG_DIR           | Client       | List directory                                            |
 | 0x65 | MSG_FILE_SEND     | Client       | File read                                                 |
 | 0x66 | MSG_FILE_RECV     | Client       | File/folder write                                         |
 | 0x67 |                   | Client       | File/folder delete (recursively)                          |
@@ -46,20 +62,98 @@ Message types
 Message details
 ===============
 
-64 - List a directory
-----------------------
+0x00 MSG_NEXT_PART - Ask for next block
+---------------------------------------
 
-### TODO ###
+Payload: none
 
+Expected repsonse: MSG_BLOCK or MSG_EOF
 
-65 - Read a file
------------------
 
-### TODO ###
+0x03 MSG_MPARTH - Multipart header
+----------------------------------
+
+Payload:
+
+| Bytes          | Content                      |
+| -------------- | ---------------------------- |
+| 4              | length                       |
+
+Expected response: 0x00 MSG_NEXT_PART
+
+0x04 MSG_EOF
+------------
+
+Payload: none
+
+Expected response: 0x6d MSG_FILE_CLOSE
+
+0x05 MSG_BLOCK - Next data block
+--------------------------------
+
+Payload:
+
+| Bytes          | Content                      |
+| -------------- | ---------------------------- |
+| 4              | offset                       |
+| n              | data                         |
+
+Expected response: 0x00 MSG_NEXT_PART
+
+0x64 MSG_DIR - List a directory (Client -> Amiga)
+-------------------------------------------------
+
+Payload:
+
+| Bytes          | Content                      |
+| -------------- | ---------------------------- |
+| n              | path                         |
+| 1              | 0                            |
+| 1              | 1 FIXME ??                   |
+
+Expected response: 0x03 MSG_MPARTH if path exists, MSG_EOF otherwise
+
+Multipart data will be polled in chunks using MSG_NEXT_PART. This data is structured as follows:
+
+| Bytes          | Content                      |
+| -------------- | ---------------------------- |
+| 4              | number of entries            |
+| n              | dir entries                  |
+
+Each dir entry is structured as follows:
+
+| Bytes          | Content                      |
+| -------------- | ---------------------------- |
+| 4              | len (29+n+m)                 |
+| 4              | size                         |
+| 4              | used                         |
+| 2              | type (0: file, 0x8000: dir)  |
+| 2              | attributes                   |
+|                |   S: 0x40                    |
+|                |   P: 0x20                    |
+|                |   A: 0x10                    |
+|                |   R: 0x08                    |
+|                |   W: 0x04                    |
+|                |   E: 0x02                    |
+|                |   D: 0x01                    |
+| 4              | date                         |
+| 4              | time                         |
+| 4              | ctime                        |
+| 1              | type2 FIXME: ???             |
+| n              | name\0                       |
+| m              | comment\0                    |
+
+
+0x65 MSG_FILE_SEND - Read a file
+--------------------------------
+
+Payload: filename\0
+
+Expected response: 0x08 MSG_EXISTS if file cannot be opened, 0x03 MSG_MPARTH otherwise
 
 
-0x66 MSG_FILE_RECV - Write a file (PC -> Amiga)
------------------------------------------------
+0x66 MSG_FILE_RECV - Write a file (Client -> Amiga)
+---------------------------------------------------
 
 Payload:
 
@@ -68,7 +162,14 @@ Payload:
 | 4              | header size                  |
 | 4              | file size                    |
 | 4              | FIXME ??                     |
-| 4              | Attributes FIXME: encoding ? |
+| 4              | attributes                   |
+|                |   S: 0x40                    |
+|                |   P: 0x20                    |
+|                |   A: 0x10                    |
+|                |   R: 0x08                    |
+|                |   W: 0x04                    |
+|                |   E: 0x02                    |
+|                |   D: 0x01                    |
 | 4              | date (hours since 1/1/78)    |
 | 4              | time (mins since midnight)   |
 | 4              | ctime                        |