Esempio n. 1
0
    def start(self):
        # start resolution for the missing URI's
        for key, uri in self.services.iteritems():
            if not uri:
                if self.remote:
                    if not self.sda:
                        self.sda = ServiceDiscovery(
                            debug=self.debug)  # singleton
                        # this might cause several service-resolved callbacks per service,
                        # one per network interface
                        # the URI is the same, so just act on the first one
                        self.sda.connect('service-resolved',
                                         self.service_resolved)
                        self.sda.connect('service-removed',
                                         self.service_removed)
                    domain = 'local'
                    self.sda.add_service_type(avahi.IF_UNSPEC,
                                              avahi.PROTO_INET,
                                              "_%s._sub._machinekit._tcp" %
                                              key,
                                              domain,
                                              key=key)
                    self.emit('log', levels.DEBUG,
                              "zeroconf-resolving %s" % key)
                else:
                    # use IPC socket
                    self.emit(
                        'uri-resolved', key, "ipc://%s/%d.%s.%s" %
                        (self.dir, self.hal_instance, key, self.instance_uuid))

            else:
                # URI explicitly set
                self.emit('uri-resolved', key, uri)
Esempio n. 2
0
    def start(self):
        # start resolution for the missing URI's
        for key, uri in self.services.iteritems():
            if not uri:
                if self.remote:
                    if not self.sda:
                        self.sda = ServiceDiscovery(debug=self.debug) # singleton
                        # this might cause several service-resolved callbacks per service,
                        # one per network interface
                        # the URI is the same, so just act on the first one
                        self.sda.connect('service-resolved', self.service_resolved)
                        self.sda.connect('service-removed', self.service_removed)
                    domain = 'local'
                    self.sda.add_service_type(avahi.IF_UNSPEC, avahi.PROTO_INET,
                                          "_%s._sub._machinekit._tcp" % key,
                                          domain, key=key)
                    self.emit('log', levels.DEBUG,"zeroconf-resolving %s" % key)
                else:
                    # use IPC socket
                    self.emit('uri-resolved',key, "ipc://%s/%d.%s.%s" %
                              (self.dir,self.hal_instance,key,self.instance_uuid))

            else:
                # URI explicitly set
                self.emit('uri-resolved',key, uri)
Esempio n. 3
0
    def factory(ws, params=None):
        parameters = {}
        data = None

        if params:
            parameters.update(params)
            if ServiceDiscoveryJuristek.PARAMETER_OAB in params and params.get(
                    ServiceDiscoveryJuristek.PARAMETER_OAB):
                data = "SELECT FROM 'INFO'.'INFO' WHERE 'TIPO_CONSULTA' = 'OAB'"

        if not data:
            data = "SELECT FROM 'INFO'.'INFO'"

        parameters.update({'data': data})
        return ServiceDiscovery(
            ws, ws.post("SELECT FROM 'JURISTEK'.'INFO'", parameters))
Esempio n. 4
0
class GServiceResolver(gobject.GObject):
    __gtype_name__ = 'GServiceResolver'
    __gsignals__ = {

        # log signal emits (level, text)
        'log': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (
            gobject.TYPE_INT,
            gobject.TYPE_STRING,
        )),

        # emits (<service key>, <uri>)  in the following cases:
        # immediately if a URI was passed as argument
        # if URI is None, but a matching IPC socket pathname exists
        # once a URI is resolved by zeroconf
        'uri-resolved': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (
            gobject.TYPE_STRING,
            gobject.TYPE_STRING,
        )),

        # emitted if a zeroconf announcement removed. only passes  <service key>.
        'announcement-removed':
        (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING, )),
    }

    def print_log(self, source, level, text):
        print >> sys.stderr, levels.reverse_mapping[level], text

    def pair_to_dict(self, l):
        ''' helper to parse TXT record into dict '''
        res = dict()
        for el in l:
            if "=" not in el:
                res[el] = ''
            else:
                tmp = el.split('=', 1)
                if len(tmp[0]) > 0:
                    res[tmp[0]] = tmp[1]
        return res

    def service_resolved(self, sd, r):
        key = r.kwargs['key']

        txt = self.pair_to_dict(r.txt)
        if not 'uuid' in txt:
            self.emit(
                'log', levels.ERROR,
                "BUG: %s: %s txt=%s, no UUID in TXT record %s" %
                (key, r.name, r.txt, r.kwargs))
            return

        if txt['uuid'] != self.instance_uuid:
            self.emit(
                'log', levels.DEBUG, "%s %s, uuid's dont match:  %s/%s" %
                (key, r.name, txt['uuid'], self.instance_uuid))
            return

        if not 'dsn' in txt:
            self.emit(
                'log', levels.ERROR,
                "BUG: UUID match but no dsn: %s: %s txt=%s %s" %
                (key, r.name, r.txt, r.kwargs))
            return

        self.emit(
            'log', levels.DEBUG, "%s resolved: '%s' %s %s " %
            (key, r.name, txt['dsn'], r.interface))
        self.emit('uri-resolved', txt['service'], txt['dsn'])

    def service_removed(self, sd, r):
        svc = r.kwargs['key']
        self.emit('log', levels.DEBUG,
                  "%s removed: %s %s %s" % (svc, r.name, r.type, r.kwargs))
        self.emit('announcement-removed', svc)

    def __init__(
            self,
            services,  # dict service key -> URI
            instance_uuid=None,
            hal_instance=0,
            dir="/tmp",  # where IPC sockets live
            remote=False,
            debug=False):
        gobject.GObject.__init__(self)
        self.services = services
        self.instance_uuid = instance_uuid
        self.hal_instance = hal_instance
        self.debug = debug
        self.remote = remote
        self.dir = dir
        self.sda = None
        if debug:
            self.connect('log', self.print_log)

    def start(self):
        # start resolution for the missing URI's
        for key, uri in self.services.iteritems():
            if not uri:
                if self.remote:
                    if not self.sda:
                        self.sda = ServiceDiscovery(
                            debug=self.debug)  # singleton
                        # this might cause several service-resolved callbacks per service,
                        # one per network interface
                        # the URI is the same, so just act on the first one
                        self.sda.connect('service-resolved',
                                         self.service_resolved)
                        self.sda.connect('service-removed',
                                         self.service_removed)
                    domain = 'local'
                    self.sda.add_service_type(avahi.IF_UNSPEC,
                                              avahi.PROTO_INET,
                                              "_%s._sub._machinekit._tcp" %
                                              key,
                                              domain,
                                              key=key)
                    self.emit('log', levels.DEBUG,
                              "zeroconf-resolving %s" % key)
                else:
                    # use IPC socket
                    self.emit(
                        'uri-resolved', key, "ipc://%s/%d.%s.%s" %
                        (self.dir, self.hal_instance, key, self.instance_uuid))

            else:
                # URI explicitly set
                self.emit('uri-resolved', key, uri)
Esempio n. 5
0
class GServiceResolver(gobject.GObject):
    __gtype_name__ = 'GServiceResolver'
    __gsignals__ = {

        # log signal emits (level, text)
        'log' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
                   (gobject.TYPE_INT,gobject.TYPE_STRING,)),

        # emits (<service key>, <uri>)  in the following cases:
        # immediately if a URI was passed as argument
        # if URI is None, but a matching IPC socket pathname exists
        # once a URI is resolved by zeroconf
        'uri-resolved' :  (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
                   (gobject.TYPE_STRING,gobject.TYPE_STRING,)),

        # emitted if a zeroconf announcement removed. only passes  <service key>.
        'announcement-removed' :  (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
                                   (gobject.TYPE_STRING,)),

        }

    def print_log(self, source, level, text):
        print >> sys.stderr, levels.reverse_mapping[level], text

    def pair_to_dict(self, l):
        ''' helper to parse TXT record into dict '''
        res = dict()
        for el in l:
            if "=" not in el:
                res[el]=''
            else:
                tmp = el.split('=',1)
                if len(tmp[0]) > 0:
                    res[tmp[0]] = tmp[1]
        return res

    def service_resolved(self, sd, r):
        key = r.kwargs['key']

        txt = self.pair_to_dict(r.txt)
        if not 'uuid' in txt:
            self.emit('log',levels.ERROR,"BUG: %s: %s txt=%s, no UUID in TXT record %s" % (key, r.name,r.txt,r.kwargs))
            return

        if txt['uuid'] != self.instance_uuid:
            self.emit('log',levels.DEBUG,"%s %s, uuid's dont match:  %s/%s" % (key,r.name,txt['uuid'], self.instance_uuid))
            return

        if not 'dsn' in txt:
            self.emit('log',levels.ERROR,"BUG: UUID match but no dsn: %s: %s txt=%s %s" % (key, r.name,r.txt,r.kwargs))
            return

        self.emit('log',levels.DEBUG,"%s resolved: '%s' %s %s " % (key,r.name,txt['dsn'],r.interface))
        self.emit('uri-resolved',txt['service'], txt['dsn'])


    def service_removed(self,sd, r):
        svc = r.kwargs['key']
        self.emit('log',levels.DEBUG,"%s removed: %s %s %s" % (svc, r.name,r.type,r.kwargs))
        self.emit('announcement-removed',svc)

    def __init__(self,
                 services,         # dict service key -> URI
                 instance_uuid=None,
                 hal_instance=0,
                 dir="/tmp",       # where IPC sockets live
                 remote=False,
                 debug=False):
        gobject.GObject.__init__(self)
        self.services = services
        self.instance_uuid = instance_uuid
        self.hal_instance = hal_instance
        self.debug = debug
        self.remote = remote
        self.dir = dir
        self.sda = None
        if debug:
            self.connect('log', self.print_log)

    def start(self):
        # start resolution for the missing URI's
        for key, uri in self.services.iteritems():
            if not uri:
                if self.remote:
                    if not self.sda:
                        self.sda = ServiceDiscovery(debug=self.debug) # singleton
                        # this might cause several service-resolved callbacks per service,
                        # one per network interface
                        # the URI is the same, so just act on the first one
                        self.sda.connect('service-resolved', self.service_resolved)
                        self.sda.connect('service-removed', self.service_removed)
                    domain = 'local'
                    self.sda.add_service_type(avahi.IF_UNSPEC, avahi.PROTO_INET,
                                          "_%s._sub._machinekit._tcp" % key,
                                          domain, key=key)
                    self.emit('log', levels.DEBUG,"zeroconf-resolving %s" % key)
                else:
                    # use IPC socket
                    self.emit('uri-resolved',key, "ipc://%s/%d.%s.%s" %
                              (self.dir,self.hal_instance,key,self.instance_uuid))

            else:
                # URI explicitly set
                self.emit('uri-resolved',key, uri)