root/include/functions_announce.php

Revision 269, 2.6 kB (checked in by Nafania, 3 years ago)

Большое обновление всякого разного.
Новые запросы к базе начинаются с 390-393 строк.
Новая система bbcode, добавлены теги раздач (настройки в админке).
Чуть изменен режим работы заливки.
Подходим к вопросу об использовании xbtt.
Итд итп.

Line 
1 <?php
2
3 /*</span>
4 <span class="code-comment">Basic knowledge of how bencoding works is assumed. Details can be found
5 at <http://bitconjurer.org/BitTorrent/protocol.html>.
6 */
7
8 function benc($obj) {</span>
9 <span class="code-keyword">        if ( !is_array($obj) || !isset($obj['type']) || !isset($obj['value']) ) {
10                 return;
11         }
12         switch ( $obj['type'] ) {
13                 case 'string':
14                         return benc_str($obj['value']);
15                 case 'integer':
16                         return benc_int($obj['value']);
17                 case 'list':
18                         return benc_list($obj['value']);
19                 case 'dictionary':
20                         return benc_dict($obj['value']);
21                 default:
22                         return;
23         }
24 }
25
26 function benc_str($s) {
27         return strlen($s) . ':' . $s;
28 }
29
30 function benc_int($i) {
31         return 'i' . $i . 'e';
32 }
33
34 function benc_list($a) {
35         $s = 'l';
36         for ( $i = 0; $i < sizeof($a); ++$i ) {
37                 $s .= benc($a[$i]);
38         }
39         $s .= 'e';
40         return $s;
41 }
42
43 function benc_dict($d) {
44         $s = 'd';
45         $keys = array_keys($d);
46         sort($keys);
47         for ( $i = 0; $i < sizeof($keys); ++$i ) {
48                 $s .= benc_str($keys[$i]);
49                 $s .= benc($d[$keys[$i]]);
50         }
51         $s .= 'e';
52         return $s;
53 }
54
55 function benc_resp ( $d ) {
56     benc_resp_raw(benc(array('type' => 'dictionary', 'value' => $d)));
57 }
58
59 function err ( $msg ) {
60     benc_resp(array(
61         'failure reason' => array(
62             'type' => 'string',
63             'value' => $msg
64         )
65     ));
66 }
67
68 function benc_resp_raw ( $x ) {
69     global $cache, $db;
70
71     if ( $_SERVER['HTTP_ACCEPT_ENCODING'] == 'gzip' ) {
72         header('Content-Encoding: gzip');
73         $x = gzencode($x, 9, FORCE_GZIP);
74     }
75     header('Content-Type: text/plain');
76     header('Pragma: no-cache');
77     header('Cache-Control: no-cache, must-revalidate'); // HTTP/1.1
78     header('Expires: Mon, 26 Jul 1997 05:00:00 +0400'); // Date in the past
79
80     echo $x;
81
82     if ( !empty($cache) ) {
83         $cache->unload();
84     }
85     if ( !empty($db) ) {
86         $db->sql_close();
87     }
88     exit();
89 }
90
91 function hash_pad($hash) {
92     return str_pad($hash, 20);
93 }
94
95 function hash_where($name, $hash) {
96     global $db;
97
98     if ( is_array($hash) ) {
99         $new_hash_arr = array();
100         for ( $i = 0; $i < sizeof($hash); ++$i ) {
101             $new_hash_arr[] = '\'' . $db->sql_escape(urldecode($hash[$i])) . '\'';
102         }
103         return $name . ' IN (' . implode(', ', $new_hash_arr) . ' )';
104     }
105     else {
106         $shhash = str_replace(' ', '', $hash);
107         if ( $shhash != $hash ) {
108             return '(' . $name . ' = \'' . $db->sql_escape($hash) . '\' OR ' . $name . ' = \'' . $db->sql_escape($shhash) . '\')';
109         }
110         else {
111             return $name . ' = \'' . $db->sql_escape($hash) . '\'';
112         }
113     }
114 }
115
116 ?>
Note: See TracBrowser for help on using the browser.