def send(self, xs): """ Send this request to its recipient. This renders all of the relevant parameters for this specific requests into an L{IQ}, and invoke its C{send} method. This returns a deferred that fires upon reception of a response. See L{IQ} for details. @param xs: The XML stream to send the request on. @type xs: L{xmlstream.XmlStream} @rtype: L{defer.Deferred}. """ try: (self.stanzaType, childURI, childName) = self._verbRequestMap[self.verb] except KeyError: raise NotImplementedError("Unhandled verb: " + str(self.verb)) iq = IQ(xs, self.stanzaType) iq.addElement((childURI, 'pubsub')) verbElement = iq.pubsub.addElement(childName) if self.sender: iq['from'] = self.sender.full() if self.recipient: iq['to'] = self.recipient.full() for parameter in self._parameters[self.verb]: getattr(self, '_render_%s' % parameter)(verbElement) return iq.send()
def sendVCard(self): """Send vCard to the server""" iq = IQ(self.xmlstream, 'set') vcard = iq.addElement((NS_VCARD_TEMP, 'vCard')) vcard.addElement("FN", content="IPoo") vcard.addElement("DESC", content="IP lookup utility") photo = vcard.addElement('PHOTO') photo.addElement("TYPE", content="image/png") photo.addElement("BINVAL", content=base64.encodestring( file(self.photo).read()).replace("\n", "")) return iq.send()
def removeItem(self, entity): """ Remove an item from the contact list. @param entity: The contact to remove the roster item for. @type entity: L{JID<twisted.words.protocols.jabber.jid.JID>} @rtype: L{twisted.internet.defer.Deferred} """ iq = IQ(self.xmlstream, 'set') iq.addElement((NS_ROSTER, 'query')) item = iq.query.addElement('item') item['jid'] = entity.full() item['subscription'] = 'remove' return iq.send()
def __init__(self, xs, namespace, nodeIdentifier=''): """ Initialize the request. @param xs: XML Stream the request should go out on. @type xs: L{xmlstream.XmlStream} @param namespace: Request namespace. @type namespace: C{str} @param nodeIdentifier: Node to request info from. @type nodeIdentifier: C{unicode} """ IQ.__init__(self, xs, "get") query = self.addElement((namespace, 'query')) if nodeIdentifier: query['node'] = nodeIdentifier
class IQTest(unittest.TestCase): """ Tests for L{IQ}. """ def setUp(self): self.reactor = FakeReactor() self.clock = self.reactor.clock def testRequestTimingOutEventDispatcher(self): """ Test that an iq request with a defined timeout times out. """ from twisted.words.xish import utility output = [] xs = utility.EventDispatcher() xs.send = output.append self.iq = IQ(xs, reactor=self.reactor) self.iq.timeout = 60 d = self.iq.send() self.assertFailure(d, xmlstream.TimeoutError) self.clock.pump([1, 60]) self.assertFalse(self.reactor.getDelayedCalls()) self.assertFalse(xs.iqDeferreds) return d
def getRoster(self): """ Retrieve contact list. @return: Roster as a mapping from L{JID} to L{RosterItem}. @rtype: L{twisted.internet.defer.Deferred} """ def processRoster(result): roster = {} for element in domish.generateElementsQNamed( result.query.children, 'item', NS_ROSTER): item = self._parseRosterItem(element) roster[item.jid.userhost()] = item return roster iq = IQ(self.xmlstream, 'get') iq.addElement((NS_ROSTER, 'query')) d = iq.send() d.addCallback(processRoster) return d
def getRoster(self): """ Retrieve contact list. @return: Roster as a mapping from L{JID} to L{RosterItem}. @rtype: L{twisted.internet.defer.Deferred} """ def processRoster(result): roster = {} for element in domish.generateElementsQNamed(result.query.children, 'item', NS_ROSTER): item = self._parseRosterItem(element) roster[item.jid.userhost()] = item return roster iq = IQ(self.xmlstream, 'get') iq.addElement((NS_ROSTER, 'query')) d = iq.send() d.addCallback(processRoster) return d