]>
git.ipfire.org Git - ipfire.org.git/blob - src/backend/tracker.py
3 from __future__
import division
11 ##### This is borrowed from the bittorrent client libary #####
15 newf
= x
.index('e', f
)
20 elif x
[f
] == '0' and newf
!= f
+1:
24 def decode_string(x
, f
):
25 colon
= x
.index(':', f
)
27 if x
[f
] == '0' and colon
!= f
+1:
30 return (x
[colon
:colon
+n
], colon
+n
)
32 def decode_list(x
, f
):
35 v
, f
= decode_func
[x
[f
]](x
, f
)
39 def decode_dict(x
, f
):
42 k
, f
= decode_string(x
, f
)
43 r
[k
], f
= decode_func
[x
[f
]](x
, f
)
47 decode_func
['l'] = decode_list
48 decode_func
['d'] = decode_dict
49 decode_func
['i'] = decode_int
50 decode_func
['0'] = decode_string
51 decode_func
['1'] = decode_string
52 decode_func
['2'] = decode_string
53 decode_func
['3'] = decode_string
54 decode_func
['4'] = decode_string
55 decode_func
['5'] = decode_string
56 decode_func
['6'] = decode_string
57 decode_func
['7'] = decode_string
58 decode_func
['8'] = decode_string
59 decode_func
['9'] = decode_string
63 r
, l
= decode_func
[x
[0]](x
, 0)
64 except (IndexError, KeyError, ValueError):
65 raise Exception("not a valid bencoded string")
67 raise Exception("invalid bencoded value (data after valid prefix)")
70 from types
import StringType
, IntType
, LongType
, DictType
, ListType
, TupleType
73 class Bencached(object):
75 __slots__
= ['bencoded']
77 def __init__(self
, s
):
80 def encode_bencached(x
,r
):
84 r
.extend(('i', str(x
), 'e'))
86 def encode_bool(x
, r
):
92 def encode_string(x
, r
):
93 r
.extend((str(len(x
)), ':', x
))
95 def encode_list(x
, r
):
98 encode_func
[type(i
)](i
, r
)
101 def encode_dict(x
,r
):
106 r
.extend((str(len(k
)), ':', k
))
107 encode_func
[type(v
)](v
, r
)
111 encode_func
[Bencached
] = encode_bencached
112 encode_func
[IntType
] = encode_int
113 encode_func
[LongType
] = encode_int
114 encode_func
[StringType
] = encode_string
115 encode_func
[ListType
] = encode_list
116 encode_func
[TupleType
] = encode_list
117 encode_func
[DictType
] = encode_dict
120 from types
import BooleanType
121 encode_func
[BooleanType
] = encode_bool
127 encode_func
[type(x
)](x
, r
)