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