[Pkg-privacy-commits] [onioncat] 28/340: freeskippers added

Ximin Luo infinity0 at moszumanska.debian.org
Sat Aug 22 13:04:22 UTC 2015


This is an automated email from the git hooks/post-receive script.

infinity0 pushed a commit to branch debian
in repository onioncat.

commit 2c264dac71bc02adb8712b5327b6a61b245144c0
Author: eagle <eagle at 58e1ccc2-750e-0410-8d0d-f93ca75ab447>
Date:   Sat Mar 15 14:43:13 2008 +0000

    freeskippers added
    
    git-svn-id: http://www.cypherpunk.at/svn/onioncat/trunk@168 58e1ccc2-750e-0410-8d0d-f93ca75ab447
---
 Makefile    |  22 +++++-----
 ocat.h      |   2 +
 ocatroute.c | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 154 insertions(+), 14 deletions(-)

diff --git a/Makefile b/Makefile
index 653d431..f13e9af 100644
--- a/Makefile
+++ b/Makefile
@@ -74,11 +74,11 @@ DIST_ARCHIVES = $(distdir).tar.gz
 GZIP_ENV = --best
 distuninstallcheck_listfiles = find . -type f -print
 distcleancheck_listfiles = find . -type f -print
-ACLOCAL = ${SHELL} /home/eagle/SVNroot/lbfiser/onioncat/trunk/missing --run aclocal-1.10
-AMTAR = ${SHELL} /home/eagle/SVNroot/lbfiser/onioncat/trunk/missing --run tar
-AUTOCONF = ${SHELL} /home/eagle/SVNroot/lbfiser/onioncat/trunk/missing --run autoconf
-AUTOHEADER = ${SHELL} /home/eagle/SVNroot/lbfiser/onioncat/trunk/missing --run autoheader
-AUTOMAKE = ${SHELL} /home/eagle/SVNroot/lbfiser/onioncat/trunk/missing --run automake-1.10
+ACLOCAL = ${SHELL} /home/eagle/SVN/lbfiser/onioncat/trunk/missing --run aclocal-1.10
+AMTAR = ${SHELL} /home/eagle/SVN/lbfiser/onioncat/trunk/missing --run tar
+AUTOCONF = ${SHELL} /home/eagle/SVN/lbfiser/onioncat/trunk/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/eagle/SVN/lbfiser/onioncat/trunk/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/eagle/SVN/lbfiser/onioncat/trunk/missing --run automake-1.10
 AWK = gawk
 CC = gcc
 CCDEPMODE = depmode=gcc3
@@ -103,7 +103,7 @@ LDFLAGS =
 LIBOBJS = 
 LIBS = -lrt -lpthread 
 LTLIBOBJS = 
-MAKEINFO = ${SHELL} /home/eagle/SVNroot/lbfiser/onioncat/trunk/missing --run makeinfo
+MAKEINFO = ${SHELL} /home/eagle/SVN/lbfiser/onioncat/trunk/missing --run makeinfo
 MKDIR_P = /bin/mkdir -p
 OBJEXT = o
 PACKAGE = onioncat
@@ -117,10 +117,10 @@ SET_MAKE =
 SHELL = /bin/sh
 STRIP = 
 VERSION = 0.1.2
-abs_builddir = /home/eagle/SVNroot/lbfiser/onioncat/trunk
-abs_srcdir = /home/eagle/SVNroot/lbfiser/onioncat/trunk
-abs_top_builddir = /home/eagle/SVNroot/lbfiser/onioncat/trunk
-abs_top_srcdir = /home/eagle/SVNroot/lbfiser/onioncat/trunk
+abs_builddir = /home/eagle/SVN/lbfiser/onioncat/trunk
+abs_srcdir = /home/eagle/SVN/lbfiser/onioncat/trunk
+abs_top_builddir = /home/eagle/SVN/lbfiser/onioncat/trunk
+abs_top_srcdir = /home/eagle/SVN/lbfiser/onioncat/trunk
 ac_ct_CC = gcc
 am__include = include
 am__leading_dot = .
@@ -139,7 +139,7 @@ host_alias =
 htmldir = ${docdir}
 includedir = ${prefix}/include
 infodir = ${datarootdir}/info
-install_sh = $(SHELL) /home/eagle/SVNroot/lbfiser/onioncat/trunk/install-sh
+install_sh = $(SHELL) /home/eagle/SVN/lbfiser/onioncat/trunk/install-sh
 libdir = ${exec_prefix}/lib
 libexecdir = ${exec_prefix}/libexec
 localedir = ${datarootdir}/locale
diff --git a/ocat.h b/ocat.h
index bf7f79b..df50994 100644
--- a/ocat.h
+++ b/ocat.h
@@ -1,6 +1,7 @@
 #ifndef OCAT_H
 #define OCAT_H
 
+#define PEERLIST
 
 #include <time.h>
 #ifdef HAVE_NETINET_IN_H
@@ -77,6 +78,7 @@ typedef struct SocksHdr
 
 typedef struct OcatPeer
 {
+   struct OcatPeer *next;
    struct in6_addr addr;   //<! remote address of peer
    int tcpfd;              //<! remote file descriptor
    time_t time;            //<! timestamp of latest packet
diff --git a/ocatroute.c b/ocatroute.c
index 48afd44..f3eea9f 100644
--- a/ocatroute.c
+++ b/ocatroute.c
@@ -30,7 +30,11 @@ static int sockfd_;
 // used for internal communication
 static int lpfd_[2];
 // array of active peers
+#ifndef PEERLIST
 static OcatPeer_t peer_[MAXPEERS];
+#else
+static OcatPeer_t *peer_ = NULL;
+#endif
 // mutex for locking array of peers
 pthread_mutex_t peer_mutex_ = PTHREAD_MUTEX_INITIALIZER;
 // packet queue pointer
@@ -59,12 +63,15 @@ int vrec_ = 0;
 
 void init_peers(void)
 {
+#ifndef PEERLIST
    memset(peer_, 0, sizeof(OcatPeer_t) * MAXPEERS);
+#endif
 }
 
 
 OcatPeer_t *search_peer(const struct in6_addr *addr)
 {
+#ifndef PEERLIST
    int i;
 
    for (i = 0; i < MAXPEERS; i++)
@@ -76,11 +83,20 @@ OcatPeer_t *search_peer(const struct in6_addr *addr)
       return NULL;
 
    return &peer_[i];
+#else
+   OcatPeer_t *peer;
+
+   for (peer = peer_; peer; peer = peer->next)
+      if (!memcmp(addr, &peer->addr, sizeof(struct in6_addr)))
+         return peer;
+   return NULL;
+#endif
 }
 
 
 OcatPeer_t *get_empty_peer(void)
 {
+#ifndef PEERLIST
    int i;
 
    for (i = 0; i < MAXPEERS; i++)
@@ -88,12 +104,36 @@ OcatPeer_t *get_empty_peer(void)
          return &peer_[i];
 
    return NULL;
+#else
+   OcatPeer_t *peer;
+
+   if (!(peer = calloc(1, sizeof(OcatPeer_t))))
+      log_msg(L_ERROR, "cannot get memory for new peer: %s", strerror(errno));
+   else
+   {
+      peer->next = peer_;
+      peer_ = peer;
+   }
+
+   return peer;  
+#endif
 }
 
 
 void delete_peer(OcatPeer_t *peer)
 {
+#ifndef PEERLIST
    memset(peer, 0, sizeof(OcatPeer_t));
+#else
+   OcatPeer_t **p;
+   for (p = &peer_; *p; p = &(*p)->next)
+      if (*p == peer)
+      {
+         *p = peer->next;
+         free(peer);
+         return;
+      }
+#endif
 }
 
 
@@ -287,12 +327,17 @@ void cleanup_socket(int fd, OcatPeer_t *peer)
 
 void *socket_receiver(void *p)
 {
-   int i, fd, maxfd, len, state, plen;
+   int fd, maxfd, len, state, plen;
    char buf[FRAME_SIZE];
    char addr[INET6_ADDRSTRLEN];
    fd_set rset;
    struct ip6_hdr *ihd;
    ihd = (struct ip6_hdr*) &buf[4];
+#ifdef PEERLIST
+   OcatPeer_t *peer;
+#else
+   int i;
+#endif
 
    if (pipe(lpfd_) < 0)
       log_msg(L_FATAL, "[init_socket_receiver] could not create pipe for socket_receiver: \"%s\"", strerror(errno)), exit(1);
@@ -305,6 +350,7 @@ void *socket_receiver(void *p)
 
       // create set for all available peers to read
       pthread_mutex_lock(&peer_mutex_);
+#ifndef PEERLIST
       for (i = 0; i < MAXPEERS; i++)
       {
          // only select active peers
@@ -316,6 +362,19 @@ void *socket_receiver(void *p)
          if (fd > maxfd)
             maxfd = fd;
       }
+#else
+      for (peer = peer_; peer; peer = peer->next)
+      {
+         // only select active peers
+         if (peer->state != PEER_ACTIVE)
+            continue;
+         if ((fd = peer->tcpfd) >= FD_SETSIZE)
+            log_msg(L_FATAL, "%d >= FD_SETIZE(%d)", fd, FD_SETSIZE), exit(1);
+         FD_SET(fd, &rset);
+         if (fd > maxfd)
+            maxfd = fd;
+      }
+#endif
       pthread_mutex_unlock(&peer_mutex_);
 
       log_msg(L_DEBUG, "[socket_receiver] is selecting...");
@@ -333,11 +392,20 @@ void *socket_receiver(void *p)
       }
 
       //FIXME: should only run until num select returned
+#ifndef PEERLIST
       for (i = 0; i < MAXPEERS; i++)
+#else
+      for (peer = peer_; peer; peer = peer->next)
+#endif
       {
          pthread_mutex_lock(&peer_mutex_);
+#ifndef PEERLIST
          state = peer_[i].state;
          fd = peer_[i].tcpfd;
+#else
+         state = peer->state;
+         fd = peer->tcpfd;
+#endif
          pthread_mutex_unlock(&peer_mutex_);
 
          if (state != PEER_ACTIVE)
@@ -361,7 +429,11 @@ void *socket_receiver(void *p)
                log_msg(L_NOTICE, "[socket_receiver] fd %d reached EOF, closing.", fd);
                close(fd);
                pthread_mutex_lock(&peer_mutex_);
+#ifndef PEERLIST
                delete_peer(&peer_[i]);
+#else
+               delete_peer(peer);
+#endif
                pthread_mutex_unlock(&peer_mutex_);
                continue;
             }
@@ -374,6 +446,7 @@ void *socket_receiver(void *p)
             }
 
             pthread_mutex_lock(&peer_mutex_);
+#ifndef PEERLIST
             // update timestamp
             peer_[i].time = time(NULL);
             peer_[i].in += len;
@@ -384,6 +457,18 @@ void *socket_receiver(void *p)
                log_msg(L_NOTICE, "[socket_receiver] incoming connection on %d from %s is now identified", fd,
                      inet_ntop(AF_INET6, &peer_[i].addr, addr, INET6_ADDRSTRLEN));
             }
+#else
+            // update timestamp
+            peer->time = time(NULL);
+            peer->in += len;
+            // set IP address if it is not set yet and frame is valid
+            if (plen && !memcmp(&peer->addr, &in6addr_any, sizeof(struct in6_addr)))
+            {
+               memcpy(&peer->addr, &ihd->ip6_src, sizeof(struct in6_addr));
+               log_msg(L_NOTICE, "[socket_receiver] incoming connection on %d from %s is now identified", fd,
+                     inet_ntop(AF_INET6, &peer->addr, addr, INET6_ADDRSTRLEN));
+            }
+#endif
             pthread_mutex_unlock(&peer_mutex_);
             
             log_msg(L_DEBUG, "[socket_receiver] trying fhdr rewriting");
@@ -422,7 +507,12 @@ OcatPeer_t *insert_peer(int fd, const struct in6_addr *addr)
    set_nonblock(fd);
 
    pthread_mutex_lock(&peer_mutex_);
-   peer = get_empty_peer();
+   if (!(peer = get_empty_peer()))
+   {
+      pthread_mutex_unlock(&peer_mutex_);
+      log_msg(L_ERROR, "could not get new empty peer");
+      return NULL;
+   }
    peer->tcpfd = fd;
    peer->state = PEER_ACTIVE;
    peer->otime = peer->time = time(NULL);
@@ -690,13 +780,18 @@ void packet_forwarder(void)
 
 void *socket_cleaner(void *p)
 {
+#ifndef PEERLIST
    int i;
+#else
+   OcatPeer_t *peer;
+#endif
 
    for (;;)
    {
       sleep(CLEANER_WAKEUP);
       log_msg(L_DEBUG, "wakeup");
       pthread_mutex_lock(&peer_mutex_);
+#ifndef PEERLIST
       for (i = 0; i < MAXPEERS; i++)
       {
          if (peer_[i].state && peer_[i].time + MAX_IDLE_TIME < time(NULL))
@@ -706,6 +801,17 @@ void *socket_cleaner(void *p)
             delete_peer(&peer_[i]);
          }
       }
+#else
+      for (peer = peer_; peer; peer = peer->next)
+      {
+         if (peer->state && peer->time + MAX_IDLE_TIME < time(NULL))
+         {
+            log_msg(L_NOTICE, "peer %d timed out, closing.", peer->tcpfd);
+            close(peer->tcpfd);
+            delete_peer(peer);
+         }
+      }
+#endif
       pthread_mutex_unlock(&peer_mutex_);
    }
 }
@@ -716,9 +822,14 @@ void *ocat_controller(void *p)
    int fd, sfd;
    struct sockaddr_in in;
    char buf[FRAME_SIZE], addrstr[INET6_ADDRSTRLEN], onionstr[ONION_NAME_SIZE], timestr[32];
-   int rlen, i, cfd;
+   int rlen, cfd;
    struct tm *tm;
    OcatThread_t *th;
+#ifndef PEERLIST
+   int i;
+#else
+   OcatPeer_t *peer;
+#endif
 
    memset(&in, 0, sizeof(in));
    in.sin_family = AF_INET;
@@ -762,6 +873,7 @@ void *ocat_controller(void *p)
          else if (!strncmp(buf, "status", 6))
          {
             pthread_mutex_lock(&peer_mutex_);
+#ifndef PEERLIST
             for (i = 0; i < MAXPEERS; i++)
                if (peer_[i].state == PEER_ACTIVE)
                {
@@ -775,12 +887,28 @@ void *ocat_controller(void *p)
                   if (write(fd, buf, strlen(buf)) != strlen(buf))
                      log_msg(L_ERROR, "couldn't write %d bytes to control socket %d", strlen(buf), fd);
                }
+#else
+            for (peer = peer_; peer; peer = peer->next)
+               if (peer->state == PEER_ACTIVE)
+               {
+                  tm = localtime(&peer->otime);
+                  strftime(timestr, 32, "%c", tm);
+                  sprintf(buf, "[%s]\n fd = %d\n addr = %s\n dir = \"%s\"\n idle = %lds\n bytes_in = %ld\n bytes_out = %ld\n setup_delay = %lds\n opening_time = \"%s\"\n",
+                        ipv6tonion(&peer->addr, onionstr), peer->tcpfd,
+                        inet_ntop(AF_INET6, &peer->addr, addrstr, INET6_ADDRSTRLEN),
+                        peer->dir == PEER_INCOMING ? "in" : "out",
+                        time(NULL) - peer->time, peer->in, peer->out, peer->sdelay, timestr);
+                  if (write(fd, buf, strlen(buf)) != strlen(buf))
+                     log_msg(L_ERROR, "couldn't write %d bytes to control socket %d", strlen(buf), fd);
+               }
+#endif
             pthread_mutex_unlock(&peer_mutex_);
          }
          else if (!strncmp(buf, "close ", 6))
          {
             cfd = atoi(&buf[6]);
             pthread_mutex_lock(&peer_mutex_);
+#ifndef PEERLIST
             for (i = 0; i < MAXPEERS; i++)
                if (peer_[i].tcpfd == cfd)
                {
@@ -789,6 +917,16 @@ void *ocat_controller(void *p)
                   delete_peer(&peer_[i]);
                   break;
                }
+#else
+            for (peer = peer_; peer; peer = peer->next)
+               if (peer->tcpfd == cfd)
+               {
+                  log_msg(L_NOTICE, "close request for %d", cfd);
+                  close(cfd);
+                  delete_peer(peer);
+                  break;
+               }
+#endif
             pthread_mutex_unlock(&peer_mutex_);
          }
          else if (!strncmp(buf, "threads", 7))

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-privacy/packages/onioncat.git



More information about the Pkg-privacy-commits mailing list