[ScryMUD] SVN Commit Info r899 - trunk/mud/grrmud/server

scrymud at wanfear.com scrymud at wanfear.com
Mon Feb 26 14:00:42 PST 2007


Author: eroper
Date: 2007-02-26 14:00:41 -0800 (Mon, 26 Feb 2007)
New Revision: 899

Modified:
   trunk/mud/grrmud/server/hegemon_handler.cc
   trunk/mud/grrmud/server/hegemon_handler.h
   trunk/mud/grrmud/server/login.cc
   trunk/mud/grrmud/server/telnet_handler.cc
   trunk/mud/grrmud/server/telnet_handler.h
Log:
Fixed an order-of-operations issue in login.cc which was causing runaway
HegemonHandler's.

Destructor definitions for {Hegemon,Telnet}Handler are now in their
respective .cc files.

We now properly say no when confronted with telnet linemode (rfc-1184) which
is not the same thing as kludge-linemode.

"There is an understanding known as kludge line mode which means that if
either "suppress go ahead" or "echo" is enabled but not both then telnet
operates in line at a time mode meaning that complete lines are assembled at
each end and transmitted in one "go"."

Reference:
 "The Telnet Protocol" - Peter Burden
 http://www.scit.wlv.ac.uk/~jphb/comms/telnet.html (02/26/2007)



Modified: trunk/mud/grrmud/server/hegemon_handler.cc
===================================================================
--- trunk/mud/grrmud/server/hegemon_handler.cc	2007-02-26 00:37:07 UTC (rev 898)
+++ trunk/mud/grrmud/server/hegemon_handler.cc	2007-02-26 22:00:41 UTC (rev 899)
@@ -33,6 +33,10 @@
 
 }//HegemonHandler::HegemonHandler()
 
+HegemonHandler::~HegemonHandler() {
+   _cnt--;
+}//HegemonHandler::~HegemonHandler()
+
 bool HegemonHandler::parse(const char* input_buf, size_t len) {
    size_t i = 0;
    const char* p;

Modified: trunk/mud/grrmud/server/hegemon_handler.h
===================================================================
--- trunk/mud/grrmud/server/hegemon_handler.h	2007-02-26 00:37:07 UTC (rev 898)
+++ trunk/mud/grrmud/server/hegemon_handler.h	2007-02-26 22:00:41 UTC (rev 899)
@@ -42,7 +42,7 @@
       static int getInstanceCount() { return _cnt; }
 
       HegemonHandler(critter *c_ptr);
-      ~HegemonHandler() { _cnt--; };
+      ~HegemonHandler();
 
       void newCritter(critter* c_ptr) { my_critter = c_ptr; };
 

Modified: trunk/mud/grrmud/server/login.cc
===================================================================
--- trunk/mud/grrmud/server/login.cc	2007-02-26 00:37:07 UTC (rev 898)
+++ trunk/mud/grrmud/server/login.cc	2007-02-26 22:00:41 UTC (rev 899)
@@ -463,12 +463,16 @@
 
                setNoClient(); //turn off by default
 
+
+               //This has to be restored before calling using_client() so we
+               //don't allow protocol handlers to go runaway.
+               pc->p_handler = tmp_p_handler;
+
                if (using_hegemon) {
                   using_client(*this);
                   setClient(HEGEMON);
                }
                
-               pc->p_handler = tmp_p_handler;
                pc->descriptor = tmp_int;
                pc->host = tmp_host;
                pc->index = tmp_index;

Modified: trunk/mud/grrmud/server/telnet_handler.cc
===================================================================
--- trunk/mud/grrmud/server/telnet_handler.cc	2007-02-26 00:37:07 UTC (rev 898)
+++ trunk/mud/grrmud/server/telnet_handler.cc	2007-02-26 22:00:41 UTC (rev 899)
@@ -62,6 +62,10 @@
 
 }//Constructor: TelnetHandler
 
+TelnetHandler::~TelnetHandler() {
+   _cnt--;
+}//TelnetHandler::~TelnetHandler()
+
 void TelnetHandler::send(int action, int option) {
 
    char msg[4];
@@ -202,10 +206,10 @@
          send(ttype_req_str);
       break;
 
+      //we don't support real linemode yet (RFC-1184) It's mentioned
+      //explicitly here because this isn't the same thing as the original
+      //kludge-linemode.
       case TELOPT_LINEMODE:
-         allow_do = true;
-      break;
-
       default:
          allow_do = false;
       break;

Modified: trunk/mud/grrmud/server/telnet_handler.h
===================================================================
--- trunk/mud/grrmud/server/telnet_handler.h	2007-02-26 00:37:07 UTC (rev 898)
+++ trunk/mud/grrmud/server/telnet_handler.h	2007-02-26 22:00:41 UTC (rev 899)
@@ -70,7 +70,7 @@
       static int getInstanceCount() { return _cnt; }
 
       TelnetHandler(critter* c_ptr);
-      ~TelnetHandler() { _cnt--; };
+      ~TelnetHandler();
 
       void newCritter(critter* c_ptr);
       bool parse(const char* input_buf, size_t len);




More information about the ScryMUD mailing list