-- 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:

git.thebackupbox.net

urcd

git://git.thebackupbox.net/urcd

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

index 45e7a4fb4a75b0ab9d28ecf0287f130fb33a580a..

index ..947e67b381c70956e3a6f31682a53efc7a5b3c79 100644

--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@ build
 urcd
 urcrecv
 urcsend
+urcstream
 socket
 supervise
 stdin
diff --git a/Make.sh b/Make.sh

index 1a01a9935b18d05cc96f8858691f0cf0a7ec5627..

index ..6410eb2140f2706b4484f60686b435ca0b006fbc 100755

--- 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

index 466cc8deb0ab57cd59c937684e454d0e0861a4f2..

index ..cad5ff77d869c18bd91579c0c7717348293731f2 100644

--- 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