static VALUE create_fullname(const char *name, const char *regtype, const char *domain) { VALUE fullname; char buffer[kDNSServiceMaxDomainName]; if (DNSServiceConstructFullName(buffer, name, regtype, domain)) { static const char msg[] = "could not construct full service name"; rb_raise(rb_eArgError, msg); } buffer[kDNSServiceMaxDomainName - 1] = '\000'; /* just in case */ fullname = rb_str_new2(buffer); rb_enc_associate(fullname, rb_utf8_encoding()); return fullname; }
JNIEXPORT jint JNICALL Java_com_apple_dnssd_AppleDNSSD_ConstructName( JNIEnv *pEnv, jobject pThis _UNUSED, jstring serviceName, jstring regtype, jstring domain, jobjectArray pOut) { DNSServiceErrorType err = kDNSServiceErr_NoError; const char *nameStr = SafeGetUTFChars( pEnv, serviceName); const char *regStr = SafeGetUTFChars( pEnv, regtype); const char *domStr = SafeGetUTFChars( pEnv, domain); char buff[ kDNSServiceMaxDomainName + 1]; err = DNSServiceConstructFullName( buff, nameStr, regStr, domStr); if ( err == kDNSServiceErr_NoError) { // pOut is expected to be a String[1] array. (*pEnv)->SetObjectArrayElement( pEnv, pOut, 0, (*pEnv)->NewStringUTF( pEnv, buff)); } SafeReleaseUTFChars( pEnv, serviceName, nameStr); SafeReleaseUTFChars( pEnv, regtype, regStr); SafeReleaseUTFChars( pEnv, domain, domStr); return err; }
static cups_device_t * /* O - Device */ get_device(cups_array_t *devices, /* I - Device array */ const char *serviceName, /* I - Name of service/device */ const char *regtype, /* I - Type of service */ const char *replyDomain) /* I - Service domain */ { cups_device_t key, /* Search key */ *device; /* Device */ char fullName[kDNSServiceMaxDomainName]; /* Full name for query */ /* * See if this is a new device... */ key.name = (char *)serviceName; key.type = device_type(regtype); for (device = cupsArrayFind(devices, &key); device; device = cupsArrayNext(devices)) if (_cups_strcasecmp(device->name, key.name)) break; else if (device->type == key.type) { if (!_cups_strcasecmp(device->domain, "local.") && _cups_strcasecmp(device->domain, replyDomain)) { /* * Update the .local listing to use the "global" domain name instead. * The backend will try local lookups first, then the global domain name. */ free(device->domain); device->domain = strdup(replyDomain); #ifdef HAVE_DNSSD DNSServiceConstructFullName(fullName, device->name, regtype, replyDomain); #else /* HAVE_AVAHI */ avahi_service_name_join(fullName, kDNSServiceMaxDomainName, serviceName, regtype, replyDomain); #endif /* HAVE_DNSSD */ free(device->fullName); device->fullName = strdup(fullName); } return (device); } /* * Yes, add the device... */ device = calloc(sizeof(cups_device_t), 1); device->name = strdup(serviceName); device->domain = strdup(replyDomain); device->type = key.type; device->priority = 50; cupsArrayAdd(devices, device); /* * Set the "full name" of this service, which is used for queries... */ #ifdef HAVE_DNSSD DNSServiceConstructFullName(fullName, serviceName, regtype, replyDomain); #else /* HAVE_AVAHI */ avahi_service_name_join(fullName, kDNSServiceMaxDomainName, serviceName, regtype, replyDomain); #endif /* HAVE_DNSSD */ device->fullName = strdup(fullName); return (device); }
static cups_device_t * /* O - Device */ get_device(cups_array_t *devices, /* I - Device array */ const char *serviceName, /* I - Name of service/device */ const char *regtype, /* I - Type of service */ const char *replyDomain) /* I - Service domain */ { cups_device_t key, /* Search key */ *device; /* Device */ char fullName[kDNSServiceMaxDomainName]; /* Full name for query */ /* * See if this is a new device... */ key.name = (char *)serviceName; key.regtype = (char *)regtype; for (device = cupsArrayFind(devices, &key); device; device = cupsArrayNext(devices)) if (strcasecmp(device->name, key.name)) break; else { if (!strcasecmp(device->domain, "local.") && strcasecmp(device->domain, replyDomain)) { /* * Update the .local listing to use the "global" domain name instead. * The backend will try local lookups first, then the global domain name. */ free(device->domain); device->domain = strdup(replyDomain); DNSServiceConstructFullName(fullName, device->name, regtype, replyDomain); free(device->fullName); device->fullName = strdup(fullName); } return (device); } /* * Yes, add the device... */ device = calloc(sizeof(cups_device_t), 1); device->name = strdup(serviceName); device->domain = strdup(replyDomain); device->regtype = strdup(regtype); cupsArrayAdd(devices, device); /* * Set the "full name" of this service, which is used for queries... */ DNSServiceConstructFullName(fullName, serviceName, regtype, replyDomain); device->fullName = strdup(fullName); #ifdef DEBUG fprintf(stderr, "get_device: fullName=\"%s\"...\n", fullName); #endif /* DEBUG */ return (device); }