1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-10-26 21:17:40 +00:00
freebsd-ports/net/tinyfugue/files/mccp-patch
Max Khon efce757995 - add -DWITH_MCCP (mccp v1/v2 support)
- assume maintainership
2002-01-07 20:26:38 +00:00

219 lines
7.3 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--- src/rules.mak.orig Sun Mar 7 04:43:25 1999
+++ src/rules.mak Fri Jun 23 05:46:38 2000
@@ -50,6 +50,7 @@ main.$O: main.c config.h port.h dstring.
variable.h tty.h $(BUILDERS)
makehelp.$O: makehelp.c config.h port.h $(BUILDERS)
malloc.$O: malloc.c config.h port.h signals.h malloc.h $(BUILDERS)
+mccp.$O: mccp.c mccp.h
output.$O: output.c config.h port.h dstring.h $(TF_H) util.h tfio.h socket.h \
output.h macro.h search.h tty.h variable.h expr.h $(BUILDERS)
process.$O: process.c config.h port.h dstring.h $(TF_H) util.h tfio.h \
@@ -59,7 +60,7 @@ signals.$O: signals.c config.h port.h ds
process.h tty.h output.h signals.h variable.h $(BUILDERS)
socket.$O: socket.c config.h port.h dstring.h $(TF_H) util.h tfio.h tfselect.h \
history.h world.h socket.h output.h process.h macro.h keyboard.h \
- commands.h command.h signals.h search.h $(BUILDERS)
+ commands.h command.h signals.h search.h mccp.h $(BUILDERS)
tfio.$O: tfio.c config.h port.h dstring.h $(TF_H) util.h tfio.h tfselect.h \
output.h macro.h history.h search.h signals.h variable.h $(BUILDERS)
tty.$O: tty.c config.h port.h $(TF_H) dstring.h util.h tty.h output.h macro.h \
--- src/socket.c.orig Sun Mar 7 04:43:25 1999
+++ src/socket.c Sat Jul 1 06:22:52 2000
@@ -67,6 +67,10 @@ struct sockaddr_in {
#include "search.h"
#include "variable.h" /* set_var_by_*() */
+#ifdef MUDCOMPRESS
+# include "mccp.h"
+#endif
+
#ifdef _POSIX_VERSION
# include <sys/wait.h>
#endif
@@ -206,6 +210,9 @@ typedef struct Sock { /* an open connec
TIME_T time[2]; /* time of last receive/send */
char state; /* state of parser finite state automaton */
long pid; /* pid of name resolution process */
+#ifdef MUDCOMPRESS
+ mc_state *mccp; /* mud compression struct */
+#endif
} Sock;
@@ -806,6 +813,9 @@ int opensock(world, autologin, quietlogi
tsock = *(tsock ? &tsock->next : &hsock) = xsock;
xsock->activity = 0;
Stringinit(xsock->buffer);
+#ifdef MUDCOMPRESS
+ xsock->mccp = mudcompress_new();
+#endif
xsock->prompt = NULL;
init_queue(xsock->queue = (Queue *)XMALLOC(sizeof(Queue)));
xsock->next = NULL;
@@ -1297,6 +1307,9 @@ static void nukesock(sock)
#endif /* NONBLOCKING_GETHOST */
}
Stringfree(sock->buffer);
+#ifdef MUDCOMPRESS
+ mudcompress_delete(sock->mccp);
+#endif
if (sock->prompt) free_aline(sock->prompt);
while(sock->queue->head)
free_aline((Aline*)unlist(sock->queue->head, sock->queue));
@@ -1728,8 +1741,25 @@ static int handle_socket_input()
}
do { /* while (n > 0 && !interrupted() && (received += count) < SPAM) */
- do count = recv(xsock->fd, buffer, sizeof(buffer), 0);
- while (count < 0 && errno == EINTR);
+#ifdef MUDCOMPRESS
+ if (!mudcompress_pending(xsock->mccp))
+ {
+ do count = recv(xsock->fd, buffer, sizeof(buffer), 0);
+ while (count < 0 && errno == EINTR);
+
+ if (count > 0) {
+ mudcompress_receive(xsock->mccp, buffer, count);
+ if (mudcompress_error(xsock->mccp)) {
+ count = -1;
+ errno = EIO;
+ }
+ }
+ }
+#else
+ do count = recv(xsock->fd, buffer, sizeof(buffer), 0);
+ while (count < 0 && errno == EINTR);
+#endif
+
if (count <= 0) {
int err = errno;
#ifdef SUNOS_5_4
@@ -1761,6 +1791,25 @@ static int handle_socket_input()
return received;
}
+ received += count;
+
+#ifdef MUDCOMPRESS
+ {
+ const char *resp;
+
+ count = 0;
+ while (count < sizeof(buffer)
+ && mudcompress_pending(xsock->mccp)) {
+ count += mudcompress_get(xsock->mccp, buffer + count,
+ sizeof(buffer) - count);
+ }
+
+ resp = mudcompress_response(xsock->mccp);
+ if (resp)
+ transmit(resp,strlen(resp));
+ }
+#endif
+
for (place = buffer; place - buffer < count; place++) {
/* We always accept 8-bit data, even though RFCs 854 and 1123
@@ -1958,7 +2007,6 @@ static int handle_socket_input()
}
/* See if anything arrived while we were parsing */
-
FD_ZERO(&readfds);
FD_SET(xsock->fd, &readfds);
tv.tv_sec = tv.tv_usec = 0;
@@ -1976,7 +2024,13 @@ static int handle_socket_input()
if (errno != EINTR) die("handle_socket_input: select", errno);
}
- } while (n > 0 && !interrupted() && (received += count) < SPAM);
+#ifdef MUDCOMPRESS
+ if (mudcompress_pending(xsock->mccp)) {
+ n = 1;
+ }
+#endif
+
+ } while (n > 0 && !interrupted() && received < SPAM);
/* If lpflag is on and we got a partial line from the fg world,
* assume the line is a prompt.
--- src/tf.1.catman.orig Sun Mar 7 04:43:25 1999
+++ src/tf.1.catman Sat Jun 24 01:25:46 2000
@@ -152,6 +152,8 @@ TF(1)
Recall previously received text.
+ Support for the Mud Client Compression Protocol version 1 and 2.
+
CCOONNFFIIGGUURRAATTIIOONN FFIILLEESS
_T_F will attempt to read two files when starting. The
--- src/tf.1.nroffman.orig Sun Mar 7 04:43:25 1999
+++ src/tf.1.nroffman Sat Jun 24 01:25:04 2000
@@ -112,6 +112,8 @@ Separate LP and Diku style prompts from
Page output using a --More-- prompt.
.sp
Recall previously received text.
+.sp
+Support for Mud Client Compression Protocol versions 1 and 2.
.SH "CONFIGURATION FILES"
.PP
--- src/vars.mak.orig Sun Mar 7 04:43:25 1999
+++ src/vars.mak Fri Jun 23 06:07:44 2000
@@ -15,14 +15,14 @@
# Predefined variables:
# O - object file suffix (e.g., "o" or "obj")
-TFVER=40s1
+TFVER=40s1-mccp
SOURCE = command.c dstring.c expand.c help.c history.c keyboard.c \
macro.c main.c malloc.c output.c process.c search.c signals.c \
socket.c tfio.c tty.c util.c variable.c world.c
OBJS = command.$O dstring.$O expand.$O expr.$O help.$O history.$O keyboard.$O \
- macro.$O main.$O malloc.$O output.$O process.$O search.$O signals.$O \
+ macro.$O main.$O malloc.$O mccp.$O output.$O process.$O search.$O signals.$O \
socket.$O tfio.$O tty.$O util.$O variable.$O world.$O \
regexp.$O $(OTHER_OBJS)
--- unix/tfconfig.orig Sun Mar 7 04:43:28 1999
+++ unix/tfconfig Wed Jul 5 05:56:02 2000
@@ -482,6 +482,14 @@ else
echo "I can't find <pwd.h>. Filename '~user' expansion won't be supported."
fi
+### Find zlib.h
+if echo '#include <zlib.h>' >test.c; ${CPP} test.c >/dev/null 2>&1; then
+ echo "#define MUDCOMPRESS" >&4
+ echo "Found <zlib.h>."
+else
+ echo "I can't find <zlib.h>. The Mud Client Compression Protocol will not be supported."
+fi
+
### Figure out how to do varadic args.
if [ "$STD_C" = "1" ] || [ "$GNU_C" = "1" ]; then
if echo '#include <stdarg.h>' >test.c; ${CPP} test.c >/dev/null 2>&1; then
@@ -756,6 +764,12 @@ elif eval "${LIBTEST} -lsocket ${LIBS} >
else
echo "Warning: can't find connect() or a library that might have it."
echo "/* warning: tfconfig couldn't find connect() */" >&4
+fi
+
+### Test for zlib for mud compression
+if eval "${LIBTEST} -lz ${LIBS} >/dev/null 2>&1" && test -f ${AOUT}; then
+ echo "Will link with -lz."
+ LIBS="-lz $LIBS"
fi
### Test for SOCKS firewall proxy server.
--- unixmake.orig Sun Mar 7 04:43:24 1999
+++ unixmake Sat Jul 1 06:27:28 2000
@@ -20,4 +20,4 @@ export PATH
MAKE=${MAKE-make}
export MAKE
-${MAKE} -f unix/Makefile `egrep '^TFVER=' src/vars.mak` MAKE="${MAKE}" $*
+${MAKE} -j 1 -f unix/Makefile `egrep '^TFVER=' src/vars.mak` MAKE="${MAKE}" $*