try: text = utils.to_str(text if text else "", encoding=self.encoding) except Exception, e: self.sendLine(str(e)) return if "oob" in kwargs and "OOB" in self.protocol_flags: # oob is a list of [(cmdname, arg, kwarg), ...] for cmdname, args, okwargs in kwargs["oob"]: #print "telnet oob data_out:", cmdname, args, kwargs self.oob.data_out(cmdname, *args, **okwargs) # parse **kwargs, falling back to ttype if nothing is given explicitly ttype = self.protocol_flags.get('TTYPE', {}) xterm256 = kwargs.get( "xterm256", ttype.get('256 COLORS', False) if ttype.get("init_done") else True) useansi = kwargs.get( "ansi", ttype and ttype.get('ANSI', False) if ttype.get("init_done") else True) raw = kwargs.get("raw", False) nomarkup = kwargs.get("nomarkup", not (xterm256 or useansi)) prompt = kwargs.get("prompt") echo = kwargs.get("echo", None) mxp = kwargs.get("mxp", self.protocol_flags.get("MXP", False)) #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: # no processing whatsoever self.sendLine(text) elif text:
def data_out(self, text=None, **kwargs): """ Data Evennia -> User. A generic hook method for engine to call in order to send data through the telnet connection. Kwargs: text (str): Text to send. oob (list): `[(cmdname,args,kwargs), ...]`, supply an Out-of-Band instruction. xterm256 (bool): Enforce xterm256 setting. If not given, ttype result is used. If client does not suport xterm256, the ansi fallback will be used mxp (bool): Enforce mxp setting. If not given, enables if we detected client support for it ansi (bool): Enforce ansi setting. If not given, ttype result is used. nomarkup (bool): If True, strip all ansi markup (this is the same as `xterm256=False, ansi=False`) raw (bool):Pass string through without any ansi processing (i.e. include Evennia ansi markers but do not convert them into ansi tokens) prompt (str): Supply a prompt text which gets sent without a newline added to the end. echo (str): Turn on/off line echo on the client, if the client supports it (e.g. for password input). Remember that you must manually activate it again later. Notes: The telnet TTYPE negotiation flags, if any, are used if no kwargs are given. """ ## profiling, debugging #if text.startswith("TEST_MESSAGE"): 1/0 #from evennia.server.profiling.timetrace import timetrace #text = timetrace(text, "telnet.data_out", final=True) try: text = utils.to_str(text if text else "", encoding=self.encoding) except Exception as e: self.sendLine(str(e)) return if "oob" in kwargs and "OOB" in self.protocol_flags: # oob is a list of [(cmdname, arg, kwarg), ...] for cmdname, args, okwargs in kwargs["oob"]: self.oob.data_out(cmdname, *args, **okwargs) # parse **kwargs, falling back to ttype if nothing is given explicitly ttype = self.protocol_flags.get('TTYPE', {}) xterm256 = kwargs.get( "xterm256", ttype.get('256 COLORS', False) if ttype.get("init_done") else True) useansi = kwargs.get( "ansi", ttype and ttype.get('ANSI', False) if ttype.get("init_done") else True) raw = kwargs.get("raw", False) nomarkup = kwargs.get("nomarkup", not (xterm256 or useansi)) prompt = kwargs.get("prompt") echo = kwargs.get("echo", None) mxp = kwargs.get("mxp", self.protocol_flags.get("MXP", False)) if raw: # no processing whatsoever self.sendLine(text) elif text: # we need to make sure to kill the color at the end in order # to match the webclient output. linetosend = ansi.parse_ansi(_RE_N.sub("", text) + "{n", strip_ansi=nomarkup, xterm256=xterm256, mxp=mxp) if mxp: linetosend = mxp_parse(linetosend) self.sendLine(linetosend) if prompt: # Send prompt separately prompt = ansi.parse_ansi(_RE_N.sub("", prompt) + "{n", strip_ansi=nomarkup, xterm256=xterm256) if mxp: prompt = mxp_parse(prompt) prompt = prompt.replace(IAC, IAC + IAC).replace('\n', '\r\n') prompt += IAC + GA self.transport.write(mccp_compress(self, prompt)) if echo: self.transport.write(mccp_compress(self, IAC + WONT + ECHO)) elif echo == False: self.transport.write(mccp_compress(self, IAC + WILL + ECHO))
are given. """ try: text = utils.to_str(text if text else "", encoding=self.encoding) except Exception, e: self.sendLine(str(e)) return if "oob" in kwargs and "OOB" in self.protocol_flags: # oob is a list of [(cmdname, arg, kwarg), ...] for cmdname, args, okwargs in kwargs["oob"]: #print "telnet oob data_out:", cmdname, args, kwargs self.oob.data_out(cmdname, *args, **okwargs) # parse **kwargs, falling back to ttype if nothing is given explicitly ttype = self.protocol_flags.get('TTYPE', {}) xterm256 = kwargs.get("xterm256", ttype.get('256 COLORS', False) if ttype.get("init_done") else True) useansi = kwargs.get("ansi", ttype and ttype.get('ANSI', False) if ttype.get("init_done") else True) raw = kwargs.get("raw", False) nomarkup = kwargs.get("nomarkup", not (xterm256 or useansi)) prompt = kwargs.get("prompt") echo = kwargs.get("echo", None) mxp = kwargs.get("mxp", self.protocol_flags.get("MXP", False)) #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: # no processing whatsoever self.sendLine(text) elif text: # we need to make sure to kill the color at the end in order # to match the webclient output.
def data_out(self, text=None, **kwargs): """ Data Evennia -> User. A generic hook method for engine to call in order to send data through the telnet connection. Kwargs: text (str): Text to send. oob (list): `[(cmdname,args,kwargs), ...]`, supply an Out-of-Band instruction. xterm256 (bool): Enforce xterm256 setting. If not given, ttype result is used. If client does not suport xterm256, the ansi fallback will be used mxp (bool): Enforce mxp setting. If not given, enables if we detected client support for it ansi (bool): Enforce ansi setting. If not given, ttype result is used. nomarkup (bool): If True, strip all ansi markup (this is the same as `xterm256=False, ansi=False`) raw (bool):Pass string through without any ansi processing (i.e. include Evennia ansi markers but do not convert them into ansi tokens) prompt (str): Supply a prompt text which gets sent without a newline added to the end. echo (str): Turn on/off line echo on the client, if the client supports it (e.g. for password input). Remember that you must manually activate it again later. Notes: The telnet TTYPE negotiation flags, if any, are used if no kwargs are given. """ ## profiling, debugging #if text.startswith("TEST_MESSAGE"): 1/0 #from evennia.server.profiling.timetrace import timetrace #text = timetrace(text, "telnet.data_out", final=True) try: text = utils.to_str(text if text else "", encoding=self.encoding) except Exception as e: self.sendLine(str(e)) return if "oob" in kwargs and "OOB" in self.protocol_flags: # oob is a list of [(cmdname, arg, kwarg), ...] for cmdname, args, okwargs in kwargs["oob"]: self.oob.data_out(cmdname, *args, **okwargs) # parse **kwargs, falling back to ttype if nothing is given explicitly ttype = self.protocol_flags.get('TTYPE', {}) xterm256 = kwargs.get("xterm256", ttype.get('256 COLORS', False) if ttype.get("init_done") else True) useansi = kwargs.get("ansi", ttype and ttype.get('ANSI', False) if ttype.get("init_done") else True) raw = kwargs.get("raw", False) nomarkup = kwargs.get("nomarkup", not (xterm256 or useansi)) prompt = kwargs.get("prompt") echo = kwargs.get("echo", None) mxp = kwargs.get("mxp", self.protocol_flags.get("MXP", False)) if raw: # no processing whatsoever self.sendLine(text) elif text: # we need to make sure to kill the color at the end in order # to match the webclient output. linetosend = ansi.parse_ansi(_RE_N.sub("", text) + "{n", strip_ansi=nomarkup, xterm256=xterm256, mxp=mxp) if mxp: linetosend = mxp_parse(linetosend) self.sendLine(linetosend) if prompt: # Send prompt separately prompt = ansi.parse_ansi(_RE_N.sub("", prompt) + "{n", strip_ansi=nomarkup, xterm256=xterm256) if mxp: prompt = mxp_parse(prompt) prompt = prompt.replace(IAC, IAC + IAC).replace('\n', '\r\n') prompt += IAC + GA self.transport.write(mccp_compress(self, prompt)) if echo: self.transport.write(mccp_compress(self, IAC+WONT+ECHO)) elif echo == False: self.transport.write(mccp_compress(self, IAC+WILL+ECHO))