aboutsummaryrefslogtreecommitdiff
path: root/static/patches/ouroboros-ioq3.patch
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2019-10-06 21:10:46 +0200
committerDimitri Staessens <dimitri@ouroboros.rocks>2019-10-06 21:10:46 +0200
commit568553394d0a8b34668a75c9839a0f1f426469b2 (patch)
tree175c08844f05611b059ba6900fb6519dbbc735d2 /static/patches/ouroboros-ioq3.patch
parentd5d6f70371958eec0679831abd283498ff2731e5 (diff)
downloadwebsite-568553394d0a8b34668a75c9839a0f1f426469b2.tar.gz
website-568553394d0a8b34668a75c9839a0f1f426469b2.zip
theme: Switch to docsy theme
Diffstat (limited to 'static/patches/ouroboros-ioq3.patch')
-rw-r--r--static/patches/ouroboros-ioq3.patch415
1 files changed, 0 insertions, 415 deletions
diff --git a/static/patches/ouroboros-ioq3.patch b/static/patches/ouroboros-ioq3.patch
deleted file mode 100644
index 2c78843..0000000
--- a/static/patches/ouroboros-ioq3.patch
+++ /dev/null
@@ -1,415 +0,0 @@
-From c1cf00d86a4a3f5de170f968077f5b1e80b6b482 Mon Sep 17 00:00:00 2001
-From: Dimitri Staessens <dimitri.staessens@ugent.be>
-Date: Mon, 22 Jan 2018 10:25:54 +0100
-Subject: [PATCH] qcommon: Add Ouroboros support (experimental)
-
-This adds support for the Ouroboros IPC subsystem. This patch was
-written by
-
-Dimitri Staessens <dimitri.staessens@ugent.be>
-Sander Vrijders <sander.vrijders@ugent.be>
-Addy Bombeke <addy.bombeke@ugent.be>
----
- Makefile | 6 ++
- code/client/cl_main.c | 6 +-
- code/qcommon/net_chan.c | 6 ++
- code/qcommon/net_ip.c | 27 +++++++-
- code/qcommon/net_ouroboros.c | 144 +++++++++++++++++++++++++++++++++++++++++++
- code/qcommon/net_ouroboros.h | 46 ++++++++++++++
- code/qcommon/qcommon.h | 4 +-
- 7 files changed, 234 insertions(+), 5 deletions(-)
- create mode 100644 code/qcommon/net_ouroboros.c
- create mode 100644 code/qcommon/net_ouroboros.h
-
-diff --git a/Makefile b/Makefile
-index 4aa9f519..12da9fde 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1645,6 +1645,7 @@ Q3OBJ = \
- $(B)/client/msg.o \
- $(B)/client/net_chan.o \
- $(B)/client/net_ip.o \
-+ $(B)/client/net_ouroboros.o \
- $(B)/client/huffman.o \
- \
- $(B)/client/snd_adpcm.o \
-@@ -2209,6 +2210,7 @@ Q3DOBJ = \
- $(B)/ded/msg.o \
- $(B)/ded/net_chan.o \
- $(B)/ded/net_ip.o \
-+ $(B)/ded/net_ouroboros.o \
- $(B)/ded/huffman.o \
- \
- $(B)/ded/q_math.o \
-@@ -2943,3 +2945,7 @@ endif
- ifneq ($(findstring clean, $(MAKECMDGOALS)),)
- .NOTPARALLEL:
- endif
-+
-+#Ouroboros support
-+LIBS+="-louroboros-dev"
-+LIBS+="-lpthread"
-diff --git a/code/client/cl_main.c b/code/client/cl_main.c
-index 82d0edfb..33a85f83 100644
---- a/code/client/cl_main.c
-+++ b/code/client/cl_main.c
-@@ -1697,7 +1697,7 @@ void CL_Connect_f( void ) {
- netadrtype_t family = NA_UNSPEC;
-
- if ( argc != 2 && argc != 3 ) {
-- Com_Printf( "usage: connect [-4|-6] server\n");
-+ Com_Printf( "usage: connect [-4|-6|-O] server\n");
- return;
- }
-
-@@ -1709,8 +1709,10 @@ void CL_Connect_f( void ) {
- family = NA_IP;
- else if(!strcmp(Cmd_Argv(1), "-6"))
- family = NA_IP6;
-+ else if(!strcmp(Cmd_Argv(1), "-O"))
-+ family = NA_OUROBOROS;
- else
-- Com_Printf( "warning: only -4 or -6 as address type understood.\n");
-+ Com_Printf( "warning: only -4, -6 or -O as address type understood.\n");
-
- Q_strncpyz( server, Cmd_Argv(2), sizeof( server ) );
- }
-diff --git a/code/qcommon/net_chan.c b/code/qcommon/net_chan.c
-index 9e7d9b87..b0103cc3 100644
---- a/code/qcommon/net_chan.c
-+++ b/code/qcommon/net_chan.c
-@@ -22,6 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- #include "q_shared.h"
- #include "qcommon.h"
-+#include "net_ouroboros.h"
-
- /*
-
-@@ -638,6 +639,11 @@ int NET_StringToAdr( const char *s, netadr_t *a, netadrtype_t family )
- return 1;
- }
-
-+ if(family == NA_OUROBOROS) {
-+ OUROBOROS_Resolve(s, a);
-+ return 1;
-+ }
-+
- Q_strncpyz( base, s, sizeof( base ) );
-
- if(*base == '[' || Q_CountChar(base, ':') > 1)
-diff --git a/code/qcommon/net_ip.c b/code/qcommon/net_ip.c
-index bcccda20..1bcce311 100644
---- a/code/qcommon/net_ip.c
-+++ b/code/qcommon/net_ip.c
-@@ -22,6 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- #include "../qcommon/q_shared.h"
- #include "../qcommon/qcommon.h"
-+#include "net_ouroboros.h"
-
- #ifdef _WIN32
- # include <winsock2.h>
-@@ -392,6 +393,9 @@ qboolean NET_CompareBaseAdrMask(netadr_t a, netadr_t b, int netmask)
- byte cmpmask, *addra, *addrb;
- int curbyte;
-
-+ if (a.type == NA_OUROBOROS && b.type == NA_OUROBOROS)
-+ return a.fd == b.fd ? qtrue : qfalse;
-+
- if (a.type != b.type)
- return qfalse;
-
-@@ -495,6 +499,9 @@ qboolean NET_CompareAdr (netadr_t a, netadr_t b)
- if(!NET_CompareBaseAdr(a, b))
- return qfalse;
-
-+ if (a.type == NA_OUROBOROS && b.type == NA_OUROBOROS)
-+ return a.fd == b.fd ? qtrue :qfalse;
-+
- if (a.type == NA_IP || a.type == NA_IP6)
- {
- if (a.port == b.port)
-@@ -627,6 +634,9 @@ qboolean NET_GetPacket(netadr_t *net_from, msg_t *net_message, fd_set *fdr)
- }
- }
-
-+ ret = OUROBOROS_Recvfrom(net_message, net_from);
-+ if (ret > 0)
-+ return qtrue;
-
- return qfalse;
- }
-@@ -644,6 +654,11 @@ void Sys_SendPacket( int length, const void *data, netadr_t to ) {
- int ret = SOCKET_ERROR;
- struct sockaddr_storage addr;
-
-+ if (to.type == NA_OUROBOROS) {
-+ OUROBOROS_Sendto(length, data, &to);
-+ return;
-+ }
-+
- if( to.type != NA_BROADCAST && to.type != NA_IP && to.type != NA_IP6 && to.type != NA_MULTICAST6)
- {
- Com_Error( ERR_FATAL, "Sys_SendPacket: bad address type" );
-@@ -1585,8 +1600,14 @@ void NET_Init( void ) {
- #endif
-
- NET_Config( qtrue );
--
-+
- Cmd_AddCommand ("net_restart", NET_Restart_f);
-+
-+#ifdef DEDICATED
-+ OUROBOROS_Init(1);
-+#else
-+ OUROBOROS_Init(0);
-+#endif
- }
-
-
-@@ -1602,6 +1623,8 @@ void NET_Shutdown( void ) {
-
- NET_Config( qfalse );
-
-+ OUROBOROS_Fini();
-+
- #ifdef _WIN32
- WSACleanup();
- winsockInitialized = qfalse;
-@@ -1694,7 +1717,7 @@ void NET_Sleep(int msec)
-
- if(retval == SOCKET_ERROR)
- Com_Printf("Warning: select() syscall failed: %s\n", NET_ErrorString());
-- else if(retval > 0)
-+ else
- NET_Event(&fdr);
- }
-
-diff --git a/code/qcommon/net_ouroboros.c b/code/qcommon/net_ouroboros.c
-new file mode 100644
-index 00000000..ee98a2e0
---- /dev/null
-+++ b/code/qcommon/net_ouroboros.c
-@@ -0,0 +1,144 @@
-+/*
-+ * Ouroboros calls for ioq3
-+ *
-+ * Addy Bombeke <addy.bombeke@ugent.be>
-+ * Sander Vrijders <sander.vrijders@intec.ugent.be>
-+ * Dimitri Staessens <dimitri.staessens@intec.ugent.be>
-+ *
-+ * Copyright (C) 2015 - 2018
-+ *
-+ * Modified from software originally written as part of the MSc
-+ * thesis in electrical engineering,
-+ *
-+ * "Comparing RINA to TCP/IP for latency-constrained applications",
-+ *
-+ * at Ghent University, Academic Year 2014-2015
-+ *
-+ * This program is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation, either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * 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, see <http://www.gnu.org/licenses/>.
-+ *
-+ */
-+
-+#include "net_ouroboros.h"
-+
-+#include <stdio.h>
-+#include <pthread.h>
-+#include <unistd.h>
-+#include <stdlib.h>
-+
-+#include <ouroboros/dev.h>
-+#include <ouroboros/fqueue.h>
-+
-+fset_t * flows;
-+fqueue_t * fq;
-+
-+void OUROBOROS_Resolve(const char * s, netadr_t * a)
-+{
-+ int fd;
-+
-+ a->type = NA_OUROBOROS;
-+
-+ fd = flow_alloc(s, NULL, NULL);
-+ if (fd < 0) {
-+ printf("Failed to allocate flow.\n");
-+ return;
-+ }
-+
-+ fset_add(flows, fd);
-+
-+ a->fd = fd;
-+}
-+
-+void OUROBOROS_Sendto(int length, const void * data, netadr_t * to)
-+{
-+ flow_write(to->fd, (void *) data, length);
-+}
-+
-+int OUROBOROS_Recvfrom(msg_t * msg, netadr_t * from)
-+{
-+ int fd;
-+ ssize_t count = 0;
-+ struct timespec timeout = {0, 0};
-+
-+ fevent(flows, fq, &timeout);
-+
-+ if ((fd = fqueue_next(fq)) >= 0) {
-+ count = flow_read(fd, msg->data, msg->maxsize);
-+ if (count < 0)
-+ return 0;
-+
-+ if (count > msg->maxsize) {
-+ printf("Oversized packet received.\n");
-+ return 0;
-+ }
-+
-+ from->type = NA_OUROBOROS;
-+ from->fd = fd;
-+ msg->cursize = count;
-+ msg->readcount = 0;
-+
-+ return count;
-+ }
-+
-+ return 0;
-+}
-+
-+static void * OUROBOROS_Server_Accept(void * o)
-+{
-+ int fd;
-+
-+ (void) o;
-+
-+ for (;;) {
-+ fd = flow_accept(NULL, NULL);
-+ if (fd < 0) {
-+ printf("Failed to accept flow.\n");
-+ continue;
-+ }
-+
-+ fset_add(flows, fd);
-+ }
-+
-+ return (void *) 0;
-+}
-+
-+void OUROBOROS_Init(int server)
-+{
-+ pthread_t accept_thread;
-+
-+ flows = fset_create();
-+ if (flows == NULL) {
-+ printf("Failed to create flow set.\n");
-+ return;
-+ }
-+
-+ fq = fqueue_create();
-+ if (fq == NULL) {
-+ printf("Failed to create flow queue.\n");
-+ return;
-+ }
-+
-+ if (server) {
-+ pthread_create(&accept_thread,
-+ NULL,
-+ OUROBOROS_Server_Accept,
-+ NULL);
-+ pthread_detach(accept_thread);
-+ }
-+}
-+
-+void OUROBOROS_Fini(void)
-+{
-+ fqueue_destroy(fq);
-+ fset_destroy(flows);
-+}
-diff --git a/code/qcommon/net_ouroboros.h b/code/qcommon/net_ouroboros.h
-new file mode 100644
-index 00000000..5f85987e
---- /dev/null
-+++ b/code/qcommon/net_ouroboros.h
-@@ -0,0 +1,46 @@
-+/*
-+ * Ouroboros calls for ioq3
-+ *
-+ * Addy Bombeke <addy.bombeke@ugent.be>
-+ * Sander Vrijders <sander.vrijders@intec.ugent.be>
-+ * Dimitri Staessens <dimitri.staessens@intec.ugent.be>
-+ *
-+ * Copyright (C) 2015 - 2018
-+ *
-+ * Modified from software originally written as part of the MSc
-+ * thesis in electrical engineering,
-+ *
-+ * "Comparing RINA to TCP/IP for latency-constrained applications",
-+ *
-+ * at Ghent University, Academic Year 2014-2015
-+ *
-+ * This program is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation, either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * 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, see <http://www.gnu.org/licenses/>.
-+ *
-+ */
-+
-+#ifndef NET_OUROBOROS_H
-+#define NET_OUROBOROS_H
-+
-+#include "../qcommon/q_shared.h"
-+#include "../qcommon/qcommon.h"
-+
-+void OUROBOROS_Init(int server);
-+void OUROBOROS_Fini(void);
-+
-+void OUROBOROS_Resolve(const char * s, netadr_t * a);
-+
-+int OUROBOROS_Recvfrom(msg_t * msg, netadr_t * from);
-+void OUROBOROS_Sendto(int length, const void * data, netadr_t * to);
-+
-+#endif /*NET_OUROBOROS_H */
-diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h
-index 4471198c..eff5472f 100644
---- a/code/qcommon/qcommon.h
-+++ b/code/qcommon/qcommon.h
-@@ -147,7 +147,8 @@ typedef enum {
- NA_IP,
- NA_IP6,
- NA_MULTICAST6,
-- NA_UNSPEC
-+ NA_UNSPEC,
-+ NA_OUROBOROS
- } netadrtype_t;
-
- typedef enum {
-@@ -164,6 +165,7 @@ typedef struct {
-
- unsigned short port;
- unsigned long scope_id; // Needed for IPv6 link-local addresses
-+ int fd; // Needed for Ouroboros support
- } netadr_t;
-
- void NET_Init( void );
---
-2.16.0
-