Blob Blame History Raw
diff -c tf-50b8/src/expr.c tf-50b8-patched/src/expr.c
*** tf-50b8/src/expr.c	Sat Jan 13 18:12:39 2007
--- tf-50b8-patched/src/expr.c	Sat Aug 28 01:12:57 2010
***************
*** 972,977 ****
--- 972,995 ----
  		(n>2 ? opdstd(n-2) : ""));
              return newint(i);
  
+ #if ENABLE_ATCP
+         case FN_atcp:
+             i = handle_atcp_function(opdstr(n), (n>1 ? opdstd(n-1) : NULL));
+             return newint(i);
+ #endif
+ 
+ #if ENABLE_GMCP
+         case FN_gmcp:
+             i = handle_gmcp_function(opdstr(n), (n>1 ? opdstd(n-1) : NULL));
+             return newint(i);
+ #endif
+ 
+ #if ENABLE_OPTION102
+         case FN_option102:
+             i = handle_option102_function(opdstr(n), (n>1 ? opdstd(n-1) : NULL));
+             return newint(i);
+ #endif
+ 
          case FN_fake_recv:
              i = handle_fake_recv_function(opdstr(n),
  		(n>1 ? opdstd(n-1) : NULL), (n>2 ? opdstd(n-2) : ""));
diff -c tf-50b8/src/funclist.h tf-50b8-patched/src/funclist.h
*** tf-50b8/src/funclist.h	Sat Jan 13 18:12:39 2007
--- tf-50b8-patched/src/funclist.h	Sat Aug 28 01:14:08 2010
***************
*** 17,22 ****
--- 17,25 ----
  funccode(ascii,		1,	1,  1),
  funccode(asin,		1,	1,  1),
  funccode(atan,		1,	1,  1),
+ #if ENABLE_ATCP
+ funccode(atcp,		0,	1,  2),
+ #endif
  funccode(char,		1,	1,  1),
  funccode(columns,	0,	0,  0),
  funccode(cos,		1,	1,  1),
***************
*** 36,41 ****
--- 39,47 ----
  funccode(gethostname,	0,	0,  0),
  funccode(getopts,	0,	1,  2),
  funccode(getpid,	1,	0,  0),
+ #if ENABLE_GMCP
+ funccode(gmcp,		0,	1,  2),
+ #endif
  funccode(idle,		0,	0,  1),
  funccode(is_connected,	0,	0,  1),
  funccode(is_open,	0,	0,  1),
***************
*** 62,67 ****
--- 68,76 ----
  funccode(nlog,		0,	0,  0),
  funccode(nmail,		0,	0,  0),
  funccode(nread,		0,	0,  0),
+ #if ENABLE_OPTION102
+ funccode(option102,	0,	1,  2),
+ #endif
  funccode(pad,		1,	1,  (unsigned)-1),
  funccode(pow,		1,	2,  2),
  funccode(prompt,	0,	1,  1),
diff -c tf-50b8/src/globals.h tf-50b8-patched/src/globals.h
*** tf-50b8/src/globals.h	Sat Jan 13 18:12:39 2007
--- tf-50b8-patched/src/globals.h	Sat Aug 28 01:15:00 2010
***************
*** 158,163 ****
--- 158,166 ----
  #define TFMAILPATH	getstdvar(VAR_TFMAILPATH)
  #define alert_attr	getattrvar(VAR_alert_attr)
  #define alert_time	gettimevar(VAR_alert_time)
+ #define atcp		getintvar(VAR_atcp)
+ #define gmcp		getintvar(VAR_gmcp)
+ #define OPTION102	getintvar(VAR_OPTION102)
  #define auto_fg		getintvar(VAR_auto_fg)
  #define background	getintvar(VAR_background)
  #define backslash	getintvar(VAR_backslash)
diff -c tf-50b8/src/hooklist.h tf-50b8-patched/src/hooklist.h
*** tf-50b8/src/hooklist.h	Sat Jan 13 18:12:39 2007
--- tf-50b8-patched/src/hooklist.h	Sat Aug 28 01:16:12 2010
***************
*** 12,17 ****
--- 12,20 ----
   */
  
  gencode(ACTIVITY,	HT_ALERT | HT_XSOCK),
+ #if ENABLE_ATCP
+ gencode(ATCP,		0),
+ #endif
  gencode(BAMF,		HT_WORLD | HT_XSOCK),
  gencode(BGTEXT,		0),
  gencode(BGTRIG,		HT_ALERT | HT_XSOCK),
***************
*** 19,24 ****
--- 22,30 ----
  gencode(CONFLICT,	0),
  gencode(CONNECT,	HT_WORLD | HT_XSOCK),
  gencode(DISCONNECT,	HT_WORLD | HT_XSOCK),
+ #if ENABLE_GMCP
+ gencode(GMCP,		0),
+ #endif
  gencode(ICONFAIL,	HT_WORLD | HT_XSOCK),
  gencode(KILL,		0),
  gencode(LOAD,		0),
***************
*** 28,33 ****
--- 34,42 ----
  gencode(MAIL,		HT_ALERT),
  gencode(MORE,		0),
  gencode(NOMACRO,	0),
+ #if ENABLE_OPTION102
+ gencode(OPTION102,	0),
+ #endif
  gencode(PENDING,	HT_WORLD | HT_XSOCK),
  gencode(PREACTIVITY,	0),
  gencode(PROCESS,	0),
diff -c tf-50b8/src/socket.c tf-50b8-patched/src/socket.c
*** tf-50b8/src/socket.c	Sat Jan 13 18:12:39 2007
--- tf-50b8-patched/src/socket.c	Fri Sep 24 02:39:49 2010
***************
*** 436,441 ****
--- 436,447 ----
  /* 85 & 86 are not standard.  See http://www.randomly.org/projects/MCCP/ */
  #define TN_COMPRESS	((char)85)	/* MCCP v1 */
  #define TN_COMPRESS2	((char)86)	/* MCCP v2 */
+ /* 200 is not standard. See http://www.ironrealms.com/rapture/manual/files/FeatATCP-txt.html */
+ #define TN_ATCP		((char)200)	/* ATCP */
+ /* 201 is not standard. See http://www.aardwolf.com/wiki/index.php/Clients/GMCP */
+ #define TN_GMCP		((char)201)	/* GMCP */
+ /* 102 is not standard. See http://www.aardwolf.com/blog/category/technical */
+ #define TN_102	((char)102)	/* Option 102 */
  
  #define UCHAR		unsigned char
  
***************
*** 608,613 ****
--- 614,622 ----
      telnet_label[(UCHAR)TN_CHARSET]	= "CHARSET";
      telnet_label[(UCHAR)TN_COMPRESS]	= "COMPRESS";
      telnet_label[(UCHAR)TN_COMPRESS2]	= "COMPRESS2";
+     telnet_label[(UCHAR)TN_ATCP]	= "ATCP";
+     telnet_label[(UCHAR)TN_GMCP]	= "GMCP";
+     telnet_label[(UCHAR)TN_102]		= "102";
      telnet_label[(UCHAR)TN_EOR]		= "EOR";
      telnet_label[(UCHAR)TN_SE]		= "SE";
      telnet_label[(UCHAR)TN_NOP]		= "NOP";
***************
*** 2439,2444 ****
--- 2448,2492 ----
      return result;
  }
  
+ #if ENABLE_ATCP
+ int handle_atcp_function(conString *string, const char *world)
+ {
+    Sock *old_xsock = xsock;
+ 
+    xsock = (!world || !*world) ? xsock : find_sock(world);
+ 	Sprintf(telbuf, "%c%c%c%s%c%c", TN_IAC, TN_SB, TN_ATCP, string->data, TN_IAC, TN_SE);
+ 	telnet_send(telbuf);
+    xsock = old_xsock;
+ 	return 1;
+ }
+ #endif
+ 
+ #if ENABLE_GMCP
+ int handle_gmcp_function(conString *string, const char *world)
+ {
+    Sock *old_xsock = xsock;
+ 
+    xsock = (!world || !*world) ? xsock : find_sock(world);
+ 	Sprintf(telbuf, "%c%c%c%s%c%c", TN_IAC, TN_SB, TN_GMCP, string->data, TN_IAC, TN_SE);
+ 	telnet_send(telbuf);
+    xsock = old_xsock;
+ 	return 1;
+ }
+ #endif
+ 
+ #if ENABLE_OPTION102
+ int handle_option102_function(conString *string, const char *world)
+ {
+    Sock *old_xsock = xsock;
+ 
+    xsock = (!world || !*world) ? xsock : find_sock(world);
+ 	Sprintf(telbuf, "%c%c%c%s%c%c", TN_IAC, TN_SB, TN_102, string->data, TN_IAC, TN_SE);
+ 	telnet_send(telbuf);
+    xsock = old_xsock;
+ 	return 1;
+ }
+ #endif
+ 
  int handle_fake_recv_function(conString *string, const char *world,
      const char *flags)
  {
***************
*** 2825,2830 ****
--- 2873,2893 ----
  	}
  	xsock->flags |= SOCKCOMPRESS;
  	break;
+ #if ENABLE_ATCP
+     case TN_ATCP:
+ 	    do_hook(H_ATCP, NULL, "%s", xsock->subbuffer->data + 3);
+ 	    break;
+ #endif
+ #if ENABLE_GMCP
+     case TN_GMCP:
+ 	    do_hook(H_GMCP, NULL, "%s", xsock->subbuffer->data + 3);
+ 	    break;
+ #endif
+ #if ENABLE_OPTION102
+     case TN_102:
+ 	    do_hook(H_OPTION102, NULL, "%s", xsock->subbuffer->data + 3);
+ 	    break;
+ #endif
      default:
  	no_reply("unknown option");
          break;
***************
*** 2967,2972 ****
--- 3030,3036 ----
  		case Z_STREAM_END:
  		    /* handle stuff inflated before stream end */
  		    count = (char*)xsock->zstream->next_out - outbuffer;
+ 		    if(count > 0)
  		    received += handle_socket_input(outbuffer, count);
  		    /* prepare to handle noncompressed stuff after stream end */
  		    buffer = (char*)xsock->zstream->next_in;
***************
*** 3072,3078 ****
                  continue;  /* avoid non-telnet processing */
  
              } else if (xsock->fsastate == TN_SB) {
! 		if (xsock->subbuffer->len > 255) {
  		    /* It shouldn't take this long; server is broken.  Abort. */
  		    SStringcat(xsock->buffer, CS(xsock->subbuffer));
  		    Stringtrunc(xsock->subbuffer, 0);
--- 3136,3142 ----
                  continue;  /* avoid non-telnet processing */
  
              } else if (xsock->fsastate == TN_SB) {
! 		if (xsock->subbuffer->len > 1023) {
  		    /* It shouldn't take this long; server is broken.  Abort. */
  		    SStringcat(xsock->buffer, CS(xsock->subbuffer));
  		    Stringtrunc(xsock->subbuffer, 0);
***************
*** 3128,3133 ****
--- 3192,3206 ----
  		    (rawchar == TN_COMPRESS && mccp) ||
  		    (rawchar == TN_COMPRESS2 && mccp) ||
  #endif
+ #if ENABLE_ATCP
+ 		    (rawchar == TN_ATCP && atcp) ||
+ #endif
+ #if ENABLE_GMCP
+ 		    (rawchar == TN_GMCP && gmcp) ||
+ #endif
+ #if ENABLE_OPTION102
+ 		    (rawchar == TN_102 && 102) ||
+ #endif
                      rawchar == TN_ECHO ||
                      rawchar == TN_SEND_EOR ||
                      rawchar == TN_BINARY)              /* accept any of these */
diff -c tf-50b8/src/socket.h tf-50b8-patched/src/socket.h
*** tf-50b8/src/socket.h	Sat Jan 13 18:12:39 2007
--- tf-50b8-patched/src/socket.h	Sat Aug 28 01:26:08 2010
***************
*** 45,50 ****
--- 45,59 ----
  extern int     local_echo(int flag);
  extern int     handle_send_function(conString *string, const char *world,
                       const char *flags);
+ #if ENABLE_ATCP
+ extern int     handle_atcp_function(conString *string, const char *world);
+ #endif
+ #if ENABLE_GMCP
+ extern int     handle_gmcp_function(conString *string, const char *world);
+ #endif
+ #if ENABLE_OPTION102
+ extern int     handle_option102_function(conString *string, const char *world);
+ #endif
  extern int     handle_fake_recv_function(conString *string, const char *world,
  		    const char *flags);
  extern int     is_connected(const char *worldname);
diff -c tf-50b8/src/tfconfig.h.in tf-50b8-patched/src/tfconfig.h.in
*** tf-50b8/src/tfconfig.h.in	Sat Jan 13 18:12:39 2007
--- tf-50b8-patched/src/tfconfig.h.in	Sat Aug 28 01:27:06 2010
***************
*** 94,99 ****
--- 94,102 ----
  #define NO_PROCESS 0
  #define NO_FLOAT 0
  #define NCOLORS 16
+ #define ENABLE_ATCP 0
+ #define ENABLE_GMCP 0
+ #define ENABLE_OPTION102 0
  
  #define HAVE_MCCP (HAVE_ZLIB_H && HAVE_LIBZ)
  
diff -c tf-50b8/src/varlist.h tf-50b8-patched/src/varlist.h
*** tf-50b8/src/varlist.h	Sat Jan 13 18:12:39 2007
--- tf-50b8-patched/src/varlist.h	Sat Aug 28 01:28:51 2010
***************
*** 43,48 ****
--- 43,63 ----
  varstrx(VAR_TZ,		"TZ",		NULL,		ch_timezone)
  varstr (VAR_alert_attr,	"alert_attr",	"Br",		ch_attr)
  vartime(VAR_alert_time,	"alert_time",	5,0,		NULL)
+ #if ENABLE_ATCP
+ varflag(VAR_atcp,	"atcp",		TRUE,		NULL)
+ #else
+ varenum(VAR_atcp,	"atcp",		FALSE,		NULL,	enum_off)
+ #endif
+ #if ENABLE_GMCP
+ varflag(VAR_gmcp,	"gmcp",		TRUE,		NULL)
+ #else
+ varenum(VAR_gmcp,	"gmcp",		FALSE,		NULL,	enum_off)
+ #endif
+ #if ENABLE_OPTION102
+ varflag(VAR_OPTION102,	"option102",	TRUE,		NULL)
+ #else
+ varenum(VAR_OPTION102,	"option102",	FALSE,		NULL,	enum_off)
+ #endif
  #if 0
  varflag(VAR_auto_fg,	"auto_fg",	FALSE,		NULL)
  #endif