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 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 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 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 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