From: Michael R Sweet Date: Wed, 10 Apr 2024 21:26:23 +0000 (-0400) Subject: Add 'browse' sub-command to DNS-SD test program. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7ac12d1fe815d23fee23dc64c3c8247f54969024;p=thirdparty%2Fcups.git Add 'browse' sub-command to DNS-SD test program. --- diff --git a/cups/testdnssd.c b/cups/testdnssd.c index 5667219f56..aeab60c5c5 100644 --- a/cups/testdnssd.c +++ b/cups/testdnssd.c @@ -35,6 +35,7 @@ typedef struct testdata_s // Test data structure // static void browse_cb(cups_dnssd_browse_t *browse, void *cb_data, cups_dnssd_flags_t flags, uint32_t if_index, const char *name, const char *regtype, const char *domain); +static void browse_print_cb(cups_dnssd_browse_t *browse, void *cb_data, cups_dnssd_flags_t flags, uint32_t if_index, const char *name, const char *regtype, const char *domain); static void error_cb(void *cb_data, const char *message); static void query_cb(cups_dnssd_query_t *query, void *cb_data, cups_dnssd_flags_t flags, uint32_t if_index, const char *fullname, uint16_t rrtype, const void *qdata, uint16_t qlen); static void resolve_cb(cups_dnssd_resolve_t *res, void *cb_data, cups_dnssd_flags_t flags, uint32_t if_index, const char *fullname, const char *host, uint16_t port, int num_txt, cups_option_t *txt); @@ -205,6 +206,38 @@ main(int argc, // I - Number of command-line arguments cupsArrayDelete(testdata.messages); } + else if (argc == 3 && !strcmp(argv[1], "browse") && argv[2][0] == '_') + { + // Browse for the named service... + size_t count = 0; // Number of found services + + if ((dnssd = cupsDNSSDNew(error_cb, &testdata)) == NULL) + return (1); + + if ((browse = cupsDNSSDBrowseNew(dnssd, CUPS_DNSSD_IF_INDEX_ANY, argv[2], NULL, browse_print_cb, &testdata)) == NULL) + { + cupsDNSSDDelete(dnssd); + return (1); + } + + for (;;) + { + size_t browse_dnssd_count; // Saved count + + sleep(1); + + cupsMutexLock(&testdata.mutex); + browse_dnssd_count = testdata.browse_dnssd_count; + cupsMutexUnlock(&testdata.mutex); + + if (browse_dnssd_count == count) + break; + + count = browse_dnssd_count; + } + + cupsDNSSDDelete(dnssd); + } else { usage(argv[1]); @@ -251,6 +284,32 @@ browse_cb( } +// +// 'browse_print_cb()' - Print browse request callback usage. +// + +static void +browse_print_cb( + cups_dnssd_browse_t *browse, // I - Browse request + void *cb_data, // I - Callback data + cups_dnssd_flags_t flags, // I - Bit flags + uint32_t if_index, // I - Interface index + const char *name, // I - Service name + const char *regtype, // I - Registration type + const char *domain) // I - Domain +{ + testdata_t *data = (testdata_t *)cb_data; + // Test data + + + printf("%5u %s.%s.%s\n", if_index, name, regtype, domain); + + cupsMutexLock(&data->mutex); + data->browse_dnssd_count ++; + cupsMutexUnlock(&data->mutex); +} + + // // 'error_cb()' - Display an error. //