рдкрд░рд┐рдЪрдп

рд╢реБрдн рджреЛрдкрд╣рд░
рдореИрдВ рдХрдИ, рдПрдХ рдмрдбрд╝реЗ рдзрд╛рд░ рдЯреНрд░реИрдХрд░ - rutracker.org рдХреА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░рддреА рд╣реИред
рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ
ix *ред Rutracker.net , рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП
рдЕрдпреЛрдЧреНрдп рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреЛ рдЕрдХреНрд╕рд░ (рдореЗрд░реЗ рд▓рд┐рдП - рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛) рддреНрд░реБрдЯрд┐рдпрд╛рдВ (
502 рдЦрд░рд╛рдм рдЧреЗрдЯрд╡реЗ рдФрд░
0 рдиреЛ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ ) рдлреЗрдВрдХрддрд╛ рд╣реИред рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ (рдореЗрд░реЗ рдкрд╛рд╕ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рд╣реИ) рдЯреЛрд░реЗрдВрдЯ рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдмреЗрд╢рдХ рдЬреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдЖрдк рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ рдЯреНрд░реИрдХрд░ рдХреА рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдзрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдо ix * рдХреЛ рдкреЛрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ, рдзрд╛рд░ рдХреЛ рдмреНрд░реЛрдХрди рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, n рдорд┐рдирдЯ / рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рд╕реВрдЪреА рд╕реЗ рдЕрдЧрд▓рд╛ рдЯреНрд░реИрдХрд░
рдкреНрд░рджреВрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ -
bt * .rutracker.org рдпрд╛
retracker.local , рдЬреЛ рдПрдХ рд╕рдлрд▓ рдХреЛрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдзрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЧрдВрджрдЧреА рдореБрдЭрд╕реЗ рдмрд╣реБрдд рдЦреБрд╢ рдирд╣реАрдВ рд╣реИред
рд╕рдорд╛рдзрд╛рди рднреЛрдЬ рд╣реИ - рдЗрд╕ рдмреБрд░реЗ рдкрддреЗ рдХреЛ рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдореИрдВ рд╣рд░ рдПрдХ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд╛рдЯрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рдФрд░ рдПрдХ рдирдИ рдзрд╛рд░ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рдереАред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рд╕реВрдЪреА рд╕реЗ рдЯреНрд░реИрдХрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
Bencode
рдпрд╣ рд╡рд╣ рдбреЗрдЯрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рд╣реИ рдЬрд┐рд╕реЗ .torrent рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд▓рдЧрднрдЧ рдХрд╣реАрдВ рднреА рдХрднреА рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ-рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рднреА рдЖрдпрд╛ рдерд╛ред
рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реА ++ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд╣рд╛рдВ, рд╣рд╛рдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдРрд╕реА рдХреЛрдИ
рдЪреАрдЬ рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ рд╢реБрджреНрдз рд╕реА рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рд╕реНрддреБрддрд┐ рдлреЙрд░реНрдо рдореБрдЭреЗ рд╕рдлрд▓ рдирд╣реАрдВ рд▓рдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рд░рд▓ рдмрд╛рдЗрдХ рд▓рд┐рдЦреА, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рд░реВрдк рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИред
4 рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ - рдмрд╛рдЗрдЯ рд╕рд░рдгреА, рд╕рдВрдЦреНрдпрд╛, рд╕реВрдЪреА, рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреАред
рдЖрдЗрдП рдЬрд╛рдиреЗ рдХреНрд░рдо рдореЗрдВ:
- рд╕рдВрдЦреНрдпрд╛рдПрдБ I рдХреЗ рд░реВрдк рдореЗрдВ рджреА рдЧрдИ рд╣реИрдВ <<рдЕрдВрдХреЛрдВ рдХрд╛ рдЕрдиреБрдХреНрд░рдо> рдИ , <рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдХреНрд░рдо> - рдпреЗ ascii рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдПрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд 1 рдХреЛ '1' рдпрд╛ 0x31 рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдпрд╛ рддреЛ рд▓рдВрдмреЗ рдпрд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдХ рд╕реАрдорд╛ рдХреА рдХрдореА рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ 64-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
- рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рд░рдгреА - <рд╕рд░рдгреА рд▓рдВрдмрд╛рдИ>: <рд╕рд░рдгреА рд╣реА> ред рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рднреА рдЕрдВрдХреЛрдВ рдХреЗ рдЕрд╕реАрдорд┐рдд рдЕрдиреБрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИред
- рд╕реВрдЪреА - l <рд╕реВрдЪреА рдЖрдЗрдЯрдо> рдИ ред рдПрдХ рддрддреНрд╡ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рд╕реВрдЪреА рд╕рд╣рд┐рддред рдкреНрд░рд╛рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛ рдЕрдВрдд, рд╢рд╛рдмреНрджрд┐рдХ 'рдИ' рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред
- рд╕рд╣рдпреЛрдЧреА рд╕рд░рдгреА - d <рд╕рд░рдгреА рддрддреНрд╡> рдИ ред рд╕рд░рдгреА рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ - <рдмрд╛рдЗрдЯ рд╕рд░рдгреА> <рддрддреНрд╡> ред рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдХреНрд▓реЙрдЬ рд╕реЗ рдлреЙрд░реНрдо рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдирд╛рдо рд╣реИред рдПрдХ рддрддреНрд╡ рдлрд┐рд░ рд╕реЗ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдПрдХ рд╕реВрдЪреА, рдПрдХ рд╕рд░рдгреА, рдПрдХ рд╕рд╣рдпреЛрдЧреА рд╕рд░рдгреА, рдПрдХ рд╕рдВрдЦреНрдпрд╛ред
рд╡рд╣ рд╕рдм рд╣реИред рдлрд╝рд╛рдЗрд▓ рд╣реА рдРрд╕реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИред рдЗрд╕рд▓рд┐рдП, рдбреАрдХреЛрдбрд┐рдВрдЧ рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИ:
void CTorrentFile::ReadBencElement(ifstream & fin, tree <BencElement>::pre_order_iterator & parent, string name) { BencElement el; char c = fin.get(); el.name = name; if (c == 'i') { el.type = BencInteger; fin >> el.integer; m_tree.append_child(parent, el); } else if (c == 'l') { int l = fin.peek(); el.type = BencList; tree <BencElement>::pre_order_iterator it = m_tree.append_child(parent, el); while (l != 'e') { ReadBencElement(fin, it, string("")); l = fin.peek(); } fin.seekg(1, ios_base::cur); } else if (c == 'd') { int l = fin.peek(); el.type = BencDict; tree <BencElement>::pre_order_iterator it = m_tree.append_child(parent, el); while (l != 'e') { string name; int len; fin >> len; fin.seekg(1, ios_base::cur); while (len--) { char s = fin.get(); name += s; } ReadBencElement(fin, it, name); l = fin.peek(); } fin.seekg(1, ios_base::cur); } else if (c >= '0' && c <= '9') { fin.seekg(-1, ios_base::cur); int len; el.type = BencString; fin >> len; el.bstr.len = len;
рдХреЛрдбрд┐рдВрдЧ рднреА рдЖрд╕рд╛рди рд╣реИ:
void CTorrentFile::WriteBencElement(std::ofstream & fout, tree <BencElement>::sibling_iterator & el) { tree <BencElement>::sibling_iterator it; switch (el->type) { case BencInteger: fout << 'i' << el->integer << 'e'; break; case BencString: fout << el->bstr.len << ':'; fout.write(el->bstr.byteStr, el->bstr.len); break; case BencList: fout << 'l'; it = m_tree.child(el, 0); for (size_t i = 0; i < m_tree.number_of_children(el); i++, ++it) WriteBencElement(fout, it); fout << 'e'; break; case BencDict: fout << 'd'; tree <BencElement>::sibling_iterator it = m_tree.child(el, 0); for (size_t i = 0; i < m_tree.number_of_children(el); i++, ++it) { fout << it->name.length() << ':' << it->name.c_str(); WriteBencElement(fout, it); } fout << 'e'; break; } }
.Torrent рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ, рдмреЗрдирдХреЛрдб рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЬреЛрдбрд╝рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрджрд┐ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдПрдХ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡ рдирд╛рдо, рдмрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлрд╝реАрд▓реНрдб), рддреЛ utf-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдордЧреНрд░реА рдПрдХ рдмрдбрд╝рд╛ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА рд╣реИ:
- рдЬрд╛рдирдХрд╛рд░реА рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдПрд╕реЛрд╕рд┐рдПрдЯрд┐рд╡ рдРрд░реЗ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдЬреЛ рдЯреЛрд░реЗрдВрдЯ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рддреА рд╣реИрдВред
- рдШреЛрд╖рдгрд╛ - рдЯреНрд░реИрдХрд░ рдХреЗ рд▓рд┐рдП URLред рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдмрд╛рдХреА рд╕рдм рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред
- рдШреЛрд╖рдгрд╛-рд╕реВрдЪреА - рдЯреНрд░реИрдХрд░реНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА, рдпрджрд┐ рдХрдИ рд╣реИрдВред рдмреЗрдирдХреЛрдб рджреГрд╢реНрдп рдореЗрдВ, рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреАред
- рдирд┐рд░реНрдорд╛рдг рддрд┐рдерд┐ - рдирд┐рд░реНрдорд╛рдг рддрд┐рдерд┐ред UNIX рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдкред
- рдЯрд┐рдкреНрдкрдгреА - рдзрд╛рд░ рдХрд╛ рдкрд╛рда рд╡рд┐рд╡рд░рдгред rutracker.org рдпрд╣рд╛рдВ рдПрдХ рдлреЛрд░рдо рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
- рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд - рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдзрд╛рд░ рдХреЛ рдХрд┐рд╕рдиреЗ рдмрдирд╛рдпрд╛ред
рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдзрд╛рд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдПрдХрд▓ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рд╕рд░рдгреА рдХреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕ рд░реВрдк рдореЗрдВ, рдбреЗрдЯрд╛ рдмрд┐рдЯрдЯреЛрд░реЗрдВрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╣рдпреЛрдЧреА рд╕рд░рдгреА рдореЗрдВ рдирд┐рдореНрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдЯреБрдХрдбрд╝рд╛ рдХреА рд▓рдВрдмрд╛рдИ - рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЖрдХрд╛рд░ 512 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ, 1 рдореАрдЯрд░, рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╣реИред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЯреБрдХрдбрд╝реЗ .torrent рдлрд╝рд╛рдЗрд▓ рдХреЛ "рдлреБрд▓рд╛рдПрдБрдЧреЗ"ред
- рдЯреБрдХрдбрд╝реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ SHA1 рд╣реИрд╢ рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдЯреБрдХрдбрд╝реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 20 * рд╣реИред
- рдирд╛рдо - рдЕрдиреБрд╢рдВрд╕рд┐рдд рдлрд╝рд╛рдЗрд▓ рдирд╛рдо (рдпрджрд┐ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ) рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ред рдХрд╛рд╢, рдХрдИ рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрд╕реЗ рдПрдХ рд╕реНрд╡рдпрдВрд╕рд┐рджреНрдз рдорд╛рдирддреЗ рд╣реИрдВред
- рд▓рдВрдмрд╛рдИ - рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдПрдХ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝реАрд▓реНрдб рд╕реЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреА рд▓рдВрдмрд╛рдИ рд╣реИред
- рдлрд╛рдЗрд▓реЗрдВ - рдЕрдЧрд░ рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рддреЛ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдкреНрд░рд╛рд░реВрдк:
- рд▓рдВрдмрд╛рдИ - рдлрд╝рд╛рдЗрд▓ рдХреА рд▓рдВрдмрд╛рдИред
- рдкрде - рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЬреЛ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдЦрд╛ рдзрд╛рд░ рдХреА рдЬрдбрд╝ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдХрд╛ рдПрдХ рддрддреНрд╡ рд╣реИред рдкрде a / b / c / d.jpg рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ 4 рд▓рд╛рдЗрдиреЗрдВ рд╣реЛрдВрдЧреА - ['a', 'b', 'c', 'd.jpg'] ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╕рдм рд╣реИред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝реАрд▓реНрдб -
рдШреЛрд╖рдгрд╛-рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдЗрд╕ рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдкрд░ рд╣рдореЗрдВ рдЖрдкрддреНрддрд┐рдЬрдирдХ рдЯреНрд░реИрдХрд░ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
int CTorrentFile::RemoveTracker(const char * mask) { int deletedCount = 0; tree <BencElement>::pre_order_iterator root = m_tree.child(m_tree.begin(), 0); tree <BencElement>::sibling_iterator it = m_tree.child(root, 0); for (size_t i = 0; i < m_tree.number_of_children(root); i++, ++it) { if (it->type == BencString && !it->name.compare("announce") && it->bstr.len > 0 && it->bstr.byteStr) { if (wildcardMatch(it->bstr.byteStr, mask)) { it->bstr.len = 0; it->bstr.byteStr[0] = 0; deletedCount++; } } else if (it->type == BencList && !it->name.compare("announce-list")) { tree <BencElement>::sibling_iterator trackerList = m_tree.child(it, 0); for (size_t j = 0; j < it.number_of_children(); j++) { if (trackerList->type != BencList) { ++trackerList; continue; } tree <BencElement>::sibling_iterator tracker = m_tree.child(trackerList, 0); for (size_t k = 0; k < trackerList.number_of_children(); k++) { if (tracker->type != BencString || tracker->bstr.len <= 0 || !tracker->bstr.byteStr) { ++tracker; continue; } if (wildcardMatch(tracker->bstr.byteStr, mask)) { tracker = m_tree.erase(tracker); deletedCount++; } else ++tracker; } if (trackerList.number_of_children() == 0) trackerList = m_tree.erase(trackerList); else ++trackerList; } } } return deletedCount; }
рд╣рдо рд╕рдм рдХреБрдЫ рдПрдХ рд╕реНрд░реЛрдд рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
рдбрд╛рдЙрдирд▓реЛрдб - рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (рдЬреАрдд + * рдирд┐рдХреНрд╕), рдЖрдкрдХреЛ
рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
:: рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо ред
рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди:
torrentEditor <file_name> <рдкреИрдЯрд░реНрди> , рдЬрд╣рд╛рдВ рдкреИрдЯрд░реНрди рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ ('*' рдФрд░ '?'), рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП -
http: //ix*rutracker.net/*рдпрджрд┐ рдЖрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдирд╛рдо рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдФрд░ * .torrent рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдВрд╢реЛрдзрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
<Name> .torrent рдХреЗ рд▓рд┐рдП рдмреИрдХрдЕрдк
<name> .old рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред
Daemons рдФрд░ рдШрдбрд╝реА-рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ред
рдЗрд╕ рддрд░рд╣ рд╣рдо рдореМрдЬреВрджрд╛ .рдЯреЛрд░реЗрдВрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЯреНрд░реИрдХрд░ рдХреЛ рдХрд╛рдЯ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдирдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рдореИрдВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ - рд╡реЙрдЪ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реАред рд╣рдо .torrent рдХреЛ рд╡рд╣рд╛рдВ рдлреЗрдВрдХрддреЗ рд╣реИрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрд╕реЗ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕реНрд╡рддрдГ рд╣реА рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЯреНрд░реИрдХрд░ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдХрд╛рдЯрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рджрд╛рдирд╡ рд▓рд┐рдЦрд╛ рдЬреЛ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдШрдбрд╝реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ, рдЯреНрд░реИрдХрд░ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдШрдбрд╝реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлреЗрдВрдХрддрд╛ рд╣реИред
рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рдореИрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрд╕реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдзрд╛рд░ рдорд┐рд▓рддреА рд╣реИред
рд╣рдо рд╕реА рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджрд╛рдирд╡ рд▓рд┐рдЦрддреЗ рд╣реИрдВ -
inotify ,
notifyDesc = inotify_init(); if (notifyDesc < 0) exit(EXIT_FAILURE); watchDesc = inotify_add_watch(notifyDesc, argv[1], IN_CREATE); if (watchDesc < 0) exit(EXIT_FAILURE);
рд╣рдо
inotify_init () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░
inotify_add_watch () рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдЬреЛрдбрд╝реЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП,
IN_CREATE рдзреНрд╡рдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдФрд░ рдлрд┐рд░ рд╣рдо рдЕрдВрддрд╣реАрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЪрдХреНрд░ рдХреЛ рд╕реНрдкрд┐рди рдХрд░рддреЗ рд╣реИрдВред
static void processEvents(int wd, char * moveDir, char * pattern, char * watchDir) { #define BUF_SIZE ((sizeof(struct inotify_event) + FILENAME_MAX) * 10) int len, i = 0; char buf[BUF_SIZE];
рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реЛрдзрдХ рдХреЙрд▓
() рд╣рдо рдЙрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд▓реНрдж рд╣реА рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗ, рдЬреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╕рд░рдг рдХреА рдЬрд╛ рд░рд╣реА рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордп рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдлрд╝рд╛рдЗрд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ -
рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреА рдПрдХ рдЬреЛрдбрд╝реА
() рдФрд░
рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓
() ред
рдбрд┐рдореЛрдиреЗрдЯрд╛рдЗрдЬреЗрд╢рди рднреА рдорд╛рдирдХ рд╣реИ:
рд╕реНрд░реЛрдд рдХреЛрдб