File Transfer Protocol Version 1
Battle.net's file transfer protocol (often abbreviated BNFTP or BNFTPv1) consists of two packets: the request and the response.
To initiate a BNFTPv1 connection, BNFTP's protocol ID, 0x02
, must be sent to the server before sending a request packet. The response packet is likely to be split up among multiple TCP packets.
Request Packet Structure
Type | Field | Description |
---|---|---|
UINT16 | Request Length | |
UINT16 | Protocol Version | 0x100 (256) |
UINT32 | Platform ID | See [Product Identification] |
UINT32 | Product ID | See [Product Identification] |
UINT32 | Ad Banner ID | 0 unless downloading an ad banner |
UINT32 | Ad Banner File Extension | 0 unless downloading an ad banner |
UINT32 | File start position | For resuming an incomplete download |
FILETIME | Filetime | if set to 0 , will return the latest version of the file |
STRING | Filename |
Response Packet Structure
Type | Field | Description |
---|---|---|
UINT16 | Header Length | Does not include the file length |
UINT16 | Type | |
UINT32 | File size | |
UINT32 | Ad Banner ID | 0 unless downloading an ad banner |
UINT32 | Ad Banner File Extension | 0 unless downloading an ad banner |
FILETIME | Filetime | last modified time of the returned file |
STRING | Filename | |
VOID | File data |
The client terminates the connection after completely receiving the requested file. If the file does not exist on the server, the connection is closed immediately.
See also, BNFTPv2.
Comments
Why would the unknown be padding and not part of the header length making it a DWORD? It makes no sense for it to be padding if this is a header.
Why would the protocol version be 0x100 (256)? They probably are using big endian instead of little endian, and the version is probably 0x01 (1).