static void create_services(AvahiServer *s) { char r[128]; int ret; assert(s); /* If this is the first time we're called, let's create a new entry group */ if (!group) if (!(group = avahi_s_entry_group_new(s, entry_group_callback, NULL))) { fprintf(stderr, "avahi_entry_group_new() failed: %s\n", avahi_strerror(avahi_server_errno(s))); goto fail; } fprintf(stderr, "Adding service '%s'\n", name); /* Create some random TXT data */ snprintf(r, sizeof(r), "random=%i", rand()); /* Add the service for IPP */ if ((ret = avahi_server_add_service(s, group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, name, "_ipp._tcp", NULL, NULL, 651, "test=blah", r, NULL)) < 0) { fprintf(stderr, "Failed to add _ipp._tcp service: %s\n", avahi_strerror(ret)); goto fail; } /* Add the same service for BSD LPR */ if ((ret = avahi_server_add_service(s, group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, name, "_printer._tcp", NULL, NULL, 515, NULL)) < 0) { fprintf(stderr, "Failed to add _printer._tcp service: %s\n", avahi_strerror(ret)); goto fail; } /* Add an additional (hypothetic) subtype */ if ((ret = avahi_server_add_service_subtype(s, group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, name, "_printer._tcp", NULL, "_magic._sub._printer._tcp") < 0)) { fprintf(stderr, "Failed to add subtype _magic._sub._printer._tcp: %s\n", avahi_strerror(ret)); goto fail; } /* Tell the server to register the service */ if ((ret = avahi_s_entry_group_commit(group)) < 0) { fprintf(stderr, "Failed to commit entry_group: %s\n", avahi_strerror(ret)); goto fail; } return; fail: avahi_simple_poll_quit(simple_poll); }
void ControllerDiscoveryMDNS::create_service( AvahiServer * server ) { if ( !group ) { group = avahi_s_entry_group_new( server, avahi_entry_group_callback, this ); if ( !group ) { g_warning( "FAILED TO CREATE AVAHI ENTRY GROUP : %s", avahi_strerror( avahi_server_errno( server ) ) ); } } if ( group ) { if ( avahi_s_entry_group_is_empty( group ) ) { int ret = AVAHI_OK; while ( true ) { // TODO: this could loop forever...maybe we should bail at some stage ret = avahi_server_add_service( server, group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, AvahiPublishFlags( 0 ), name.c_str(), TP_REMOTE_MDNS_SERVICE, NULL, NULL, port, NULL ); if ( ret == AVAHI_ERR_COLLISION ) { rename(); } else { break; } } if ( ret != AVAHI_OK ) { g_warning( "FAILED TO ADD AVAHI SERVICE : %s", avahi_strerror( ret ) ); } else { while ( true ) { // TODO: this could loop forever...maybe we should bail at some stage ret = avahi_server_add_service( server, group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, AvahiPublishFlags( 0 ), name.c_str(), TP_HTTP_MDNS_SERVICE, NULL, NULL, http_port, NULL ); if ( ret == AVAHI_ERR_COLLISION ) { rename(); } else { break; } } if ( ret != AVAHI_OK ) { g_warning( "FAILED TO ADD AVAHI SERVICE : %s", avahi_strerror( ret ) ); } else { ret = avahi_s_entry_group_commit( group ); if ( ret != AVAHI_OK ) { g_warning( "FAILED TO COMMIT AVAHI SERVICE : %s", avahi_strerror( ret ) ); } } } } } }