J'essaye d'écrire un petit programme qui ajoutera des alias de mDNS CNAME à mon périphérique de Linux, de sorte qu'il soit accessible par plus d'un "quelque chose.local". nom de domaine.Pourquoi ce code client Avahi ne fonctionne-t-il pas pour ajouter un alias CNAME à ma machine Linux?
La fonction prévue pour ce programme est la même que la avahi-aliases Python script, mais pour éviter une dépendance Python, j'essaye de l'implémenter en C++.
J'ai basé mon code (pour l'instant) sur l'exemple client-publish-service.c inclus dans la distribution de source Avahi. Quand je cours cet exemple inchangé, cela fonctionne comme prévu: en particulier, je vois "MegaPrinter" apparaître dans le navigateur Bonjour sur mon Mac, etc
L'étape suivante consiste à modifier l'exemple de code pour ajouter un enregistrement CNAME d'ajouter des services. Donc, je #IFDEF le avahi_entry_group_add_service() appels et mis cela à la place:
const int TTL = 60;
char rdata[] = "\0msli-10135114\0local"; // "msli10135114.local." is the device's normal FQDN, which I want to make aliases to
rdata[0] = 13;
rdata[14] = 5;
printf("rdata=[%s] _moduleName=[%s]\n", rdata, _moduleName);
printf("add_record: %s\n", avahi_strerror(avahi_entry_group_add_record (group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, (AvahiPublishFlags)0, "TestX", 0x01, 0x10, 120, "\5booya", 6)));
if ((ret = avahi_entry_group_add_record(
group, //AvahiEntryGroup *group,
AVAHI_IF_UNSPEC, //AvahiIfIndex interface,
AVAHI_PROTO_UNSPEC, //AvahiProtocol protocol,
(AvahiPublishFlags)0, //AvahiPublishFlags flags,
_moduleName, //const char *name,
AVAHI_DNS_CLASS_IN, //uint16_t clazz,
AVAHI_DNS_TYPE_CNAME, //uint16_t type,
TTL, //uint32_t ttl,
rdata, //const void *rdata,
sizeof(rdata) //size_t size
)) < 0)
{
if (ret == AVAHI_ERR_COLLISION) goto collision;
fprintf(stderr, "Failed to add module record: %s\n", avahi_strerror(ret));
goto fail;
}
.... mais il ne fonctionne pas; en particulier, en cours d'exécution de la routine ne me donne que cette sortie:
msli-10135114local] _moduleName=[Wild-Tracks-1]
add_record: Not supported
Failed to add module record: Not supported
Ce qui est étrange est, non seulement mon appel à avahi_entry_group_add_record() échouer avec le code AVAHI_ERR_NOT_SUPPORTED, mais aussi mon appel de test jetable (à l'intérieur du printf ("add_record")) échoue également avec le même code d'erreur. Mais cet appel est copié verbatim à partir du fichier avahi-client/client-test.c qui vient avec Avahi, donc il semble que ce devrait être un appel valide.
Quelqu'un peut-il suggérer pourquoi ces appels pourraient échouer, ou ce que je fais mal ici? Dans le cas où cela serait utile, le code source complet pour le test est here.
Merci de partager le code! Je l'utilise. – benzado
après avoir compilé et exécuté 'publish_cnames www.bunsen.local fairplay.bunsen.local', j'ai essayé d'envoyer un ping à' www.bunsen.local' depuis un autre système sur le réseau mais je n'ai pas réussi. – neckTwi
Je peux 'ping bunsen.local' – neckTwi