예제 #1
0
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)
예제 #2
0
파일: pending.py 프로젝트: jappix/jappix-me
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)
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
    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()
예제 #6
0
    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)
예제 #7
0
    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)
예제 #8
0
    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
예제 #9
0
파일: pending.py 프로젝트: jappix/jappix-me
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)
예제 #10
0
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")
예제 #11
0
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)