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