]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blobdiff - libavformat/udp.c
Added meaningful labels to FWP contracts
[frescor/ffmpeg.git] / libavformat / udp.c
index 8dd961e56ef764f349e0f70cb236c36564feb6e3..d45288e5e27b79588924428cb21db29590bc9d22 100644 (file)
@@ -35,6 +35,9 @@
 #include <sys/time.h>
 
 #include <frsh.h>
+#include <frsh_core_types.h>
+
+long int udp_budget, udp_period;
 
 typedef struct {
     int udp_fd;
@@ -51,6 +54,7 @@ typedef struct {
        frsh_vres_id_t vres;
        frsh_send_endpoint_protocol_info_t send_pinfo;
        frsh_contract_t contract;
+       frsh_contract_label_t label;
        frsh_rel_time_t budget, period;
 } UDPContext;
 
@@ -91,7 +95,9 @@ static int is_multicast_address(struct sockaddr_in *addr)
 static int 
 udp_socket_create(UDPContext *s, struct sockaddr_in *addr, int *addr_len)
 {
+       static long int netcont_num = 0;
        int ret,udp_fd;
+       char netcont_name[20];
 
     addr->sin_family = AF_INET;
     addr->sin_addr.s_addr = htonl (INADDR_ANY);
@@ -99,8 +105,8 @@ udp_socket_create(UDPContext *s, struct sockaddr_in *addr, int *addr_len)
     *addr_len = sizeof(struct sockaddr_in);
 
        /* set params for contract */
-       frsh_network_bytes_to_budget(FRSH_NETPF_FWP, 8600000, &s->budget);
-       s->period = fosa_msec_to_rel_time(100);
+       frsh_network_bytes_to_budget(FRSH_NETPF_FWP, udp_budget, &s->budget);
+       s->period = fosa_msec_to_rel_time(udp_period);
        s->send_pinfo.body = NULL;              
        
        udp_fd = frsh_send_endpoint_create(FRSH_NETPF_FWP, 
@@ -124,8 +130,10 @@ udp_socket_create(UDPContext *s, struct sockaddr_in *addr, int *addr_len)
                                             FRSH_CT_REGULAR);
        //if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
        if (ret) return -1;
-       ret = frsh_contract_set_resource_and_label(&s->contract,FRSH_RT_NETWORK,
-                                               FRSH_NETPF_FWP, "net_cont1");
+       snprintf(netcont_name, sizeof(netcont_name), "ffmpeg%02d", ++netcont_num);
+       ret = frsh_contract_set_resource_and_label(&s->contract,FRSH_RT_NETWORK,
+                                                  FRSH_NETPF_FWP,
+                                                  s->label[0] ? s->label : netcont_name);
        //if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_resource_and_label");
        if (ret) return -1;
 
@@ -250,6 +258,10 @@ static int udp_open(URLContext *h, const char *uri, int flags)
         if (find_info_tag(buf, sizeof(buf), "buffer_size", p)) {
             s->buffer_size = strtol(buf, NULL, 10);
         }
+        if (!find_info_tag(s->label, sizeof(s->label),
+                         "contract_label", p)) {
+               s->label[0]=0;
+        }
     }
 
     /* fill the dest addr */
@@ -330,11 +342,11 @@ static int udp_write(URLContext *h, uint8_t *buf, int size)
 static int udp_close(URLContext *h)
 {
     UDPContext *s = h->priv_data;
-    int ret1, ret2;
+    int ret;
        
-       ret1 = frsh_send_endpoint_destroy(s->sepoint);
-       ret2 = frsh_receive_endpoint_destroy(s->repoint);
-       return (ret1 || ret2);
+       frsh_send_endpoint_unbind(s->sepoint);
+       ret = frsh_contract_cancel(s->vres);
+       return ret;
 }
 
 URLProtocol udp_protocol = {