| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | Technical Notes===============This document describes additional technical information of aria2. Theexpected audience is developers.Control File (\*.aria2) Format------------------------------The control file uses a binary format to store progress information ofa download. Here is the diagram for each field::     0                   1                   2                   3     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1    +---+-------+-------+-------------------------------------------+    |VER|  EXT  |INFO   |INFO HASH ...                              |    |(2)|  (4)  |HASH   | (INFO HASH LENGTH)                        |    |   |       |LENGTH |                                           |    |   |       |  (4)  |                                           |    +---+---+---+-------+---+---------------+-------+---------------+    |PIECE  |TOTAL LENGTH   |UPLOAD LENGTH  |BIT-   |BITFIELD ...   |    |LENGTH |     (8)       |     (8)       |FIELD  | (BITFIELD     |    |  (4)  |               |               |LENGTH |  LENGTH)      |    |       |               |               |  (4)  |               |    +-------+-------+-------+-------+-------+-------+---------------+    |NUM    |INDEX  |LENGTH |PIECE  |PIECE BITFIELD ...             |    |IN-    |  (4)  |  (4)  |BIT-   | (PIECE BITFIELD LENGTH)       |    |FLIGHT |       |       |FIELD  |                               |    |PIECE  |       |       |LENGTH |                               |    |  (4)  |       |       |  (4)  |                               |    +-------+-------+-------+-------+-------------------------------+            ^                                                       ^            |                                                       |            +-------------------------------------------------------+                    Repeated in (NUM IN-FLIGHT) PIECE times``VER`` (VERSION): 2 bytes   Should be either version 0(0x0000) or version 1(0x0001).  In   version 1, all multi-byte integers are saved in network byte   order(big endian).  In version 0, all multi-byte integers are saved   in host byte order.  aria2 1.4.1 can read both versions and only   writes a control file in version 1 format.  version 0 support will   be disappear in the future version.``EXT`` (EXTENSION): 4 bytes   If LSB is 1(i.e. ``EXT[3]&1 == 1``), aria2 checks whether the saved   !InfoHash and current downloading one are the same. If they are not   the same, an exception is thrown. This is called "infoHashCheck"   extension.``INFO HASH LENGTH``: 4 bytes   The length of InfoHash that is located after this field. If   "infoHashCheck" extension is enabled, if this value is 0, then an   exception is thrown. For http/ftp downloads, this value should be   0.``INFO HASH``: ``(INFO HASH LENGTH)`` bytes   BitTorrent InfoHash.``PIECE LENGTH``: 4 bytes   The length of the piece.``TOTAL LENGTH``: 8 bytes   The total length of the download.``UPLOAD LENGTH``: 8 bytes   The uploaded length in this download.``BITFIELD LENGTH``: 4 bytes   The length of bitfield.``BITFIELD``: ``(BITFIELD LENGTH)`` bytes   This is the bitfield which represents current download progress.``NUM IN-FLIGHT PIECE``: 4 bytes   The number of in-flight pieces. These piece is not marked   'downloaded' in the bitfield, but it has at least one downloaded   chunk.The following 4 fields are repeated in ``(NUM IN-FLIGHT PIECE)``times.``INDEX``: 4 bytes   The index of the piece.``LENGTH``: 4 bytes   The length of the piece.``PIECE BITFIELD LENGTH``: 4 bytes   The length of bitfield of this piece.``PIECE BITFIELD``: ``(PIECE BITFIELD LENGTH)`` bytes   The bitfield of this piece. The each bit represents 16KiB chunk.DHT routing table file format-----------------------------aria2 saves IPv4 DHT routing table in ``${HOME}/.aria2/dht.dat`` andIPv6 DHT routing table in ``${HOME}/.aria2/dht6.dat`` by default.``dht.dat`` and ``dht6.dat`` files use same binary encoding and havefollowing fields. All multi byte integers are in network byteorder. ``RSV`` (RESERVED) fields are reserved for future use. For nowthey should be all zeros::     0                   1                   2                   3     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1    +---+-+---+-----+---------------+---------------+---------------+    |MGC|F|VER| RSV |     MTIME     |     RSV       |LOCAL NODE ID  :    |(2)|M|(2)| (3) |      (8)      |     (8)       |      (20)     :    |   |T|   |     |               |               |               :    +---+-+---+-----+-------+-------+-------+-------+---------------+    :LOCAL NODE ID          |  RSV  |  NUM  |  RSV  |    :  (continued)          |  (4)  |  NODE |  (4)  |    :                       |       |  (4)  |       |    +-+-------------+-------+-------+-+-----+-------+---------------+    |P|     RSV     |COMPACT PEER INFO|            RSV              | <-+    |L|     (7)     |     (PLEN)      |         (24 - PLEN)         |   |    |E|             |                 |                             |   |    |N|             |                 |                             |   |    +-+-------------+-----------------+-----+-------+---------------+   |    |            NODE ID                    |  RSV  |                   |    |             (20)                      |  (4)  | <-----------------+    +---------------------------------------+-------+   Repeated in                                                         (NUM NODE) times.``MGC`` (MAGIC): 2 bytes   It must be ``0xa1 0xa2``.``FMT`` (FORMAT ID): 1 byte   The format ID should be ``0x02``.``VER`` (VERSION): 2 bytes   The version number should be ``0x00 0x03``.``MTIME``: 8 bytes   This is the time when aria2 saved the file.  The value is the time   since the Epoch(1970/1/1 00:00:00) in 64 bits integer.``LOCALNODE ID``: 20 bytes   Node ID of the client.``NUM NODE``: 4 bytes   The number of nodes the routing table has. ``NUM NODE`` node   information follows.The data of ``NUM NODE`` node will follow.  The node information arestored in the following fields.  They are repeated in ``NUM NODE``times.``PLEN`` (COMPACT PEER INFO LENGTH): 1 byte   The length of compact peer info. For IPv4 DHT, it must be 6. For   IPv6 DHT, it must be 18.``COMPACT PEER INFO``: ``(PLEN)`` bytes   The address and port of peer in compact peer format.``NODE ID``: 20 bytes   The node ID of this node.
 |