#include <frsh.h>
#include <frsh_core_types.h>
-long int avformat_frsh_budget, avformat_frsh_period;
-
typedef struct {
int frsh_fd;
int ttl;
int dest_addr_len;
frsh_send_endpoint_t sepoint;
- frsh_send_endpoint_t repoint;
+ frsh_receive_endpoint_t repoint;
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;
+ frsh_rel_time_t budget, period, deadline;
} FRSHContext;
#define FRSH_TX_BUF_SIZE 32768
#define FRSH_MAX_PKT_SIZE 65536
-static int frsh_set_multicast_ttl(int sockfd, int mcastTTL, struct sockaddr *addr)
-{
- return 0;
-}
-
-static int frsh_join_multicast_group(int sockfd, struct sockaddr *addr)
-{
- return 0;
-}
-
-static int frsh_leave_multicast_group(int sockfd, struct sockaddr *addr)
-{
- return 0;
-}
-
static int frsh_set_url(struct sockaddr_in *addr, const char *hostname, int port)
{
/* set the destination address */
}
static int
-frsh_socket_create(FRSHContext *s, struct sockaddr_in *addr, int *addr_len)
+frsh_output_socket_create(FRSHContext *s)
{
static long int netcont_num = 0;
int ret,frsh_fd;
char netcont_name[20];
+ struct sockaddr_in addr;
+ int addr_len;
- addr->sin_family = AF_INET;
- addr->sin_addr.s_addr = htonl (INADDR_ANY);
- addr->sin_port = htons(s->local_port);
- *addr_len = sizeof(struct sockaddr_in);
+ addr.sin_family = AF_INET;
+ addr.sin_addr.s_addr = htonl (INADDR_ANY);
+ addr.sin_port = htons(s->local_port);
+ addr_len = sizeof(addr);
/* set params for contract */
- frsh_network_bytes_to_budget(FRSH_NETPF_FWP, avformat_frsh_budget, &s->budget);
- s->period = fosa_msec_to_rel_time(avformat_frsh_period);
s->send_pinfo.body = NULL;
frsh_fd = frsh_send_endpoint_create(FRSH_NETPF_FWP,
FRSH_CT_REGULAR);
//if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
if (ret) return -1;
- snprintf(netcont_name, sizeof(netcont_name), "ffmpeg%02d", ++netcont_num);
+ snprintf(netcont_name, sizeof(netcont_name), "ffmpeg%02ld", ++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;
+ if (frsh_rel_time_to_nsec(s->deadline) > 0) {
+ ret = frsh_contract_set_timing_reqs(&s->contract, false, &s->deadline);
+ if (ret) return -1;
+ }
+
ret = frsh_contract_negotiate(&s->contract, &s->vres);
//if (ret) PERROR_AND_EXIT(ret, "frsh_contract_negotiate");
if (ret) return -1;
return frsh_fd;
}
+static int
+frsh_input_socket_create(FRSHContext *s)
+{
+ frsh_receive_endpoint_protocol_info_t pi = { NULL, 0 };
+ frsh_endpoint_queueing_info_t qi = { .queue_size=0, .queue_policy=FRSH_QRP_OLDEST };
+
+ return frsh_receive_endpoint_create(FRSH_NETPF_FWP, s->local_port, qi, pi,
+ &s->repoint);
+}
+
+
+
static int frsh_port(struct sockaddr_in *addr, int len)
{
return ntohs(addr->sin_port);
"contract_label", p)) {
s->label[0]=0;
}
+ if (find_info_tag(buf, sizeof(buf), "budget", p)) {
+ frsh_network_bytes_to_budget(FRSH_NETPF_FWP, strtol(buf, NULL, 10), &s->budget);
+ }
+ if (find_info_tag(buf, sizeof(buf), "period", p)) {
+ s->period=frsh_msec_to_rel_time(strtol(buf, NULL, 10));
+ }
+ if (find_info_tag(buf, sizeof(buf), "deadline", p)) {
+ s->deadline=frsh_msec_to_rel_time(strtol(buf, NULL, 10));
+ }
}
/* fill the dest addr */
frsh_set_remote_url(h, uri);
}
- frsh_fd = frsh_socket_create(s, &my_addr, &len);
+ if (is_output)
+ frsh_fd = frsh_output_socket_create(s);
+ else
+ frsh_fd = frsh_input_socket_create(s);
if (frsh_fd < 0)
goto fail;
#if 0
FRSHContext *s = h->priv_data;
int ret;
- ret = frsh_send_async(s->sepoint, buf, size);
+ ret = frsh_send_sync(s->sepoint, buf, size);
return ret;
}
frsh_send_endpoint_unbind(s->sepoint);
ret = frsh_contract_cancel(s->vres);
+ frsh_contract_destroy(s->contract);
return ret;
}