def test_locationFooBarFoo(self):
     """
     Test finding foos at the second level.
     """
     xp = XPathQuery("/foo/bar/foo")
     self.assertEquals(xp.matches(self.e), 1)
     self.assertEquals(xp.queryForNodes(self.e), [self.subfoo, self.subfoo3, self.subfoo4])
Example #2
0
 def test_textConditionUnicode(self):
     """
     A node can be matched by text with non-ascii code points.
     """
     xp = XPathQuery(u"//*[text()='\N{SNOWMAN}']")
     self.assertEqual(xp.matches(self.e), True)
     self.assertEqual(xp.queryForNodes(self.e), [self.quux])
Example #3
0
 def test_position(self):
     """
     Test finding element at position.
     """
     xp = XPathQuery("/foo/bar[2]")
     self.assertEqual(xp.matches(self.e), 1)
     self.assertEqual(xp.queryForNodes(self.e), [self.bar1])
Example #4
0
 def test_attributeWithValueAny(self):
     """
     Test find nodes with attribute having value.
     """
     xp = XPathQuery("/foo/*[@attrib2='value2']")
     self.assertEqual(xp.matches(self.e), True)
     self.assertEqual(xp.queryForNodes(self.e), [self.bar2])
 def test_queryForString(self):
     """
     Test for queryForString and queryForStringList.
     """
     xp = XPathQuery("/foo")
     self.assertEquals(xp.queryForString(self.e), "somecontent")
     self.assertEquals(xp.queryForStringList(self.e), ["somecontent", "somemorecontent"])
 def test_locationAllChilds(self):
     """
     Test finding childs of foo.
     """
     xp = XPathQuery("/foo/*")
     self.assertEquals(xp.matches(self.e), True)
     self.assertEquals(xp.queryForNodes(self.e), [self.bar1, self.bar2, self.bar4, self.bar5, self.bar6, self.bar7])
Example #7
0
 def test_andOperator(self):
     """
     Test boolean and operator in condition.
     """
     xp = XPathQuery("//bar[@attrib4='value4' and @attrib5='value5']")
     self.assertEqual(xp.matches(self.e), True)
     self.assertEqual(xp.queryForNodes(self.e), [self.bar5])
Example #8
0
 def test_orOperator(self):
     """
     Test boolean or operator in condition.
     """
     xp = XPathQuery("//bar[@attrib5='value4' or @attrib5='value5']")
     self.assertEqual(xp.matches(self.e), True)
     self.assertEqual(xp.queryForNodes(self.e), [self.bar5, self.bar6])
Example #9
0
 def test_queryForStringListAnyLocation(self):
     """
     queryforStringList on relative paths returns all their CDATA.
     """
     xp = XPathQuery("//foo")
     self.assertEqual(xp.queryForStringList(self.e),
                       ["somecontent", "somemorecontent"])
Example #10
0
 def test_locationWithValueUnicode(self):
     """
     Nodes' attributes can be matched with non-ASCII values.
     """
     xp = XPathQuery(u"/foo/*[@attrib6='á']")
     self.assertEqual(xp.matches(self.e), True)
     self.assertEqual(xp.queryForNodes(self.e), [self.bar7])
Example #11
0
 def test_queryForNodes(self):
     """
     Test finding nodes.
     """
     xp = XPathQuery("/foo/bar")
     self.assertEqual(xp.queryForNodes(self.e), [self.bar1, self.bar2,
                                                  self.bar4, self.bar5,
                                                  self.bar6, self.bar7])
 def test_anyLocationAndText(self):
     """
     Test finding any nodes named gar and getting their text contents.
     """
     xp = XPathQuery("//gar")
     self.assertEquals(xp.matches(self.e), True)
     self.assertEquals(xp.queryForNodes(self.e), [self.gar1, self.gar2, self.gar3, self.gar4])
     self.assertEquals(xp.queryForStringList(self.e), ["DEF", "ABC", "JKL", "MNO"])
Example #13
0
 def test_booleanOperatorsParens(self):
     """
     Test multiple boolean operators in condition with parens.
     """
     xp = XPathQuery("""//bar[@attrib4='value4' and
                              (@attrib5='value4' or @attrib5='value6')]""")
     self.assertEqual(xp.matches(self.e), True)
     self.assertEqual(xp.queryForNodes(self.e), [self.bar6, self.bar7])
 def test_anyLocation(self):
     """
     Test finding any nodes named bar.
     """
     xp = XPathQuery("//bar")
     self.assertEquals(xp.matches(self.e), True)
     self.assertEquals(
         xp.queryForNodes(self.e), [self.bar1, self.bar2, self.bar3, self.bar4, self.bar5, self.bar6, self.bar7]
     )
Example #15
0
 def test_anyLocationQueryForString(self):
     """
     L{XPathQuery.queryForString} should raise a L{NotImplementedError}
     for any location.
     """
     xp = XPathQuery("//bar")
     self.assertRaises(NotImplementedError, xp.queryForString, None)
Example #16
0
    def _sendX1Xml(self, xml):
        log.msg('x1 send out xml directly')
        self.send(xml)
        expectResp = XPathQuery("//%s" % (self.reqMsg.expectedRes))

        def recvCmdResp(cancelCmdCallID, element):
            cancelCmdCallID.cancel()

            def send_resp2cmd_queue(x1CliInst):
                log.msg('recv X1 response')
                x1CliInst.factory.cmd_queue.put(
                    RespMsg(result="OK", content=x1CliInst.recvRootElement))

            self.addOnetimeObserver(xmlstream.STREAM_END_EVENT,
                                    send_resp2cmd_queue)

        def cancelCmdResp():
            self.removeObserver(expectResp, recvCmdResp)
            log.msg("X1 did't receive response. request:%s." %
                    self.reqMsg.content)
            from twisted.words.xish import domish
            self.factory.cmd_queue.put(
                RespMsg(result="Unavailable",
                        content=domish.Element((None, 'Unavailable'))))
            self.reqMsg = None
            self.transport.loseConnection()

        cancelCmdRespCallId = self.callLater(X1ClientProtocol.timeOut,
                                             cancelCmdResp)
        self.addOnetimeObserver(expectResp, recvCmdResp, 0,
                                cancelCmdRespCallId)

        return cancelCmdResp
Example #17
0
 def test_anyLocation(self):
     """
     Test finding any nodes named bar.
     """
     xp = XPathQuery("//bar")
     self.assertEqual(xp.matches(self.e), True)
     self.assertEqual(
         xp.queryForNodes(self.e),
         [
             self.bar1,
             self.bar2,
             self.bar3,
             self.bar4,
             self.bar5,
             self.bar6,
             self.bar7,
         ],
     )
Example #18
0
    def _getCmdRespXmlString(self, checkElement, respMsg):
        log.msg('get respMsg: %s; checkElement: %s' %
                (respMsg.result, checkElement))
        if respMsg.result == 'OK' and XPathQuery(
                '//%s' % checkElement).matches(respMsg.content):
            resp = CmdResp('success', respMsg.content).toXml()
            return resp

        resp = CmdResp('failure', respMsg.content).toXml()
        return resp
Example #19
0
class X2ServerProtocol(MultiXmlStream):
    X2PingReqPath = XPathQuery('/payload/ping/pingType/pingRequest')
    getX2PingReqSeqNbr = XPathQuery('/payload/ping/seqNbr').queryForString
    X2IRIEvent = XPathQuery('/payload/extPDU/IRI-Event')

    def _genPingResp(self, element):
        SeqNbr = int(X2ServerProtocol.getX2PingReqSeqNbr(element))
        log.msg("recv X2 Ping request, SeqNbr: %d" % SeqNbr)
        self.pingResp = li_xml_temp.pingX2Resp(SeqNbr)

        def sendPingResp(SeqNbr, x2ProtInst):
            x2ProtInst.send(x2ProtInst.pingResp)
            x2ProtInst.pingResp = None
            log.msg("send X2 Ping response, SeqNbr: %d" % SeqNbr)

        self.addOnetimeObserver(xmlstream.STREAM_END_EVENT, sendPingResp, 0,
                                SeqNbr)

    def _getIRIEvent(self, element):
        log.msg('recv X2 message: %s' %
                X2ServerProtocol.X2IRIEvent.queryForNodes(element)[0].name)
        if self.factory.x2LogHandler is not None:

            def recordIRIEvent(x2ProtInst):
                x2ProtInst.factory.x2LogHandler.msg(
                    x2ProtInst.recvRootElement.toXml())

            self.addOnetimeObserver(xmlstream.STREAM_END_EVENT, recordIRIEvent)

    def __init__(self):
        self.recvRootElement = None
        self.pingResp = None
        MultiXmlStream.__init__(self)
        self.addObserver(X2ServerProtocol.X2PingReqPath, self._genPingResp)
        self.addObserver(X2ServerProtocol.X2IRIEvent, self._getIRIEvent)

    def connectionMade(self):
        log.msg('x2 connection is established')
        MultiXmlStream.connectionMade(self)
Example #20
0
    def _getX1ReqXmlString(self, cmdRootElement, **kwargs):
        xmlPara = {}
        log.msg('recv cmd xml: %s' % cmdRootElement.toXml())
        for arg in self.args:
            log.msg('query arg: %s' % arg)
            xmlPara[arg] = XPathQuery("/cmd/%s" %
                                      arg).queryForString(cmdRootElement)

        for k, v in kwargs.iteritems():
            xmlPara[k] = v
        from importlib import import_module
        m = import_module('lixml.li_xml_temp')
        fn = getattr(m, self.text)
        return fn(**xmlPara)
Example #21
0
class CmdCB(object):
    def __init__(self, text, *args):
        self.text = text
        self.xPathQuery = XPathQuery("/action[text() = '%s']" % text)
        self.args = args

    def _getCmdRespXmlString(self, checkElement, respMsg):
        log.msg('get respMsg: %s; checkElement: %s' %
                (respMsg.result, checkElement))
        if respMsg.result == 'OK' and XPathQuery(
                '//%s' % checkElement).matches(respMsg.content):
            resp = CmdResp('success', respMsg.content).toXml()
            return resp

        resp = CmdResp('failure', respMsg.content).toXml()
        return resp

    def checkCmdAction(self, protoInst, element):
        log.msg('recv cmd, action: %s, and add onetime oberser' %
                self.xPathQuery.queryForString(element))
        protoInst.addOnetimeObserver(xmlstream.STREAM_END_EVENT,
                                     self._sendXml2X1Client)

    def _getX1ReqXmlString(self, cmdRootElement, **kwargs):
        xmlPara = {}
        log.msg('recv cmd xml: %s' % cmdRootElement.toXml())
        for arg in self.args:
            log.msg('query arg: %s' % arg)
            xmlPara[arg] = XPathQuery("/cmd/%s" %
                                      arg).queryForString(cmdRootElement)

        for k, v in kwargs.iteritems():
            xmlPara[k] = v
        from importlib import import_module
        m = import_module('lixml.li_xml_temp')
        fn = getattr(m, self.text)
        return fn(**xmlPara)

    '''
    _sendCmdRespXmlString & _sendXml2X1Client will be overlapped by inherited class
    '''

    def _sendCmdRespXmlString(self, respMsg, protoInst):
        protoInst.send(self._getCmdRespXmlString('success', respMsg))

    def _sendXml2X1Client(self, protoInst):
        protoInst.factory.cmd_queue.get().addCallback(
            self._sendCmdRespXmlString, protoInst)
    def test_receiveRoot(self):
        """
        Receiving the starttag of the root element results in stream start.
        """
        xmlString = []

        def storeElement(xmlInstance):
            xmlString.append(xmlInstance)

        self.multixmlstream.addObserver(XPathQuery("/body/tl-1"), storeElement)
        self.multixmlstream.connectionMade()
        self.multixmlstream.dataReceived(
            "<root><body><hd/></body><body><tl-1><bb1/></tl-1></body>")
        self.multixmlstream.dataReceived(
            '<body><tl-1><bb2/>Hi</tl-1></body></root>')
        self.assertEqual(2, len(xmlString))
        self.assertEqual('tl-1', xmlString[0].children[0].name)
        self.assertEqual('bb1', xmlString[0].children[0].children[0].name)
        self.assertEqual('bb2', xmlString[1].children[0].children[0].name)
Example #23
0
 def test_namespaceFound(self):
     """
     Test matching node with namespace.
     """
     xp = XPathQuery("/foo[@xmlns='testns']/bar")
     self.assertEqual(xp.matches(self.e), 1)
    def testFunctionality(self):
        xp = XPathQuery("/foo/bar")
        self.assertEquals(xp.matches(self.e), 1)

        xp = XPathQuery("/foo/bar/foo")
        self.assertEquals(xp.matches(self.e), 1)
        self.assertEquals(xp.queryForNodes(self.e), [self.subfoo])
        
        xp = XPathQuery("/foo/bar3")
        self.assertEquals(xp.matches(self.e), 0)

        xp = XPathQuery("/foo/*")
        self.assertEquals(xp.matches(self.e), True)
        self.assertEquals(xp.queryForNodes(self.e), [self.bar1, self.bar2, self.bar4])

        xp = XPathQuery("/foo[@attrib1]")
        self.assertEquals(xp.matches(self.e), True)

        xp = XPathQuery("/foo/*[@attrib2='value2']")
        self.assertEquals(xp.matches(self.e), True)
        self.assertEquals(xp.queryForNodes(self.e), [self.bar2])

# XXX: Revist this, given new grammar
#        xp = XPathQuery("/foo/bar[2]")
#        self.assertEquals(xp.matches(self.e), 1)
#        self.assertEquals(xp.queryForNodes(self.e), [self.bar1])

        xp = XPathQuery("/foo[@xmlns='testns']/bar")
        self.assertEquals(xp.matches(self.e), 1)

        xp = XPathQuery("/foo[@xmlns='badns']/bar2")
        self.assertEquals(xp.matches(self.e), 0)

        xp = XPathQuery("/foo[@attrib1='value1']")
        self.assertEquals(xp.matches(self.e), 1)

        xp = XPathQuery("/foo")
        self.assertEquals(xp.queryForString(self.e), "somecontent")
        self.assertEquals(xp.queryForStringList(self.e), ["somecontent", "somemorecontent"])

        xp = XPathQuery("/foo/bar")
        self.assertEquals(xp.queryForNodes(self.e), [self.bar1, self.bar2, self.bar4])

        xp = XPathQuery("/foo[text() = 'somecontent']")
        self.assertEquals(xp.matches(self.e), True)

        xp = XPathQuery("/foo[not(@nosuchattrib)]")
        self.assertEquals(xp.matches(self.e), True)

        xp = XPathQuery("//gar")
        self.assertEquals(xp.matches(self.e), True)
        self.assertEquals(xp.queryForNodes(self.e), [self.gar1, self.gar2])
        self.assertEquals(xp.queryForStringList(self.e), ["DEF", "ABC"])

        xp = XPathQuery("//bar")
        self.assertEquals(xp.matches(self.e), True)
        self.assertEquals(xp.queryForNodes(self.e), [self.bar1, self.bar2, self.bar3, self.bar4])
Example #25
0
    def testFunctionality(self):
        xp = XPathQuery("/foo/bar")
        self.assertEquals(xp.matches(self.e), 1)

        xp = XPathQuery("/foo/bar/foo")
        self.assertEquals(xp.matches(self.e), 1)
        self.assertEquals(xp.queryForNodes(self.e), [self.subfoo])

        xp = XPathQuery("/foo/bar3")
        self.assertEquals(xp.matches(self.e), 0)

        xp = XPathQuery("/foo/*")
        self.assertEquals(xp.matches(self.e), True)
        self.assertEquals(xp.queryForNodes(self.e),
                          [self.bar1, self.bar2, self.bar4])

        xp = XPathQuery("/foo[@attrib1]")
        self.assertEquals(xp.matches(self.e), True)

        xp = XPathQuery("/foo/*[@attrib2='value2']")
        self.assertEquals(xp.matches(self.e), True)
        self.assertEquals(xp.queryForNodes(self.e), [self.bar2])

        # XXX: Revist this, given new grammar
        #        xp = XPathQuery("/foo/bar[2]")
        #        self.assertEquals(xp.matches(self.e), 1)
        #        self.assertEquals(xp.queryForNodes(self.e), [self.bar1])

        xp = XPathQuery("/foo[@xmlns='testns']/bar")
        self.assertEquals(xp.matches(self.e), 1)

        xp = XPathQuery("/foo[@xmlns='badns']/bar2")
        self.assertEquals(xp.matches(self.e), 0)

        xp = XPathQuery("/foo[@attrib1='value1']")
        self.assertEquals(xp.matches(self.e), 1)

        xp = XPathQuery("/foo")
        self.assertEquals(xp.queryForString(self.e), "somecontent")
        self.assertEquals(xp.queryForStringList(self.e),
                          ["somecontent", "somemorecontent"])

        xp = XPathQuery("/foo/bar")
        self.assertEquals(xp.queryForNodes(self.e),
                          [self.bar1, self.bar2, self.bar4])

        xp = XPathQuery("/foo[text() = 'somecontent']")
        self.assertEquals(xp.matches(self.e), True)

        xp = XPathQuery("/foo[not(@nosuchattrib)]")
        self.assertEquals(xp.matches(self.e), True)

        xp = XPathQuery("//gar")
        self.assertEquals(xp.matches(self.e), True)
        self.assertEquals(xp.queryForNodes(self.e), [self.gar1, self.gar2])
        self.assertEquals(xp.queryForStringList(self.e), ["DEF", "ABC"])

        xp = XPathQuery("//bar")
        self.assertEquals(xp.matches(self.e), True)
        self.assertEquals(xp.queryForNodes(self.e),
                          [self.bar1, self.bar2, self.bar3, self.bar4])
Example #26
0
 def test_locationNoBar3(self):
     """
     Test not finding bar3.
     """
     xp = XPathQuery("/foo/bar3")
     self.assertEqual(xp.matches(self.e), 0)
Example #27
0
 def test_textNotOperator(self):
     """
     Test for not operator.
     """
     xp = XPathQuery("/foo[not(@nosuchattrib)]")
     self.assertEqual(xp.matches(self.e), True)
Example #28
0
 def test_textCondition(self):
     """
     Test matching a node with given text.
     """
     xp = XPathQuery("/foo[text() = 'somecontent']")
     self.assertEqual(xp.matches(self.e), True)
Example #29
0
 def test_queryForString(self):
     """
     queryforString on absolute paths returns their first CDATA.
     """
     xp = XPathQuery("/foo")
     self.assertEqual(xp.queryForString(self.e), "somecontent")
Example #30
0
 def test_attributeWithValue(self):
     """
     Test matching node with attribute having value.
     """
     xp = XPathQuery("/foo[@attrib1='value1']")
     self.assertEqual(xp.matches(self.e), 1)
Example #31
0
 def test_namespaceNotFound(self):
     """
     Test not matching node with wrong namespace.
     """
     xp = XPathQuery("/foo[@xmlns='badns']/bar2")
     self.assertEqual(xp.matches(self.e), 0)
Example #32
0
 def test_queryForString(self):
     """
     queryforString on absolute paths returns their first CDATA.
     """
     xp = XPathQuery("/foo")
     self.assertEqual(xp.queryForString(self.e), "somecontent")
Example #33
0
 def test_locationFooBar(self):
     """
     Test matching foo with child bar.
     """
     xp = XPathQuery("/foo/bar")
     self.assertEqual(xp.matches(self.e), 1)
Example #34
0
 def test_namespaceNotFound(self):
     """
     Test not matching node with wrong namespace.
     """
     xp = XPathQuery("/foo[@xmlns='badns']/bar2")
     self.assertEqual(xp.matches(self.e), 0)
Example #35
0
 def test_attributeWithValue(self):
     """
     Test matching node with attribute having value.
     """
     xp = XPathQuery("/foo[@attrib1='value1']")
     self.assertEqual(xp.matches(self.e), 1)
Example #36
0
 def test_textNotOperator(self):
     """
     Test for not operator.
     """
     xp = XPathQuery("/foo[not(@nosuchattrib)]")
     self.assertEqual(xp.matches(self.e), True)
Example #37
0
 def test_textCondition(self):
     """
     Test matching a node with given text.
     """
     xp = XPathQuery("/foo[text() = 'somecontent']")
     self.assertEqual(xp.matches(self.e), True)
Example #38
0
 def test_locationFooBar(self):
     """
     Test matching foo with child bar.
     """
     xp = XPathQuery("/foo/bar")
     self.assertEqual(xp.matches(self.e), 1)
Example #39
0
 def __init__(self, text, *args):
     self.text = text
     self.xPathQuery = XPathQuery("/action[text() = '%s']" % text)
     self.args = args
Example #40
0
 def test_locationNoBar3(self):
     """
     Test not finding bar3.
     """
     xp = XPathQuery("/foo/bar3")
     self.assertEqual(xp.matches(self.e), 0)
Example #41
0
 def test_attribute(self):
     """
     Test matching foo with attribute.
     """
     xp = XPathQuery("/foo[@attrib1]")
     self.assertEqual(xp.matches(self.e), True)
Example #42
0
 def test_attribute(self):
     """
     Test matching foo with attribute.
     """
     xp = XPathQuery("/foo[@attrib1]")
     self.assertEqual(xp.matches(self.e), True)
Example #43
0
 def test_namespaceFound(self):
     """
     Test matching node with namespace.
     """
     xp = XPathQuery("/foo[@xmlns='testns']/bar")
     self.assertEqual(xp.matches(self.e), 1)
Example #44
0
class X1ClientProtocol(MultiXmlStream):
    X1PingRespPath = XPathQuery('/payload/ping/pingType/pingResponse')
    getX1PingRespSeqNbr = XPathQuery('/payload/ping/seqNbr').queryForString
    X1AlarmPath = XPathQuery(
        '/payload/extPDU/LI-ADM-Event/lI-ADM-MessageSequence/alarmNotification'
    )
    callLater = reactor.callLater
    timeOut = 30

    def connectionMade(self):
        log.msg('x1 tcp connection is made')
        self.alarmCounter = 0
        self.factory.x1_queue.get().addCallback(self.cmdReceived)
        if config.pingEnable:
            self.lcping = task.LoopingCall(self._sendPingRequest)
            self.lcping.start(config.ping_delay)
        MultiXmlStream.connectionMade(self)

        def recordX1Alarm(element):
            self.alarmCounter += 1
            log.msg("recv X1 total alrams: %d" % self.alarmCounter)
            log.msg("recv X1 alarm: %s" % element.toXml())

        self.addObserver(X1ClientProtocol.X1AlarmPath, recordX1Alarm)

    def cmdReceived(self, reqMsg):
        if reqMsg.type == 'cmd':
            log.msg("recv cmd: %s" % reqMsg.content)
            self.reqMsg = reqMsg
            self._sendX1Xml(self.reqMsg.content)

        self.factory.x1_queue.get().addCallback(self.cmdReceived)

    def connectionLost(self, Why):
        log.msg("connnect is lost, reason:%s" % Why)

        if hasattr(self, 'lcping') and self.lcping is not None:
            lcping, self.lcping = self.lcping, None
            lcping.stop()
        log.msg('server existed')
        reactor.stop()
        if self.factory.x1_queue:
            self.factory.x1_queue = None
        return Why

    def _sendPingRequest(self):
        self.factory.state.x1Seq += 1
        self.send(li_xml_temp.pingX1Req(self.factory.state.x1Seq))
        log.msg("x1 ping request is sent out, x1Seq =",
                self.factory.state.x1Seq)

        def recvPingResp(cancelPingId, x1Seq, element):
            cancelPingId.cancel()
            RecvX1Seq = int(X1ClientProtocol.getX1PingRespSeqNbr(element))
            log.msg("recv x1 ping response, x1Seq=%d; send out x1Seq=%d" %
                    (RecvX1Seq, x1Seq))

        def ping_cancel():
            self.removeObserver(X1ClientProtocol.X1PingRespPath, recvPingResp)
            log.msg("x1 ping response is not received ")
            self.transport.loseConnection()

        pingCallID = self.callLater(config.ping_timeout, ping_cancel)
        self.addOnetimeObserver(X1ClientProtocol.X1PingRespPath, recvPingResp,
                                0, pingCallID, self.factory.state.x1Seq)

    def _sendX1Xml(self, xml):
        log.msg('x1 send out xml directly')
        self.send(xml)
        expectResp = XPathQuery("//%s" % (self.reqMsg.expectedRes))

        def recvCmdResp(cancelCmdCallID, element):
            cancelCmdCallID.cancel()

            def send_resp2cmd_queue(x1CliInst):
                log.msg('recv X1 response')
                x1CliInst.factory.cmd_queue.put(
                    RespMsg(result="OK", content=x1CliInst.recvRootElement))

            self.addOnetimeObserver(xmlstream.STREAM_END_EVENT,
                                    send_resp2cmd_queue)

        def cancelCmdResp():
            self.removeObserver(expectResp, recvCmdResp)
            log.msg("X1 did't receive response. request:%s." %
                    self.reqMsg.content)
            from twisted.words.xish import domish
            self.factory.cmd_queue.put(
                RespMsg(result="Unavailable",
                        content=domish.Element((None, 'Unavailable'))))
            self.reqMsg = None
            self.transport.loseConnection()

        cancelCmdRespCallId = self.callLater(X1ClientProtocol.timeOut,
                                             cancelCmdResp)
        self.addOnetimeObserver(expectResp, recvCmdResp, 0,
                                cancelCmdRespCallId)

        return cancelCmdResp