From e606fbdab4ba876a6a07658710f6fdedef59b0bf Mon Sep 17 00:00:00 2001 From: phil <me@filou.se> Date: Thu, 29 Apr 2021 12:16:30 +0200 Subject: [PATCH] avahi/rav-publish fix --- src/utils/mdns-avahi.c | 13 +++++++++++++ src/utils/rav-publish/rav-publish.c | 18 ++++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/utils/mdns-avahi.c b/src/utils/mdns-avahi.c index 0b83348..060453d 100644 --- a/src/utils/mdns-avahi.c +++ b/src/utils/mdns-avahi.c @@ -259,6 +259,8 @@ static void resource_delete(context_t * context, resource_t * res) avahi_service_resolver_free(res->res); } else if ((res->type == restype_publish_service_pending || res->type == restype_publish_service_done) && res->res){ +// avahi_entry_group_reset(res->res); +// avahi_entry_group avahi_entry_group_free(res->res); } @@ -541,6 +543,10 @@ void aes67_mdns_delete(aes67_mdns_context_t ctx) context_t * context = ctx; + while(context->first_resource){ + aes67_mdns_stop(context->first_resource); + } + if (context->client){ avahi_client_free(context->client); } @@ -888,6 +894,13 @@ void aes67_mdns_stop(aes67_mdns_resource_t res) resource_t * r = res; + // note avahi does not terminate the service even if it's deleted etc + // bbut avahi-service behaves the same way.. +// if ((r->type == restype_publish_service_pending || r->type == restype_publish_service_done) && r->res) { +// avahi_entry_group_reset(r->res); +// avahi_entry_group_commit(r->res); +// } + resource_delete(r->context, r); } diff --git a/src/utils/rav-publish/rav-publish.c b/src/utils/rav-publish/rav-publish.c index 59b1b02..3bb9a57 100644 --- a/src/utils/rav-publish/rav-publish.c +++ b/src/utils/rav-publish/rav-publish.c @@ -42,6 +42,7 @@ typedef struct sdpres_st { struct aes67_net_addr addr; char * data; u32_t len; + aes67_mdns_resource_t service; struct sdpres_st * next; } sdpres_t; @@ -131,7 +132,7 @@ static void publish_callback(aes67_mdns_resource_t res, enum aes67_mdns_result r static void block_until_event(){ - int nfds; + int nfds = 0; fd_set rfds, xfds; // sigset_t sigmask; @@ -170,7 +171,6 @@ static void block_until_event(){ static int mdns_setup() { - mdns = aes67_mdns_new(); sdpres_t * sdpres = first_sdpres; @@ -206,13 +206,15 @@ static int mdns_setup() return EXIT_FAILURE; } - if (aes67_mdns_service_commit(mdns, service) == NULL){ - fprintf(stderr, "error committing service\n"); - return EXIT_FAILURE; - } + } + if (aes67_mdns_service_commit(mdns, service) == NULL){ + fprintf(stderr, "error committing service\n"); + return EXIT_FAILURE; } + sdpres->service = service; + sdpres = sdpres->next; } @@ -445,7 +447,7 @@ void aes67_rtsp_srv_http_handler(struct aes67_rtsp_srv * srv, const enum aes67_r *len = snprintf((char*)buf, maxlen, "HTTP/1.1 200 OK\r\n" "Connection: close\r\n" - "Content-Length: %lld\r\n" + "Content-Length: %ld\r\n" "\r\n" , st.st_size ); @@ -484,7 +486,7 @@ static int load_sdpres(char * fname, size_t maxlen) } if (st.st_size > maxlen){ - fprintf(stderr, "ERROR file too big (%lld bytes, max %zu) %s\n", st.st_size, maxlen, fname); + fprintf(stderr, "ERROR file too big (%ld bytes, max %zu) %s\n", st.st_size, maxlen, fname); return EXIT_FAILURE; } -- GitLab