def setup_priviledged(self): log.info("Setting up the XenBEE broker") # TODO: hier muss etwas rein!! - start log.info("initializing schema documents...") from lxml import etree self.schema_map = {} for schema in os.listdir(self.opts.schema_dir): if not schema.endswith(".xsd"): continue path = os.path.join(self.opts.schema_dir, schema) log.info(" reading %s" % path) xsd_doc = etree.parse(path) namespace = xsd_doc.getroot().attrib["targetNamespace"] self.schema_map[namespace] = etree.XMLSchema(xsd_doc) log.info(" done.") log.info("initializing certificates...") # read in the certificate and private-key from xbe.xml.security import X509Certificate self.ca_certificate = X509Certificate.load_from_files(self.opts.ca_cert) log.info(" CA certificate: %s", self.ca_certificate.subject()["CN"]) cert = X509Certificate.load_from_files(self.opts.x509, self.opts.p_key) if not self.ca_certificate.validate_certificate(cert): self.error("the given x509 certificate has not been signed by the given CA") self.certificate = cert log.info(" my certificate: %s" % (self.certificate.subject()["CN"])) log.info(" done.") log.info("initializing twisted...") from twisted.python import threadable threadable.init() log.info(" done.") log.info("initializing user database...") from xbe.xbed.user import UserDatabase self.userDatabase = UserDatabase.getInstance(self.opts.user_db) log.info(" done.") log.info("initializing reactor...") from twisted.internet import reactor from xbe.broker.proto import XenBEEBrokerProtocolFactory from xbe.util.network import urlparse proto, host, queue, _, _, _ = urlparse(self.opts.uri) if proto != "stomp": raise ValueError("unknown protocol", proto) try: host, port = host.split(":") port = int(port) except ValueError, e: port = 61613
def main(self, argv=sys.argv, prog_name=None): from twisted.python import threadable threadable.init() if prog_name is None: argv[0] = os.path.basename(argv[0]) self.argv = argv cmd = createCommand(argv[1:]) if cmd: try: cmd.pre_execute() self.setup_logging(cmd.opts.verbose) if isinstance(cmd, RemoteCommand): from xbe.util import network prot, host, stomp_queue, u1, u2, u3 = network.urlparse(cmd.opts.server) if prot != "stomp": raise ValueError("I do not understand this wire-protocol", prot) from xbe.cmdline.protocol import ClientProtocolFactory, ClientXMLProtocol # TODO: generate ID or use some given one factory = ClientProtocolFactory( id=str(uuid.uuid4()), stomp_user=cmd.opts.stomp_user, stomp_pass=cmd.opts.stomp_pass, certificate=cmd.user_cert, ca_cert=cmd.ca_cert, server_queue="/queue"+stomp_queue, protocolFactory=ClientXMLProtocol, protocolFactoryArgs=(cmd,)) from twisted.internet import reactor from twisted.python import threadable threadable.init() h_p = host.split(":") if len(h_p) == 2: host, port = h_p else: host, port = h_p[0], 61613 # schedule a Timeout cmd.scheduleTimeout(name="connect") reactor.connectTCP(host, port, factory) reactor.run() else: cmd.execute() cmd.post_execute() if cmd.status_info[0]: raise CommandFailed(cmd.status_info[1]) except CommandFailed, cf: print >>sys.stderr, "%s:" % sys.argv[0], str(cmd), "failed (details follow)" print >>sys.stderr, "\n".join([ "%s: %s" % (sys.argv[0],s) for s in str(cf.message).split('\n')]) return 2 except:
def setup_priviledged(self): log.info("Setting up the XenBEE instance daemon") log.info("initializing schema documents...") from lxml import etree self.schema_map = {} for schema in os.listdir(self.opts.schema_dir): if not schema.endswith(".xsd"): continue path = os.path.join(self.opts.schema_dir, schema) log.info(" reading %s" % path) xsd_doc = etree.parse(path) namespace = xsd_doc.getroot().attrib["targetNamespace"] self.schema_map[namespace] = etree.XMLSchema(xsd_doc) log.info(" done.") log.info("initializing the twisted framework...") from twisted.python import threadable threadable.init() log.info(" done.") # set up the uuid if self.opts.uuid is None: raise RuntimeError("could not get my instance id") self.queue = "/queue/xenbee.instance.%s" % (self.opts.uuid) # set up the STOMP server from xbe.util.network import urlparse if self.opts.server is None: raise RuntimeError("no server uri given, use XBE_SERVER or -H") proto, host, queue, _, _, _ = urlparse(self.opts.server) if proto != "stomp": raise ValueError("unknown protocol", proto) self.proto = proto try: self.host, port = host.split(":") self.port = int(port) except Exception, e: self.host = host self.port = 61613