void sal_body_handler_set_size(SalBodyHandler *body_handler, size_t size) { belle_sip_header_content_length_t *content_length = BELLE_SIP_HEADER_CONTENT_LENGTH(sal_body_handler_find_header(body_handler, "Content-Length")); if (content_length == NULL) { content_length = belle_sip_header_content_length_new(); belle_sip_body_handler_add_header(BELLE_SIP_BODY_HANDLER(body_handler), BELLE_SIP_HEADER(content_length)); } belle_sip_header_content_length_set_content_length(content_length, size); belle_sip_body_handler_set_size(BELLE_SIP_BODY_HANDLER(body_handler), size); }
static void check_content_length(belle_sip_message_t *msg, size_t body_len){ belle_sip_header_content_length_t *ctlen=belle_sip_message_get_header_by_type(msg,belle_sip_header_content_length_t); unsigned int value=ctlen ? belle_sip_header_content_length_get_content_length(ctlen) : 0; if (body_len){ if (ctlen==NULL){ belle_sip_message("message [%p] has body of size [%i] but no Content-Length, adding it.",msg,(int)body_len); belle_sip_message_add_header(msg, (belle_sip_header_t*)belle_sip_header_content_length_create((int)body_len) ); }else{ if (value!=(unsigned int)body_len){ belle_sip_warning("message [%p] has Content-Length [%u] and body size [%i] which are inconsistent, fixing it.", msg, value, (int)body_len); belle_sip_header_content_length_set_content_length(ctlen,(int)value); } } }else{ /*no body, or undetermined size body*/ if (ctlen && value!=0){ belle_sip_error("message [%p] has Content-Length [%u], but without body or body with undetermined size. Fix your app.", msg,value); } } }