|
|
|
|
@ -32,8 +32,7 @@ static size_t dummy_read(char *ptr, size_t size, size_t nmemb, void *userdata) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void do_notify(void *p, void *u) {
|
|
|
|
|
struct notif_req *req = p;
|
|
|
|
|
static void do_notify_http(struct notif_req *req) {
|
|
|
|
|
const char *err = NULL;
|
|
|
|
|
CURLcode ret;
|
|
|
|
|
|
|
|
|
|
@ -187,6 +186,13 @@ cleanup:
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
curl_slist_free_all(req->headers);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void do_notify(void *p, void *u) {
|
|
|
|
|
struct notif_req *req = p;
|
|
|
|
|
|
|
|
|
|
do_notify_http(req);
|
|
|
|
|
|
|
|
|
|
g_free(req->name);
|
|
|
|
|
g_free(req->full_filename_path);
|
|
|
|
|
g_free(req);
|
|
|
|
|
@ -198,19 +204,19 @@ static void *notify_timer(void *p) {
|
|
|
|
|
|
|
|
|
|
// notify_timers being NULL acts as our shutdown flag
|
|
|
|
|
while (notify_timers) {
|
|
|
|
|
ilog(LOG_DEBUG, "HTTP notification timer thread looping");
|
|
|
|
|
ilog(LOG_DEBUG, "Notification timer thread looping");
|
|
|
|
|
|
|
|
|
|
// grab first entry in list, check retry time, sleep if it's in the future
|
|
|
|
|
|
|
|
|
|
struct notif_req *first = rtpe_g_tree_first(notify_timers);
|
|
|
|
|
if (!first) {
|
|
|
|
|
ilog(LOG_DEBUG, "No scheduled HTTP notification retries, sleeping");
|
|
|
|
|
ilog(LOG_DEBUG, "No scheduled notification retries, sleeping");
|
|
|
|
|
pthread_cond_wait(&timer_cond, &timer_lock);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
int64_t now = now_us();
|
|
|
|
|
if (now < first->retry_time) {
|
|
|
|
|
ilog(LOG_DEBUG, "Sleeping until next scheduled HTTP notification retry in %" PRId64 " seconds",
|
|
|
|
|
ilog(LOG_DEBUG, "Sleeping until next scheduled notification retry in %" PRId64 " seconds",
|
|
|
|
|
(first->retry_time - now) / 1000000L);
|
|
|
|
|
cond_timedwait(&timer_cond, &timer_lock, first->retry_time);
|
|
|
|
|
continue;
|
|
|
|
|
@ -219,7 +225,7 @@ static void *notify_timer(void *p) {
|
|
|
|
|
// first entry is ready to run
|
|
|
|
|
|
|
|
|
|
g_tree_remove(notify_timers, first);
|
|
|
|
|
ilog(LOG_DEBUG, "HTTP notification retry for '%s%s%s' is scheduled now", FMT_M(first->name));
|
|
|
|
|
ilog(LOG_DEBUG, "Notification retry for '%s%s%s' is scheduled now", FMT_M(first->name));
|
|
|
|
|
g_thread_pool_push(notify_threadpool, first, NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -283,14 +289,7 @@ static void notify_add_header(struct notif_req *req, const char *fmt, ...) {
|
|
|
|
|
va_end(ap);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void notify_push_output(output_t *o, metafile_t *mf, tag_t *tag) {
|
|
|
|
|
if (!notify_threadpool)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
struct notif_req *req = g_new0(__typeof(*req), 1);
|
|
|
|
|
|
|
|
|
|
req->name = g_strdup(o->file_name);
|
|
|
|
|
req->full_filename_path = g_strdup_printf("%s.%s", o->full_filename, o->file_format);
|
|
|
|
|
static void notify_req_setup_http(struct notif_req *req, output_t *o, metafile_t *mf, tag_t *tag) {
|
|
|
|
|
double now = (double) now_us() / 1000000.;
|
|
|
|
|
|
|
|
|
|
notify_add_header(req, "X-Recording-Call-ID: %s", mf->call_id);
|
|
|
|
|
@ -320,6 +319,19 @@ void notify_push_output(output_t *o, metafile_t *mf, tag_t *tag) {
|
|
|
|
|
notify_add_header(req, "X-Recording-Tag-Metadata: %s", tag->metadata);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void notify_push_output(output_t *o, metafile_t *mf, tag_t *tag) {
|
|
|
|
|
if (!notify_threadpool)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
struct notif_req *req = g_new0(__typeof(*req), 1);
|
|
|
|
|
|
|
|
|
|
req->name = g_strdup(o->file_name);
|
|
|
|
|
req->full_filename_path = g_strdup_printf("%s.%s", o->full_filename, o->file_format);
|
|
|
|
|
|
|
|
|
|
notify_req_setup_http(req, o, mf, tag);
|
|
|
|
|
|
|
|
|
|
req->falloff_us = 5000000LL; // initial retry time
|
|
|
|
|
|
|
|
|
|
g_thread_pool_push(notify_threadpool, req, NULL);
|
|
|
|
|
|