Line 1: |
Line 1: |
− | Packets' structure: | + | == Packets format == |
| | | |
− | * '''PUSH''' packet:
| + | Packets are tarball files with {{Code|.packet}} suffix. |
− | :* {{Code|type}}: {{Code|push}}
| |
− | :* {{Code|src}}: sender's identity to push from
| |
− | :* {{Code|[dst]}}: receiver's identity to push to, optional for packets from master
| |
− | :* {{Code|sequence}}: Sequence associated with packet's payload
| |
| | | |
− | * '''ACK''' packet: | + | On logic level, every packet consists of: |
| + | |
| + | * one header, a dictionary of key-value pairs; |
| + | * records, a dictionary of key-value pairs and optional data depending on record type. |
| + | |
| + | == Header == |
| + | |
| + | Header is being stored in JSON notation in {{Code|/header}} file in packet tarball. |
| + | |
| + | * {{Code|src}}, sender's GUID |
| + | * {{Code|dst}}, optional destination GUID |
| + | * {{Code|filename}}, suggested file name for packet file, it is assumed to be unique |
| + | |
| + | == Record types == |
| + | |
| + | Push changes of Sugar Network resource's properties. |
| + | :* {{Code|cmd: sn_push}}; |
| + | :* {{Code|content_type: records}}; |
| + | :* {{Code|document}}, Sugar Network resource to push diff to; |
| + | :* {{Code|guid}}, document GUID to push diff for; |
| + | :* {{Code|diff}}, dictionary of {{Code|<prop_name>: {"value": <value>, "mtime": <mtime>}}} with changed property values. |
| + | |
| + | '''ACK''' packet: |
| :* {{Code|type}}: {{Code|ack}} | | :* {{Code|type}}: {{Code|ack}} |
| :* {{Code|src}}: master's identity | | :* {{Code|src}}: master's identity |
Line 14: |
Line 32: |
| :* {{Code|pull_sequence}}: Sequence after merging original PUSH packet | | :* {{Code|pull_sequence}}: Sequence after merging original PUSH packet |
| | | |
− | * '''PULL''' packet: | + | Pull Sugar Network data. |
− | :* {{Code|type}}: {{Code|pull}} | + | :* {{Code|cmd: sn_pull}}; |
− | :* {{Code|src}}: sender's identity to pull to | + | :* {{Code|sequence}}: sequence to pull. |
− | :* {{Code|dst}}: receiver's identity to pull from | + | |
− | :* {{Code|sequence}}: Sequence to pull for | + | Pull files from shared directory. |
| + | :* {{Code|cmd: files_pull}}; |
| + | :* {{Code|directory}}, synchronized directory to pull; |
| + | :* {{Code|sequence}}, sequence to pull. |
| + | |
| + | Push a file from shared directory. |
| + | :* {{Code|cmd: files_push}}; |
| + | :* {{Code|directory}}, synchronized directory; |
| + | :* {{Code|path}}, pushed file path relative to {{Code|directory}}; |
| + | |
| + | Push deleted file from shared directory. |
| + | :* {{Code|cmd: files_delete}}; |
| + | :* {{Code|directory}}, synchronized directory; |
| + | :* {{Code|path}}, pushed file path relative to {{Code|directory}}; |
| + | |
| + | Commit recently pushed shared files. |
| + | :* {{Code|cmd: files_commit}}; |
| + | :* {{Code|directory}}, synchronized directory; |
| + | :* {{Code|sequence}}, pushed sequence. |
| + | |
| + | Push usage statistics. |
| + | :* {{Code|cmd: stats_push}}; |
| + | :* {{Code|user}}, user GUID; |
| + | :* {{Code|db}}, RRD dn name; |
| + | :* {{Code|sequence}}, pushed sequence. |
| + | |
| + | ACK pushed usage statistics. |
| + | :* {{Code|cmd: stats_ack}}; |
| + | :* {{Code|sequence}}, pushed sequence as {{Code|{user: {db: sequence}}}} dictionary. |