-- Leo's gemini proxy
-- Connecting to git.thebackupbox.net:1965...
-- Connected
-- Sending request
-- Meta line: 20 text/gemini
repo: urcd action: commit revision: path_from: revision_from: 093b19862caab975f2a8352c67dae7cc36d2ae30: path_to: revision_to:
commit 093b19862caab975f2a8352c67dae7cc36d2ae30 Author: root <root@d3v11.ano> Date: Mon Dec 31 22:30:08 2012 +0000 [urcstream] daemon for transit nodes diff --git a/.gitignore b/.gitignore
--- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build urcd urcrecv urcsend +urcstream socket supervise stdin diff --git a/Make.sh b/Make.sh
--- a/Make.sh +++ b/Make.sh @@ -22,6 +22,9 @@ if [ -z $HEADERS ]; then cp src/urcsend.pyx urcsend || exit 1 chmod +x urcsend || exit 1 + cp src/urcstream.pyx urcstream || exit 1 + chmod +x urcstream || exit 1 + exit 0 fi @@ -41,4 +44,8 @@ cython --embed src/urcsend.pyx -o build/urcsend.c || exit 1 gcc -O2 -c build/urcsend.c -I $HEADERS -o build/urcsend.o || exit 1 gcc -O1 -o urcsend build/urcsend.o -l python2.6 || exit 1 +cython --embed src/urcstream.pyx -o build/urcstream.c || exit 1 +gcc -O2 -c build/urcstream.c -I $HEADERS -o build/urcstream.o || exit 1 +gcc -O1 -o urcstream build/urcstream.o -l python2.6 || exit 1 + rm -rf build || exit 1 diff --git a/README b/README
--- a/README +++ b/README @@ -53,6 +53,9 @@ server2server: # you will need to link to your peer's server: ./bin/add-tcpsend peer.urcd.ano 4321 /service/urcd/socket/ + # transit nodes may use ./add-tcplisten and clients can + # stream with ./add-tcpconnect + curvecp server2server: ./bin/add-curvecprecv your.urcd.ano 1234 /service/urcd/socket/ @@ -61,3 +64,6 @@ curvecp server2server: # you will need to link to your peer's server: ./bin/add-curvecpsend peer.urcd.ano 4321 /service/urcd/socket/ peer.urcd.ano $peer_pubkey + + # transit nodes may use ./add-curvecplisten and clients can + # stream with ./add-curvecpconnect diff --git a/bin/add-curvecpconnect b/bin/add-curvecpconnect new file mode 100755 index 0000000000000000000000000000000000000000..2d0de97eb8ac2b35793cf1104183ccb122ca58bd --- /dev/null +++ b/bin/add-curvecpconnect @@ -0,0 +1,27 @@ +#!/bin/sh +[ -z $5 ] && \ + echo $0' <addr> <port> </path/to/socket/> <serv> <pubkey>' 1>&2 && \ + exit 64 + +mkdir -p /services/urcd-curvecpconnect-"$1:$2" || exit 1 + +printf $4 > /services/urcd-curvecpconnect-"$1:$2"/serv || exit 1 + +printf $5 > /services/urcd-curvecpconnect-"$1:$2"/pubkey || exit 1 + +printf \ +"#!/bin/sh -e +export CURVECPCLIENT=1 +exec curvecpclient \`cat serv\` \`cat pubkey\` $1 $2 01110101011100100110001101100100 curvecpmessage ./urcstream $3\n" > \ +/services/urcd-curvecpconnect-"$1:$2"/run || exit + +chmod +x /services/urcd-curvecpconnect-"$1:$2"/run || exit 1 + +test -L /services/urcd-curvecpconnect-"$1:$2"/urcstream || \ + ln -s `pwd`/urcstream /services/urcd-curvecpconnect-"$1:$2"/urcstream || \ + exit 1 + +test -L /service/urcd-curvecpconnect-"$1:$2" || \ + ln -s /services/urcd-curvecpconnect-"$1:$2" \ + /service/urcd-curvecpconnect-"$1:$2" || \ + exit 1 diff --git a/bin/add-curvecplisten b/bin/add-curvecplisten new file mode 100755 index 0000000000000000000000000000000000000000..379d4e9f6de560ae6d3ba174acfff77aa0e95b11 --- /dev/null +++ b/bin/add-curvecplisten @@ -0,0 +1,31 @@ +#!/bin/sh +[ -z $3 ] && \ + echo $0' <addr> <port> </path/to/socket/>' 1>&2 && \ + exit 64 + +mkdir -p /services/urcd-curvecplisten-"$1:$2" || exit 1 + +test -L /services/urcd-curvecplisten-"$1:$2"/serv || \ + ln -s `pwd`/env/serv /services/urcd-curvecplisten-"$1:$2"/serv || \ + exit 1 + +curvecpmakekey /services/urcd-curvecplisten-"$1:$2"/curvecp || exit 1 + +printf \ +"#!/bin/sh -e +exec curvecpserver \`cat serv\` curvecp $1 $2 01110101011100100110001101100100 curvecpmessage ./urcstream $3\n" > \ +/services/urcd-curvecplisten-"$1:$2"/run || exit + +chmod +x /services/urcd-curvecplisten-"$1:$2"/run || exit 1 + +test -L /services/urcd-curvecplisten-"$1:$2"/urcstream || \ + ln -s `pwd`/urcstream /services/urcd-curvecplisten-"$1:$2"/urcstream || \ + exit 1 + +test -L /service/urcd-curvecplisten-"$1:$2" || \ + ln -s /services/urcd-curvecplisten-"$1:$2" \ + /service/urcd-curvecplisten-"$1:$2" || \ + exit 1 + +printf \ +"PUBKEY: `curvecpprintkey /services/urcd-curvecplisten-"$1:$2"/curvecp`\n" diff --git a/bin/add-tcpconnect b/bin/add-tcpconnect new file mode 100755 index 0000000000000000000000000000000000000000..8e9a7fb0ae88bb5558c77b179d7ec2e24f91bd00 --- /dev/null +++ b/bin/add-tcpconnect @@ -0,0 +1,26 @@ +#!/bin/sh +[ -z $3 ] && \ + echo $0' <addr> <port> </path/to/socket/>' 1>&2 && \ + exit 64 + +mkdir -p /services/urcd-tcpconnect-"$1:$2" || exit 1 + +printf '#!/bin/sh -e\n' > \ + /services/urcd-tcpconnect-"$1:$2"/run || exit 1 + +printf 'export TCPCLIENT=1\n' >> \ + /services/urcd-tcpconnect-"$1:$2"/run || exit 1 + +printf "exec tcpclient $1 $2 ./urcstream $3\n" >> \ + /services/urcd-tcpconnect-"$1:$2"/run || exit 1 + +chmod +x /services/urcd-tcpconnect-"$1:$2"/run || exit 1 + +test -L /services/urcd-tcpconnect-"$1:$2"/urcstream || \ + ln -s `pwd`/urcstream /services/urcd-tcpconnect-"$1:$2"/urcstream || \ + exit 1 + +test -L /service/urcd-tcpconnect-"$1:$2" || \ + ln -s /services/urcd-tcpconnect-"$1:$2" \ + /service/urcd-tcpconnect-"$1:$2" || \ + exit 1 diff --git a/bin/add-tcplisten b/bin/add-tcplisten new file mode 100755 index 0000000000000000000000000000000000000000..71f7d7704792d1b244970df8d29dac037a027e62 --- /dev/null +++ b/bin/add-tcplisten @@ -0,0 +1,23 @@ +#!/bin/sh +[ -z $3 ] && \ + echo $0' <addr> <port> </path/to/socket/>' 1>&2 && \ + exit 64 + +mkdir -p /services/urcd-tcplisten-"$1:$2" || exit 1 + +printf '#!/bin/sh -e\n' > \ + /services/urcd-tcplisten-"$1:$2"/run || exit 1 + +printf "exec tcpserver $1 $2 ./urcstream $3\n" >> \ + /services/urcd-tcplisten-"$1:$2"/run || exit 1 + +chmod +x /services/urcd-tcplisten-"$1:$2"/run || exit 1 + +test -L /services/urcd-tcplisten-"$1:$2"/urcstream || \ + ln -s `pwd`/urcstream /services/urcd-tcplisten-"$1:$2"/urcstream || \ + exit 1 + +test -L /service/urcd-tcplisten-"$1:$2" || \ + ln -s /services/urcd-tcplisten-"$1:$2" \ + /service/urcd-tcplisten-"$1:$2" || \ + exit 1 diff --git a/src/urcstream.pyx b/src/urcstream.pyx new file mode 100644 index 0000000000000000000000000000000000000000..f514fb1d26688de4aba9abe5c64ad9ca6e0af467 --- /dev/null +++ b/src/urcstream.pyx @@ -0,0 +1,74 @@ +#!/usr/bin/env python +import socket +import select +import signal +import sys +import os + +wr = 1 +if int(os.getenv('TCPCLIENT',0)): + wr += 6 +rd = wr - 1 + +def sock_close(sn,sf): + try: + os.remove(str(os.getpid())) + except: + pass + if sn: + sys.exit(0) + +signal.signal(1 ,sock_close) +signal.signal(2 ,sock_close) +signal.signal(15,sock_close) + +os.chdir(sys.argv[1]) +os.chroot(os.getcwd()) + +sock=socket.socket(1,2) +sock_close(0,0) +sock.bind(str(os.getpid())) +sock.setblocking(0) +sd=sock.fileno() + +client_POLLIN=select.poll() +client_POLLIN.register(rd,3) + +server_POLLIN=select.poll() +server_POLLIN.register(sd,3) + +def client_poll(): + return len( client_POLLIN.poll(256- + (256*len( server_POLLIN.poll(0))) + )) + +def server_poll(): + return len( server_POLLIN.poll(256- + (256*len( client_POLLIN.poll(0))) + )) + +while 1: + if client_poll(): + buffer = str() + while 1: + byte = os.read(rd,1) + if not byte or len(buffer)>1024: + sock_close(15,0) + buffer+=byte + if byte == '\n': + break + for path in os.listdir(os.getcwd()): + try: + sock.sendto(buffer,path) + except: + pass + + while server_poll(): + buffer, path = sock.recvfrom(1024) + if not path: + continue + try: + if not os.write(wr,buffer): + sock_close(15,0) + except: + sock_close(15,0)
-----END OF PAGE-----
-- Response ended
-- Page fetched on Sun Jun 2 16:52:48 2024