def get_vcard(session, user): print "[update:vcard] Getting vcard for " + user + "..." vcard = xmpp.Node('vCard', attrs={'xmlns': xmpp.NS_VCARD}) iq = xmpp.Protocol('iq', user, 'get', payload=[vcard]) return session.SendAndCallForResponse(iq, handle_vcard)
def pubsub_configure(session, user, node, model, handler): value_access = xmpp.Node('value', payload=[model]) field_access = xmpp.Node('field', attrs={'var': 'pubsub#access_model'}, payload=[value_access]) value_type = xmpp.Node('value', payload=[xmpp.NS_PUBSUB + '#node_config']) field_type = xmpp.Node('field', attrs={ 'var': 'FORM_TYPE', 'type': 'hidden' }, payload=[value_type]) x = xmpp.Node('x', attrs={ 'xmlns': xmpp.NS_DATA, 'type': 'submit' }, payload=[field_type, field_access]) configure = xmpp.Node('configure', attrs={ 'xmlns': xmpp.NS_PUBSUB, 'node': node }, payload=[x]) pubsub = xmpp.Node('pubsub', attrs={'xmlns': xmpp.NS_PUBSUB + '#owner'}, payload=[configure]) iq = xmpp.Protocol('iq', '', 'set', payload=[pubsub]) return session.SendAndCallForResponse(iq, handler)
def get_microblog(session, user): print "[update:microblog] Getting microblog for " + user + "..." items = xmpp.Node('items', attrs={'node': 'urn:xmpp:microblog:0'}) pubsub = xmpp.Node('pubsub', attrs={'xmlns': xmpp.NS_PUBSUB}, payload=[items]) iq = xmpp.Protocol('iq', user, 'get', payload=[pubsub]) return session.SendAndCallForResponse(iq, handle_microblog)
def get_geoloc(session, user): print "[update:geoloc] Getting geoloc for " + user + "..." items = xmpp.Node('items', attrs={ 'node': xmpp.NS_GEOLOC, 'max_items': '1' }) pubsub = xmpp.Node('pubsub', attrs={'xmlns': xmpp.NS_PUBSUB}, payload=[items]) iq = xmpp.Protocol('iq', user, 'get', payload=[pubsub]) return session.SendAndCallForResponse(iq, handle_geoloc)
def _idle_ping(self): """Pings the server, calls on_ping_timeout() on no response. To enable set self.PING_FREQUENCY to a value higher than zero. """ if self.PING_FREQUENCY and time.time() - self.__lastping > self.PING_FREQUENCY: self.__lastping = time.time() #logging.debug('Pinging the server.') ping = xmpp.Protocol('iq',typ='get',payload=[xmpp.Node('ping',attrs={'xmlns':'urn:xmpp:ping'})]) try: res = self.conn.SendAndWaitForResponse(ping, self.PING_TIMEOUT) #logging.debug('Got response: ' + str(res)) if res is None: self.on_ping_timeout() except IOError, e: logging.error('Error pinging the server: %s, treating as ping timeout.' % e) self.on_ping_timeout()
def _on_photo_update(self, session, stanza): account = stanza.getFrom().getStripped() vupdate = stanza.getTag('x', namespace='vcard-temp:x:update') if not vupdate: return photo = vupdate.getTag('photo') if not photo: return photo = photo.getData() if not photo: return #request the photo only if we don't have it already n = xmpp.Node('vCard', attrs={'xmlns': xmpp.NS_VCARD}) iq = xmpp.Protocol('iq', account, 'get', payload=[n]) return session.SendAndCallForResponse(iq, self._on_contact_jabber_changed)
def __idle_ping(self): """send pings to make sure the server is still there""" # build a ping stanza and send it if it's been long enough since last ping if (self.opt('xmpp.ping_freq') and time.time() - self.last_ping > self.opt('xmpp.ping_freq')): self.last_ping = time.time() payload = [xmpp.Node('ping', attrs={'xmlns': 'urn:xmpp:ping'})] ping = xmpp.Protocol('iq', typ='get', payload=payload) # raise PingTimeout if pinging fails try: res = self.conn.SendAndWaitForResponse( ping, self.opt('xmpp.ping_timeout')) except IOError: self.disconnected(self.PingTimeout) if res is None: self.disconnected(self.PingTimeout)
def _handle_action_set_picture(self, picture_name): '''handle Action.ACTION_SET_PICTURE ''' try: f = open(picture_name, 'rb') avatar_data = f.read() f.close() except Exception: log.error("Loading of picture %s failed" % picture_name) return if not isinstance(avatar_data, str): avatar = "".join([chr(b) for b in avatar_data]) else: avatar = avatar_data n = xmpp.Node('vCard', attrs={'xmlns': xmpp.NS_VCARD}) iq_vcard = xmpp.Protocol('iq', self.session.account.account, 'set', payload=[n]) vcard = iq_vcard.addChild(name='vCard', namespace=xmpp.NS_VCARD) #vcard.addChild(name='NICKNAME', payload=[nick]) photo = vcard.addChild(name='PHOTO') #photo.setTagData(tag='TYPE', val=mime_type) photo.setTagData(tag='BINVAL', val=avatar.encode('base64')) self.client.send(iq_vcard) avatar_hash = hashlib.sha1(avatar).hexdigest().encode("hex") avatar_path = os.path.join(self.my_avatars.path, avatar_hash) if avatar_hash in self.my_avatars: self.session.picture_change_succeed(self.session.account.account, avatar_path) else: self.my_avatars.insert_raw(avatar_data) self.session.picture_change_succeed(self.session.account.account, avatar_path) self.session.contacts.me.picture = avatar_path
def message_app_send(session, user, body, app_data): url = xmpp.Node('url', payload=[app_data['url']]) action = xmpp.Node('action', attrs={ 'type': app_data['type'], 'job': app_data['job'], 'success': app_data['success'] }) data = xmpp.Node('data', attrs={'xmlns': 'jappix:app:' + app_data['id']}, payload=[action, url]) name = xmpp.Node('name', attrs={'id': app_data['id']}, payload=[app_data['name']]) app = xmpp.Node('app', attrs={'xmlns': 'jappix:app'}, payload=[name, data]) x = xmpp.Node('x', attrs={'xmlns': 'jabber:x:oob'}, payload=[url]) body = xmpp.Node('body', payload=[body]) iq = xmpp.Protocol('message', user, 'headline', payload=[body, x, app]) return session.send(iq)
pending_hosts_file = sys.argv[1] hosts_file = sys.argv[2] if os.path.getsize(pending_hosts_file) == 2: exit(0) pending_hosts = doJSON(pending_hosts_file) jc = xmpp.Client("anon.anakee.ru",debug=[]) jc.connect() jc.auth(None,None) for host in pending_hosts: ver_iq = xmpp.Protocol('iq', typ='get', to=host, payload = [xmpp.Node('query',{'xmlns':xmpp.NS_VERSION},[])]) try: ver_stz = jc.SendAndWaitForResponse(ver_iq,2) except IOError, e: ver_stz = False if ver_stz: if ver_stz.getTag("query"): ver = ver_stz.getTag("query").getTagData("version") if ver and re.match("^#[0-9^-]*-[a-z0-9]*$",ver): hosts_to_add.append(str(ver_stz.getAttr("from"))) journal.send("hosts.py: new host @"+str(ver_stz.getAttr("from"))) hosts = doJSON(hosts_file) doJSON(hosts_file,"w",list(set(hosts+hosts_to_add))) doJSON(pending_hosts_file,"w")
def request_vcard(session, JID): n = xmpp.Node('vCard', attrs={'xmlns': xmpp.NS_VCARD}) iq = xmpp.Protocol('iq', JID, 'get', payload=[n]) return session.SendAndCallForResponse(iq, recieve_vcard)