December 15, 2004
World's Smallest P2P Code.
Alex Halderman and Ed Felten have done it again. They have their fingers in lots of cool pies.... They've made the code available for download, or cut and paste to iron it onto your favorite old T-Shirt. Tasty.
Enjoy:
# tinyp2p.py 1.0 (documentation at http://freedom-to-tinker.com/tinyp2p.html)
import sys, os, SimpleXMLRPCServer, xmlrpclib, re, hmac # (C) 2004, E.W. Felten
ar,pw,res = (sys.argv,lambda u:hmac.new(sys.argv[1],u).hexdigest(),re.search)
pxy,xs = (xmlrpclib.ServerProxy,SimpleXMLRPCServer.SimpleXMLRPCServer)
def ls(p=""):return filter(lambda n:(p=="")or res(p,n),os.listdir(os.getcwd()))
if ar[2]!="client": # license: http://creativecommons.org/licenses/by-nc-sa/2.0
myU,prs,srv = ("http://"+ar[3]+":"+ar[4], ar[5:],lambda x:x.serve_forever())
def pr(x=[]): return ([(y in prs) or prs.append(y) for y in x] or 1) and prs
def c(n): return ((lambda f: (f.read(), f.close()))(file(n)))[0]
f=lambda p,n,a:(p==pw(myU))and(((n==0)and pr(a))or((n==1)and [ls(a)])or c(a))
def aug(u): return ((u==myU) and pr()) or pr(pxy(u).f(pw(u),0,pr([myU])))
pr() and [aug(s) for s in aug(pr()[0])]
(lambda sv:sv.register_function(f,"f") or srv(sv))(xs((ar[3],int(ar[4]))))
for url in pxy(ar[3]).f(pw(ar[3]),0,[]):
for fn in filter(lambda n:not n in ls(), (pxy(url).f(pw(url),1,ar[4]))[0]):
(lambda fi:fi.write(pxy(url).f(pw(url),2,fn)) or fi.close())(file(fn,"wc"))
Posted by Mary Hodder at December 15, 2004 02:13 PM
| TrackBack
The code as reprinted here won't work, because the textual layout of the code doesn't match the original. (In Python, unlike most other programming languages, layout matters.) Working code is at http://www.freedom-to-tinker.com/tinyp2p.py
Hmm, it's fun but I don't think it makes a very convincing "smallest", look at the stuff it's using:
import sys, os, SimpleXMLRPCServer, xmlrpclib, re, hmac
If that's acceptable, then surely so should be a one-line version something like :
import P2PClient, P2PServer