static inline int create_headers(struct watcher* _w, str *dst, str *content_type) { dstring_t buf; time_t t; int err = 0; dstr_init(&buf, 256); str_clear(dst); /* required by RFC 3261 */ dstr_append_zt(&buf, "Max-Forwards: 70\r\n"); /* Event header */ dstr_append_zt(&buf, "Event: "); dstr_append_zt(&buf, event_package2str(_w->event_package)); dstr_append_zt(&buf, "\r\n"); /* Content-Type header */ /* content types can have dynamical parameters (multipart/related) * => don't generate them "staticaly"; use values created in the * time of document creation */ if (!is_str_empty(content_type)) { /* documents without body doesn't need it */ dstr_append_zt(&buf, "Content-Type: "); dstr_append_str(&buf, content_type); dstr_append_zt(&buf, "\r\n"); } /* Contact header */ if (is_str_empty(&_w->server_contact)) { LOG(L_WARN, "add_contact_hf(): Can't add empty contact to NOTIFY.\n"); } else { dstr_append_zt(&buf, "Contact: "); dstr_append_str(&buf, &_w->server_contact); dstr_append_zt(&buf, "\r\n"); } /* Subscription-State header */ if (_w->expires) t = _w->expires - time(0); else t = 0; if (add_subs_state_hf(&buf, _w->status, t) < 0) { LOG(L_ERR, "create_headers(): Error while adding Subscription-State\n"); dstr_destroy(&buf); return -3; } err = dstr_get_str(&buf, dst); dstr_destroy(&buf); return err; }
static inline int create_headers(struct watcher* _w) { time_t t; subs_state_t s; headers.len = 0; if (add_event_hf(&headers, BUF_LEN, _w->preferred_mimetype) < 0) { LOG(L_ERR, "create_headers(): Error while adding Event header field\n"); return -1; } if (add_cont_type_hf(&headers, BUF_LEN - headers.len, _w->preferred_mimetype) < 0) { LOG(L_ERR, "create_headers(): Error while adding Content-Type header field\n"); return -2; } if (add_contact_hf(&headers, BUF_LEN - headers.len, &_w->uri) < 0) { LOG(L_ERR, "create_headers(): Error while adding Contact header field\n"); return -3; } if (_w && _w->expires) t = _w->expires - time(0); else t = 0; if (t == 0) { s = SS_TERMINATED; } else { s = SS_ACTIVE; } if (add_subs_state_hf(&headers, BUF_LEN - headers.len, s, SR_TIMEOUT, t) < 0) { LOG(L_ERR, "create_headers(): Error while adding Subscription-State\n"); return -3; } return 0; }