Всем привет, долго пытался разобраться почему моя реализация announce к трекеру не получает нужный респоунс, решил заснифирить utorrent и сравнить каждый элемент из их запроса со своими. Вообщем, я быстро выяснил что единственная проблема - это то, что у нас отличаются info_hash:
мой info_hash: "v\201\327|\r\270\265\227e\254\216[\275\316[\262\245\264g\006"
utorrent info_hash: "|\327\201v\227\265\270\r[\216\254e\262[ν\006g\264\245"
Очевидно, что виновник в этом - Endianness, и действительно, разбив свою строку на массив из 5 4-х байтных чисел, а затем изменив их endian, я получил идентичную с utorrent строку! Стоит отметить, что все данные по протоколу необходимо передавать в формате Big-endian.
Но, в спецификациях которые я находил, явно указано что это либо 20 байтная строка, либо 20 байтный массив int8_t:
www.bittorrent.org/beps/bep_0015.html &&
https://www.libtorrent.org/udp_tracker_protocol.html (см. IPv4 announce request).
Прошу подсказать, разве однобайтная строка не будет выглядеть одинаково в любой форме endian? Помогите разобраться, почему тут необходимо изменять порядок байт (все торрент файлы, которые я пытался заанонсить у трекера выдавали невалидные данные, пока я не принял такой порядок info_hash)?