- Technical Notes
- View page source
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 bytesShould be either version 0(0x0000) or version 1(0x0001). Inversion 1, all multi-byte integers are saved in network byteorder(big endian). In version 0, all multi-byte integers are savedin host byte order. aria2 1.4.1 can read both versions and onlywrites a control file in version 1 format. version 0 support willbe disappear in the future version.
EXT
(EXTENSION): 4 bytesIf LSB is 1(i.e.
EXT[3]&1 == 1
), aria2 checks whether the savedInfoHash and current downloading one are the same. If they are notthe same, an exception is thrown. This is called "infoHashCheck"extension.INFO HASH LENGTH
: 4 bytesThe length of InfoHash that is located after this field. If"infoHashCheck" extension is enabled, if this value is 0, then anexception is thrown. For http/ftp downloads, this value should be0.
INFO HASH
:(INFO HASH LENGTH)
bytesBitTorrent InfoHash.
PIECE LENGTH
: 4 bytesThe length of the piece.
TOTAL LENGTH
: 8 bytesThe total length of the download.
UPLOAD LENGTH
: 8 bytesThe uploaded length in this download.
BITFIELD LENGTH
: 4 bytesThe length of bitfield.
BITFIELD
:(BITFIELD LENGTH)
bytesThis is the bitfield which represents current download progress.
NUM IN-FLIGHT PIECE
: 4 bytesThe number of in-flight pieces. These piece is not marked'downloaded' in the bitfield, but it has at least one downloadedchunk.
The following 4 fields are repeated in (NUM IN-FLIGHT PIECE)
times.
INDEX
: 4 bytesThe index of the piece.
LENGTH
: 4 bytesThe length of the piece.
PIECE BITFIELD LENGTH
: 4 bytesThe length of bitfield of this piece.
PIECE BITFIELD
:(PIECE BITFIELD LENGTH)
bytesThe bitfield of this piece. The each bit represents 16KiB chunk.
DHT routing table file format¶
aria2 saves IPv4 DHT routing table in${XDG_CACHE_HOME}/aria2/dht.dat
and IPv6 DHT routing table in${XDG_CACHE_HOME}/aria2/dht6.dat
by default unless${HOME}/.aria2/dht.dat
and ${HOME}/.aria2/dht.dat
are present.
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| RSV |VER| MTIME | RSV |LOCAL NODE ID :|(2)|M| (3) |(2)| (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 bytesIt must be
0xa1 0xa2
.FMT
(FORMAT ID): 1 byteThe format ID should be
0x02
.VER
(VERSION): 2 bytesThe version number should be
0x00 0x03
.MTIME
: 8 bytesThis is the time when aria2 saved the file. The value is the timesince the Epoch(1970/1/1 00:00:00) in 64 bits integer.
LOCALNODE ID
: 20 bytesNode ID of the client.
NUM NODE
: 4 bytesThe number of nodes the routing table has.
NUM NODE
nodeinformation 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 byteThe length of compact peer info. For IPv4 DHT, it must be 6. ForIPv6 DHT, it must be 18.
COMPACT PEER INFO
:(PLEN)
bytesThe address and port of peer in compact peer format.
NODE ID
: 20 bytesThe node ID of this node.