static inline int add_diversion_helper(struct sip_msg* msg, str* s) { char *ptr; int is_ref; struct lump* anchor = 0; if (!msg->diversion && parse_headers(msg, HDR_DIVERSION_F, 0) == -1) { LM_ERR("header parsing failed\n"); return -1; } if (msg->diversion) { /* Insert just before the topmost Diversion header */ ptr = msg->diversion->name.s; } else { /* Insert at the end */ ptr = msg->unparsed; } anchor = anchor_lump2(msg, ptr - msg->buf, 0, 0, &is_ref); if (!anchor) { LM_ERR("can't get anchor\n"); return -2; } if (!insert_new_lump_before(anchor, s->s, s->len, 0)) { LM_ERR("can't insert lump\n"); return -3; } return 0; }
int add_body_segment(struct sdp_mangler * mangler, int offset, unsigned char * new_data, int new_len) { struct lump * l; char *s; int exists; l = anchor_lump2(mangler->msg, mangler->body_offset + offset, 0, 0, &exists); if(l == NULL) { return -1; } s = pkg_malloc(new_len); memcpy(s, new_data, new_len); if(insert_new_lump_after(l, s, new_len, 0) == 0) { pkg_free(s); return -2; } return 0; }