def register(name, port, stype='', rentry='' , host=''): ''' ''' rdata = "" if type(rentry) == dict: rdata = create_rentry_from_dict(rentry) else: rdata = rentry service_ref = bonjour.AllocateDNSServiceRef() if type == '': stype = SERVICE_TYPE retval = bonjour.pyDNSServiceRegister(service_ref, 0, 0, name, stype, SERVICE_DOMAIN, host, socket.htons(port), len(rdata), rdata, _register_callback, None) if retval != bonjour.kDNSServiceErr_NoError: message = "Error registering service %s (%d)" % (name, retval) raise RegisterError(message, reference=service_ref, errorval=retval) fd = bonjour.DNSServiceRefSockFD(service_ref) source = gobject.io_add_watch(fd, gobject.IO_IN, _fd_callback, service_ref) _add_ref(service_ref, source)
def startAdvertising(self): """Advertise the service with Bonjour. This method returns a deferred. Upon success, the result is a dictionary of information about the service. Upon failure, the result is a Failure object that knows the BonjourError code. """ # Allocate a Bonjour Service Reference self.sdRef = bonjour.AllocateDNSServiceRef() # Initiate Registration of the service ret = bonjour.pyDNSServiceRegister(self.sdRef, self.flags, self.interfaceIndex, self.name, self.regtype, self.domain, self.host, self.port, self.txtLen, self.txtRecord, self.callback, self.context) # Error check for immediate failure if ret != bonjour.kDNSServiceErr_NoError: raise BonjourRegistrationError(ret) # Get the file descriptor and integrate with twisted self.fd = bonjour.DNSServiceRefSockFD(self.sdRef) self.bonjourDesc = BonjourDescriptor(self.fd, self.sdRef) self.reactor.addReader(self.bonjourDesc) return None
def __init__(self, serviceName, regtype, url, port=9999): if port == 0: raise PublisherError( 'Service registered with invalid port %d' % (port, )) self.serviceRef = None self.registerFlag = threading.Event() # Create a text record txtRecordTxt = 'url=' + url txtRecord = chr(len(txtRecordTxt)) + txtRecordTxt txtRecordLen = len(txtRecord) # Allocate a service discovery reference and register the specified service self.serviceRef = bonjour.AllocateDNSServiceRef() ret = bonjour.pyDNSServiceRegister(self.serviceRef, 0, 0, serviceName, regtype, 'local.', None, port, txtRecordLen, txtRecord, self.__RegisterCallback, None) if ret != bonjour.kDNSServiceErr_NoError: raise PublisherError(ret) # Get the socket and loop fd = bonjour.DNSServiceRefSockFD(self.serviceRef) ret = select.select([fd], [], []) if ret[0]: ret = bonjour.DNSServiceProcessResult(self.serviceRef)
def publish(self,name): txtRecordLength = 1 txtRecord = "" interfaceIndex = 0 flags = 0 self.__servicename = name tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcpSock.bind(("0.0.0.0",0)) (addr,self.__port)=tcpSock.getsockname() #print "Addr: %s Port: %d" % (addr, self.port) #sys.stderr.write("Register service: %s\n" % (name,)) try: ret = bonjour.pyDNSServiceRegister(self.__serviceRef, flags, interfaceIndex, name, self.regtype, None, None, socket.htons(self.__port), txtRecordLength, txtRecord, self.__RegisterCallback, self) except Exception, err: print err sys.exit(1)
def __init__(self,serviceName,regtype,url,port=9999): if port == 0: raise PublisherError('Service registered with invalid port %d' % (port,)) self.serviceRef = None self.registerFlag = threading.Event() # Create a text record txtRecordTxt = 'url=' + url txtRecord = chr(len(txtRecordTxt)) + txtRecordTxt txtRecordLen = len(txtRecord) # Allocate a service discovery reference and register the specified service self.serviceRef = bonjour.AllocateDNSServiceRef() ret = bonjour.pyDNSServiceRegister(self.serviceRef, 0, 0, serviceName, regtype, 'local.', None, port, txtRecordLen, txtRecord, self.__RegisterCallback, None) if ret != bonjour.kDNSServiceErr_NoError: raise PublisherError(ret) # Get the socket and loop fd = bonjour.DNSServiceRefSockFD(self.serviceRef) ret = select.select([fd],[],[]) if ret[0]: ret = bonjour.DNSServiceProcessResult(self.serviceRef)
port = int(sys.argv[3]) userdata = None if len(sys.argv) > 4: userdata = sys.argv[4] hostname = socket.gethostname() # Allocate a service discovery reference and register the specified service serviceRef = bonjour.AllocateDNSServiceRef() ret = bonjour.pyDNSServiceRegister( serviceRef, # DNSServiceRef *sdRef, 0, # DNSServiceFlags flags, /* may be 0 */ 0, # uint32_t interfaceIndex,/* may be 0 */ servicename, # const char *name, /* may be NULL */ regtype, # const char *regtype, 'local.', # const char *domain, /* may be NULL */ hostname, # const char *host, /* may be NULL */ port, # uint16_t port, 0, # uint16_t txtLen, "", # const void *txtRecord, /* may be NULL */ RegisterCallback, # DNSServiceRegisterReply callBack, /* may be NULL */ userdata) if ret != bonjour.kDNSServiceErr_NoError: print "error %d returned; exiting" % ret sys.exit(ret) # Get the socket and loop fd = bonjour.DNSServiceRefSockFD(serviceRef) while 1: ret = select.select([fd], [], [])
flags = 0 interfaceIndex = 0 servicename = "MyService" regtype = "_test._tcp" domain = "local." host = socket.gethostname() port = 23 txtRecordLength = 0 txtRecord = "" userdata = None sys.stderr.write("Register service: %s\n" % (servicename, )) serviceRef = bonjour.AllocateDNSServiceRef() ret = bonjour.pyDNSServiceRegister(serviceRef, flags, interfaceIndex, servicename, regtype, domain, host, port, txtRecordLength, txtRecord, RegisterCallback, userdata) if ret != bonjour.kDNSServiceErr_NoError: print "register: ret = %d; exiting" % ret sys.exit(1) # Get the socket and loop fd = bonjour.DNSServiceRefSockFD(serviceRef) while not waitEvent.isSet(): ret = select.select([fd], [], []) ret = bonjour.DNSServiceProcessResult(serviceRef) sys.stderr.write("\nBrowsing for service\n") ret = bonjour.pyDNSServiceBrowse(serviceRef, 0, 0, regtype, 'local.', BrowseCallback, None) if ret != bonjour.kDNSServiceErr_NoError: