Пример #1
0
 def onDiscoInfo(self, iq):
     dl = []
     try:
         room = jid_unescape(jid.internJID(iq['to']).user)
     except:
         room = None
     host = jid.internJID(iq['to']).host
     for c in self.parent:
         if IService.providedBy(c):
             if hasattr(c, "get_disco_info"):
                 dl.append(c.get_disco_info(room=room, host=host, frm=iq['from']))
     iq.handled = True
     d = defer.DeferredList(dl, fireOnOneErrback=1, consumeErrors=1)
     d.addCallback(self._disco_info_results, iq, room)
     d.addErrback(self._error, iq)
     d.addCallback(self.send)
Пример #2
0
    def onDiscoItems(self, iq):
        dl = []
        node = iq.query.getAttribute("node")
        try:
            room = jid_unescape(jid.internJID(iq['to']).user)
        except:
            room = None

        host = jid.internJID(iq['to']).host
        nick = jid.internJID(iq['to']).resource

        for c in self.parent:
            if IService.providedBy(c):
                if hasattr(c, "get_disco_items"):
                    dl.append(c.get_disco_items(room=room, host=host, frm=iq['from'], nick=nick, node=node))
        iq.handled = True
        d = defer.DeferredList(dl, fireOnOneErrback=1, consumeErrors=1)
        d.addCallback(self._disco_items_result, iq, room)
        d.addErrback(self._error, iq)
        d.addCallback(self.send)
Пример #3
0
def makeService(config):
    serviceCollection = service.MultiService()
    cf = None
    try:
        p  = ConfigParser()
        cf = p.parse(config['config'])
    except:
        pass

    if not config['jid'] and cf:
        jname = str(getattr(cf,'name','palaver'))
        #jname = 'palaver'
        for e in cf.elements():
            if e.name == 'name':
                jname = str(e)
    elif config['jid']:
        jname = config['jid']
    else:
        jname = 'palaver'


    if not config['secret'] and cf:
        jsecret = str(getattr(cf, 'secret', 'secret'))
    else:
        jsecret = config['secret']

    if not config['rhost']  and cf:
        rhost = str(getattr(cf, 'ip', 'localhost'))
    else:
        rhost = config['rhost']

    if not config['rport']  and cf:
        rp    = getattr(cf, 'port', 5347)
        if rp:
            rport = int(str(rp))
        else:
            rport = 5347
    else:
        rport = int(config['rport'])

    if not config['spool']  and cf:
        spool = str(getattr(cf, 'spool', ''))
    else:
        spool = config['spool']

    # set up Jabber Component
    sm = component.buildServiceManager(jname, jsecret,
            ("tcp:%s:%s" % (rhost , rport)))

    if config["verbose"]:
        LogService().setServiceParent(sm)

    if cf:
        backend = getattr(cf.backend,'type',None)
        if backend:
            config['backend'] = str(backend)
            if config['backend'] != 'memory' and \
               config['backend'] != 'dir':
                dbuser = getattr(cf.backend,'dbuser',None)
                if dbuser:
                    config['dbuser'] = str(dbuser)
                dbname = getattr(cf.backend,'dbname',None)
                if dbname:
                    config['dbname'] = str(dbname)
                dbpass = getattr(cf.backend,'dbpass',None)
                if dbpass:
                    config['dbpass'] = str(dbpass)
                else:
                    config['dbpass'] = None

                dbport = getattr(cf.backend,'dbport',None)
                if dbport:
                    config['dbport'] = str(dbport)
                else:
                    config['dbport'] = None

                dbhostname = getattr(cf.backend,'dbhostname',None)
                if dbhostname:
                    config['dbhostname'] = str(dbhostname)
                else:
                    config['dbhostname'] = None
    config['plugins'] = {}
    if cf:
        if getattr(cf,'plugins',None):
            for p in cf.plugins.elements():
                plugin = reflect.namedModule(str(p))
                config['plugins'][str(p.name)] = plugin.Plugin()

    if config['backend'] == 'dir':
        import dir_storage
        st = dir_storage.Storage(spool)
    elif config['backend'] == 'memory':
        import memory_storage
        st = memory_storage.Storage()
    elif config['backend'] == 'pgsql':
        import pgsql_storage
        if config['dbhostname']:
            host = config['dbhostname']
        else:
            host = None

        if config['dbpass']:
            dbpass = config['dbpass']
        else:
            dbpass = None

        if config['dbport']:
            dbport = config['dbport']
        else:
            dbport = None

        st = pgsql_storage.Storage(user=config['dbuser'],
                                   database=config['dbname'],
                                   hostname=host,
                                   password=dbpass,
                                   port=dbport,
                                   )

    elif config['backend'] == 'psycopg':
        import psycopg_storage
        if config['dbhostname']:
            host = config['dbhostname']
        else:
            host = None

        if config['dbpass']:
            dbpass = config['dbpass']
        else:
            dbpass = None

        st = psycopg_storage.Storage(user=config['dbuser'],
                                   database=config['dbname'],
                                   hostname=host,
                                   password=dbpass,
                                   )

    sadmins = []
    conference = getattr(cf,'conference', None)
    if conference:
        sa = getattr(conference, 'sadmin', None)
        if sa:
            for u in sa.elements():
                sadmins.append(str(u))

    if len(sadmins)>0:
        st.sadmins = sadmins

    import muc
    bs = muc.groupchat.GroupchatService(st)
    if len(sadmins)>0:
        bs.sadmins = sadmins
    bs.plugins = config['plugins']

    c = IService(bs)
    c.setServiceParent(sm)

    bsc = muc.groupchat.RoomService()
    bsc.plugins = config['plugins']
    bsc.create_rooms = config['create']
    if len(sadmins)>0:
        bsc.sadmins = sadmins


    bsc.setServiceParent(bs)
    rs = IService(bsc)
    if len(config['log'])>1:
        import plog
        rs.logger = plog.HTMLLogger(config['log'])

    rs.setServiceParent(sm)

    if config['admin']==1:
        bsc = muc.groupchat.AdminService()
        bsc.plugins = config['plugins']
        bsc.setServiceParent(bs)
        if len(sadmins)>0:
            bsc.sadmins = sadmins

        IService(bsc).setServiceParent(sm)


    s = PalaverService()
    s.setServiceParent(sm)

    sm.setServiceParent(serviceCollection)


    return serviceCollection