def sendData(self, tpl, dataRaw=None, optionsRaw=None): """ Send telnet data @param tpl: telnet @type tpl: templatelayer @param dataRaw: telnet data (default=None) @type dataRaw: string/none @param optionsRaw: telnet options (default=None) @type optionsRaw: string/none @return: telnet layer encapsulate in ip @rtype: templatemessage """ if not self.tcp.connected: #raise Exception( 'tcp not connected' ) raise TestAdapterLib.AdapterException(TestAdapterLib.caller(), "tcp not connected" ) try: if dataRaw is not None or optionsRaw is not None: tpl = templates.telnet(data=dataRaw, cmds=optionsRaw) # encode template try: (encodedData, summary) = self.telnetCodec.encode(telnet_tpl=tpl) except Exception as e: raise Exception("Cannot encode Telnet message: %s" % str(e)) try: lower = self.tcp.sendData( data=encodedData ) except Exception as e: raise Exception("telnet failed: %s" % str(e)) # add sip layer to the lower layer tpl.addRaw( encodedData ) lower.addLayer( tpl ) # Log event if self.logEventSent: self.logSentEvent( shortEvt = summary, tplEvt = lower ) except Exception as e: raise Exception('Unable to send telnet data: %s' % str(e)) return lower
def sendOptions(self, opts): """ opts = list of tuple of integer """ nb_cmd = 0 tpl_cmds = TestTemplatesLib.TemplateLayer(name='') for i in xrange(len(opts)): cmd, opt = opts[i] cmds_str = '' if cmd in codec.TELNET_COMMANDS: cmds_str = '%s' % codec.TELNET_COMMANDS[cmd] if opt in codec.TELNET_OPTIONS: cmds_str += ' %s' % codec.TELNET_OPTIONS[opt] tpl_cmds.addKey(name="%s" % nb_cmd, data=cmds_str) nb_cmd += 1 tpl = templates.telnet(cmds=tpl_cmds) self.sendData(tpl=tpl)
def sendSubOption(self, optName, subopts): """ subopts = list of tuple """ nb_cmd = 0 optNameFinal = '' if optName in codec.TELNET_OPTIONS: optNameFinal = codec.TELNET_OPTIONS[optName] tpl_sub = TestTemplatesLib.TemplateLayer(name='') for (optDescr,optValue) in subopts: tpl_sub.addKey(name=optDescr, data=optValue) tpl_subs = TestTemplatesLib.TemplateLayer(name='') tpl_subs.addKey( optNameFinal,tpl_sub ) tpl = templates.telnet(subs=tpl_subs) self.sendData(tpl=tpl)
def hasReceivedData(self, timeout=1.0, dataExpected=None): """ Waits to receive "data" event until the end of the timeout @param timeout: time max to wait to receive event in second (default=1s) @type timeout: float @param dataExpected: data expected (default=None) @type dataExpected: string/operators/none @return: an event matching with the template or None otherwise @rtype: templatemessage """ if not ( isinstance(timeout, int) or isinstance(timeout, float) ) or isinstance(timeout,bool): raise TestAdapterLib.ValueException(TestAdapterLib.caller(), "timeout argument is not a float or integer (%s)" % type(timeout) ) layer_ip = AdapterIP.ip() layer_tcp = AdapterTCP.tcp() tpl = TestTemplatesLib.TemplateMessage() if self.cfg['agent-support']: layer_agent= TestTemplatesLib.TemplateLayer('AGENT') layer_agent.addKey(name='name', data=self.cfg['agent']['name'] ) layer_agent.addKey(name='type', data=self.cfg['agent']['type'] ) tpl.addLayer( layer_agent ) tpl.addLayer(layer=layer_ip) tpl.addLayer(layer=layer_tcp) if self.tcp.cfg['proxy-enabled']: layer_sock = AdapterSOCKS.socks(more=AdapterSOCKS.received()) tpl.addLayer(layer=layer_sock) layer_telnet = templates.telnet() if dataExpected is not None: layer_telnet.addKey( name='data', data=dataExpected ) tpl.addLayer(layer=layer_telnet) evt = self.received( expected = tpl, timeout = timeout ) return evt
def sendOptions(self, opts): """ opts = list of tuple of integer """ nb_cmd = 0 tpl_cmds = TestTemplatesLib.TemplateLayer(name='') for i in xrange(len(opts)): cmd, opt = opts[i] cmds_str = '' if cmd in codec.TELNET_COMMANDS: cmds_str = '%s' % codec.TELNET_COMMANDS[cmd] else: self.warning("telnet command not supported: %s" % cmd) if opt in codec.TELNET_OPTIONS: cmds_str += ' %s' % codec.TELNET_OPTIONS[opt] else: self.warning("telnet option not supported: %s" % opt) cmd_str += ' Unsupported' tpl_cmds.addKey(name="%s" % nb_cmd, data=cmds_str) nb_cmd += 1 tpl = templates.telnet(cmds=tpl_cmds) self.sendData(tpl=tpl)