Removed all stasher-specifics, relocated them to

i2p/apps/stasher
This commit is contained in:
aum
2004-08-14 17:19:24 +00:00
committed by zzz
parent 130310fddd
commit f6d8d93a1b
7 changed files with 1 additions and 4315 deletions

View File

@ -1,68 +0,0 @@
STASHER README
-----------------------
INSTALLING STASHER
To install stasher, just make sure you've got the latest cvs, then type
python setup.py install
This installs the stasher engine, plus a wrapper client script called
'stasher', which setup.py will install into your execution path.
Test your installation by typing 'stasher -h' - this should display
a help message.
------------------------
DOZE USERS PLEASE NOTE
You'll need to watch and see where the stasher.py
wrapper script gets installed. On my box, it ends up on d:\python23\scripts,
but on your box it'll likely go into c:\python23\scripts.
You may either update your system PATH environment variable to include your
python scripts directory, OR, you can copy stasher.py to anywhere that's
on your path.
In the explanations below, note that wherever I say to type 'stasher', you'll
need to type 'stasher.py' instead.
------------------------
WARNING
This is a very early pre-alpha test version of stasher.
It is only capable of storing or retrieving files of
less than 29k in size.
Also, files are totally insecure - anyone can overwrite any keys you
insert, and vice versa.
I'll be adding support for CHK-like and SSK-like keys in due course.
------------------------
USING STASHER
To see stasher's options, type:
stasher -h
This should dump out a verbose help message.
To start a stasher node, type:
stasher start
To shut down a stasher node, type:
stasher stop
To insert a file into stasher, type:
stasher put mykey myfile
Note, if you don't supply a filename, stasher can read
the file from standard input.
To retrieve a file from stasher, type:
stasher get mykey

View File

@ -1 +0,0 @@
Yg1FeoQi9GEsby~t~IClgWYc8AQoxBcvuXR9HY~cwc21y5-NVeAnhrfOiF6HWGhHUywh4eCINE52Zh28Jgn2wMVPqbr-r48ikU3oSXQO8BoPyGLz43x~UqR3Vw4mR9jtTq-9TQ70LxuYPNKPvpkM3C~d8wx7VX42KaiNlQlBzvC34MwivrP0esHst6RfNf11lTRrdQbQYMXqLzjdVs6Kl5jeniTwFodqb5yG1O4~hjXasVtIFoepzL6y3x1TyKQonzTGftkd3r4Weh3jh9w6yyRabTAPFMjeXKjMfjpKDHl6C0C62MdjxKvNos5JYYzXZG6BeSoeZP-8c6wndfzuYV3QRR~M61fgXcQq~EVuy8fDpdhfuv8ZRXeOZIp07hQkpMxSNP43Rk1afPRv7QLzuS2UCDQe2WGhp3DQB0dSOmxImdNRmNCbeF8r~bKpgM~okOUC0xwzXfJFxWvqB0IsmNp8KVeoTGjSJOZHDdGDKaBwxHxxYg4PQWo7FuXQ5FihAAAA

View File

@ -5,18 +5,11 @@ import os, sys
os.chdir('./src')
if sys.platform == 'win32':
stasherFrontEnd = "..\\stasher.py"
else:
stasherFrontEnd = "../stasher"
setup(name="Python I2P API",
version="0.91",
description="Python Interface to I2P",
author="Connelly Barnes + Aum",
author="Connelly Barnes",
author_email="'Y29ubmVsbHliYXJuZXNAeWFob28uY29t\n'.decode('base64')",
url="http://www.i2p.net/",
packages=['i2p', 'i2p.pylib'],
py_modules=['bencode'],
scripts=[stasherFrontEnd],
)

View File

@ -1,254 +0,0 @@
# Written by Petru Paler
# see LICENSE.txt for license information
from types import IntType, LongType, StringType, ListType, TupleType, DictType
import re
from cStringIO import StringIO
int_filter = re.compile('(0|-?[1-9][0-9]*)e')
def decode_int(x, f):
m = int_filter.match(x, f)
if m is None:
raise ValueError
return (long(m.group(1)), m.end())
string_filter = re.compile('(0|[1-9][0-9]*):')
def decode_string(x, f):
m = string_filter.match(x, f)
if m is None:
raise ValueError
l = int(m.group(1))
s = m.end()
return (x[s:s+l], s + l)
def decode_list(x, f):
r = []
while x[f] != 'e':
v, f = bdecode_rec(x, f)
r.append(v)
return (r, f + 1)
def decode_dict(x, f):
r = {}
lastkey = None
while x[f] != 'e':
k, f = decode_string(x, f)
if lastkey is not None and lastkey >= k:
raise ValueError
lastkey = k
v, f = bdecode_rec(x, f)
r[k] = v
return (r, f + 1)
def bdecode_rec(x, f):
t = x[f]
if t == 'i':
return decode_int(x, f + 1)
elif t == 'l':
return decode_list(x, f + 1)
elif t == 'd':
return decode_dict(x, f + 1)
else:
return decode_string(x, f)
def bdecode(x):
try:
r, l = bdecode_rec(x, 0)
except IndexError:
raise ValueError
if l != len(x):
raise ValueError
return r
def test_bdecode():
try:
bdecode('0:0:')
assert 0
except ValueError:
pass
try:
bdecode('ie')
assert 0
except ValueError:
pass
try:
bdecode('i341foo382e')
assert 0
except ValueError:
pass
assert bdecode('i4e') == 4L
assert bdecode('i0e') == 0L
assert bdecode('i123456789e') == 123456789L
assert bdecode('i-10e') == -10L
try:
bdecode('i-0e')
assert 0
except ValueError:
pass
try:
bdecode('i123')
assert 0
except ValueError:
pass
try:
bdecode('')
assert 0
except ValueError:
pass
try:
bdecode('i6easd')
assert 0
except ValueError:
pass
try:
bdecode('35208734823ljdahflajhdf')
assert 0
except ValueError:
pass
try:
bdecode('2:abfdjslhfld')
assert 0
except ValueError:
pass
assert bdecode('0:') == ''
assert bdecode('3:abc') == 'abc'
assert bdecode('10:1234567890') == '1234567890'
try:
bdecode('02:xy')
assert 0
except ValueError:
pass
try:
bdecode('l')
assert 0
except ValueError:
pass
assert bdecode('le') == []
try:
bdecode('leanfdldjfh')
assert 0
except ValueError:
pass
assert bdecode('l0:0:0:e') == ['', '', '']
try:
bdecode('relwjhrlewjh')
assert 0
except ValueError:
pass
assert bdecode('li1ei2ei3ee') == [1, 2, 3]
assert bdecode('l3:asd2:xye') == ['asd', 'xy']
assert bdecode('ll5:Alice3:Bobeli2ei3eee') == [['Alice', 'Bob'], [2, 3]]
try:
bdecode('d')
assert 0
except ValueError:
pass
try:
bdecode('defoobar')
assert 0
except ValueError:
pass
assert bdecode('de') == {}
assert bdecode('d3:agei25e4:eyes4:bluee') == {'age': 25, 'eyes': 'blue'}
assert bdecode('d8:spam.mp3d6:author5:Alice6:lengthi100000eee') == {'spam.mp3': {'author': 'Alice', 'length': 100000}}
try:
bdecode('d3:fooe')
assert 0
except ValueError:
pass
try:
bdecode('di1e0:e')
assert 0
except ValueError:
pass
try:
bdecode('d1:b0:1:a0:e')
assert 0
except ValueError:
pass
try:
bdecode('d1:a0:1:a0:e')
assert 0
except ValueError:
pass
try:
bdecode('i03e')
assert 0
except ValueError:
pass
try:
bdecode('l01:ae')
assert 0
except ValueError:
pass
try:
bdecode('9999:x')
assert 0
except ValueError:
pass
try:
bdecode('l0:')
assert 0
except ValueError:
pass
try:
bdecode('d0:0:')
assert 0
except ValueError:
pass
try:
bdecode('d0:')
assert 0
except ValueError:
pass
def bencode_rec(x, b):
t = type(x)
if t in (IntType, LongType):
b.write('i%de' % x)
elif t is StringType:
b.write('%d:%s' % (len(x), x))
elif t in (ListType, TupleType):
b.write('l')
for e in x:
bencode_rec(e, b)
b.write('e')
elif t is DictType:
b.write('d')
keylist = x.keys()
keylist.sort()
for k in keylist:
assert type(k) is StringType
bencode_rec(k, b)
bencode_rec(x[k], b)
b.write('e')
else:
assert 0
def bencode(x):
b = StringIO()
bencode_rec(x, b)
return b.getvalue()
def test_bencode():
assert bencode(4) == 'i4e'
assert bencode(0) == 'i0e'
assert bencode(-10) == 'i-10e'
assert bencode(12345678901234567890L) == 'i12345678901234567890e'
assert bencode('') == '0:'
assert bencode('abc') == '3:abc'
assert bencode('1234567890') == '10:1234567890'
assert bencode([]) == 'le'
assert bencode([1, 2, 3]) == 'li1ei2ei3ee'
assert bencode([['Alice', 'Bob'], [2, 3]]) == 'll5:Alice3:Bobeli2ei3eee'
assert bencode({}) == 'de'
assert bencode({'age': 25, 'eyes': 'blue'}) == 'd3:agei25e4:eyes4:bluee'
assert bencode({'spam.mp3': {'author': 'Alice', 'length': 100000}}) == 'd8:spam.mp3d6:author5:Alice6:lengthi100000eee'
try:
bencode({1: 'foo'})
assert 0
except AssertionError:
pass

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +0,0 @@
#! /usr/bin/env python
# wrapper script to run stasher node
import i2p.stasher
i2p.stasher.main()

View File

@ -1,3 +0,0 @@
# wrapper script to run stasher node
import i2p.stasher
i2p.stasher.main()