commit edc557f83905eb2940f315e31d1841971357aa6a
Author: David Goulet <dgou...@ev0ke.net>
Date:   Thu Jun 6 20:39:56 2013 -0400

    Add basic connection object interface
    
    Signed-off-by: David Goulet <dgou...@ev0ke.net>
---
 src/common/connection.c |   60 +++++++++++++++++++++++++++++++++++++++++++++++
 src/common/connection.h |   38 ++++++++++++++++++++++++++++++
 2 files changed, 98 insertions(+)

diff --git a/src/common/connection.c b/src/common/connection.c
new file mode 100644
index 0000000..0831340
--- /dev/null
+++ b/src/common/connection.c
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2013 - David Goulet <dgou...@ev0ke.net>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License, version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "connection.h"
+
+/*
+ * Create a new connection with the given fd and destination address.
+ *
+ * Return a newly allocated connection object or else NULL.
+ */
+struct connection *connection_create(int fd, struct sockaddr_in *dest)
+{
+       struct connection *conn;
+
+       assert(dest);
+
+       conn = zmalloc(sizeof(*conn));
+       if (!conn) {
+               PERROR("zmalloc connection");
+               goto error;
+       }
+
+       conn->fd = fd;
+       memcpy(conn->dest_addr, dest, sizeof(conn->dest_addr));
+
+       return conn;
+
+error:
+       return NULL;
+}
+
+/*
+ * Destroy a connection by freeing its memory.
+ */
+void connection_destroy(struct connection *conn)
+{
+       if (!conn) {
+               return;
+       }
+
+       /* Remove from the double linked list. */
+       conn->prev->next = conn->next;
+       conn->next->prev = conn->prev;
+
+       free(conn);
+}
diff --git a/src/common/connection.h b/src/common/connection.h
new file mode 100644
index 0000000..c8711ad
--- /dev/null
+++ b/src/common/connection.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2013 - David Goulet <dgou...@ev0ke.net>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License, version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef TORSOCKS_CONNECTION_H
+#define TORSOCKS_CONNECTION_H
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+struct connection {
+       /* Socket fd and also unique ID. */
+       int fd;
+
+       /* Location of the SOCKS5 server. */
+       struct sockaddr_in socks5_addr;
+
+       /* Remove destination that passes through Tor. */
+       struct sockaddr_in dest_addr;
+
+       /* Next connection of the linked list. */
+       struct connection *next, *prev;
+};
+
+#endif /* TORSOCKS_CONNECTION_H */



_______________________________________________
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to