diff --git a/contrib/menu_login.py b/contrib/menu_login.py index c4cf354017..29bc159f8e 100644 --- a/contrib/menu_login.py +++ b/contrib/menu_login.py @@ -88,6 +88,7 @@ class CmdUsernameSelect(Command): else: # store the player so next step can find it self.menutree.player = player + self.caller.msg("", switchecho="off") self.menutree.goto("node1b") @@ -103,6 +104,7 @@ class CmdPasswordSelectBack(Command): def func(self): "Execute the command" self.menutree.goto("node1a") + self.caller.msg("", switchecho="on") class CmdPasswordSelect(Command): @@ -114,6 +116,7 @@ class CmdPasswordSelect(Command): def func(self): "Execute the command" + self.caller.msg("", switchecho="on") if not hasattr(self.menutree, "player"): self.caller.msg("{rSomething went wrong! The player was not remembered from last step!{n") self.menutree.goto("node1a") @@ -178,6 +181,7 @@ its and @/./+/-/_ only.{n") # this echoes the restrictions made by django's auth return # store the name for the next step self.menutree.playername = playername + self.caller.msg("", switchecho="off") self.menutree.goto("node2b") @@ -190,6 +194,7 @@ class CmdPasswordCreateBack(Command): def func(self): "Execute the command" + self.caller.msg("", switchecho="on") self.menutree.goto("node2a") @@ -201,6 +206,7 @@ class CmdPasswordCreate(Command): def func(self): "Execute the command" password = self.args + self.caller.msg("", switchecho="on") if not hasattr(self.menutree, 'playername'): self.caller.msg("{rSomething went wrong! Playername not remembered from previous step!{n") self.menutree.goto("node2a") diff --git a/src/server/portal/telnet.py b/src/server/portal/telnet.py index 5ff53d96ef..41cd2c1f21 100644 --- a/src/server/portal/telnet.py +++ b/src/server/portal/telnet.py @@ -8,7 +8,7 @@ sessions etc. """ import re -from twisted.conch.telnet import Telnet, StatefulTelnetProtocol, IAC, LINEMODE, GA +from twisted.conch.telnet import Telnet, StatefulTelnetProtocol, IAC, LINEMODE, GA, WILL, WONT, ECHO from src.server.session import Session from src.server.portal import ttype, mssp, msdp, naws from src.server.portal.mccp import Mccp, mccp_compress, MCCP @@ -87,16 +87,19 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, Session): """ Call to allow the activation of options for this protocol """ - return option == MCCP + return (option == MCCP or option==ECHO) def disableLocal(self, option): """ Disable a given option """ + if option == ECHO: + return True if option == MCCP: self.mccp.no_mccp(option) return True else: + return super(TelnetProtocol, self).disableLocal(option) def connectionLost(self, reason): @@ -206,7 +209,7 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, Session): not convert them into ansi tokens) prompt= - supply a prompt text which gets sent without a newline added to the end - + switchecho="on"/"off" The telnet ttype negotiation flags, if any, are used if no kwargs are given. """ @@ -231,7 +234,7 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, Session): raw = kwargs.get("raw", False) nomarkup = kwargs.get("nomarkup", not (xterm256 or useansi)) prompt = kwargs.get("prompt") - + switchecho = kwargs.get("switchecho") #print "telnet kwargs=%s, message=%s" % (kwargs, text) #print "xterm256=%s, useansi=%s, raw=%s, nomarkup=%s, init_done=%s" % (xterm256, useansi, raw, nomarkup, ttype.get("init_done")) if raw: @@ -249,4 +252,9 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, Session): prompt = prompt.replace(IAC, IAC + IAC).replace('\n', '\r\n') prompt += IAC + GA self.transport.write(mccp_compress(self, prompt)) - + if switchecho: + if switchecho == "on": + self.transport.write(mccp_compress(self, IAC+WONT+ECHO)) + if switchecho == "off": + self.transport.write(mccp_compress(self, IAC+WILL+ECHO)) +