Beispiel #1
0
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;
}
Beispiel #2
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;
}