/*only the content*/ void free_sip_msg(struct sip_msg* msg) { if (msg->msg_cb) { msg_callback_process(msg, MSG_DESTROY, NULL); } if (msg->new_uri.s) { pkg_free(msg->new_uri.s); msg->new_uri.len=0; } if (msg->set_global_address.s) { pkg_free(msg->set_global_address.s); msg->set_global_address.s = NULL; } if (msg->set_global_port.s) { pkg_free(msg->set_global_port.s); msg->set_global_port.s = NULL; } if (msg->dst_uri.s) { pkg_free(msg->dst_uri.s); msg->dst_uri.len=0; } if (msg->path_vec.s) { pkg_free(msg->path_vec.s); msg->path_vec.len=0; } if (msg->headers) free_hdr_field_lst(msg->headers); if (msg->sdp) free_sdp(&(msg->sdp)); if (msg->add_rm) free_lump_list(msg->add_rm); if (msg->body_lumps) free_lump_list(msg->body_lumps); if (msg->reply_lump) free_reply_lump(msg->reply_lump); if (msg->multi ) { free_multi_body(msg->multi);msg->multi = 0;} /* don't free anymore -- now a pointer to a static buffer */ # ifdef DYN_BUF pkg_free(msg->buf); # endif }
/*only the content*/ void free_sip_msg(struct sip_msg* msg) { if (msg->new_uri.s) { pkg_free(msg->new_uri.s); msg->new_uri.len=0; } if (msg->dst_uri.s) { pkg_free(msg->dst_uri.s); msg->dst_uri.len=0; } if (msg->headers) free_hdr_field_lst(msg->headers); if (msg->add_rm) free_lump_list(msg->add_rm); if (msg->body_lumps) free_lump_list(msg->body_lumps); if (msg->reply_lump) free_reply_lump(msg->reply_lump); /* don't free anymore -- now a pointer to a static buffer */ # ifdef DYN_BUF pkg_free(msg->buf); # endif }
static inline void free_sip_msg_lite(struct sip_msg *my_msg) { if(my_msg){ /**should do the same as in free_sip_msg() but w/o freeing my_msg->buf*/ if (my_msg->new_uri.s) { pkg_free(my_msg->new_uri.s); my_msg->new_uri.len=0; } if (my_msg->dst_uri.s) { pkg_free(my_msg->dst_uri.s); my_msg->dst_uri.len=0; } if (my_msg->path_vec.s) { pkg_free(my_msg->path_vec.s);my_msg->path_vec.len=0; } if (my_msg->headers) free_hdr_field_lst(my_msg->headers); if (my_msg->add_rm) free_lump_list(my_msg->add_rm); if (my_msg->body_lumps) free_lump_list(my_msg->body_lumps); /* this is not in lump_struct.h, and anyhow it's not supposed to be any lumps * in our messages... or is it? if (my_msg->reply_lump) free_reply_lump(my_msg->reply_lump); */ } }
/*only the content*/ void free_sip_msg(struct sip_msg* const msg) { reset_new_uri(msg); reset_dst_uri(msg); reset_path_vector(msg); reset_instance(msg); reset_ruid(msg); reset_ua(msg); if (msg->headers) free_hdr_field_lst(msg->headers); if (msg->body && msg->body->free) msg->body->free(&msg->body); if (msg->add_rm) free_lump_list(msg->add_rm); if (msg->body_lumps) free_lump_list(msg->body_lumps); if (msg->reply_lump) free_reply_lump(msg->reply_lump); msg_ldata_reset(msg); /* don't free anymore -- now a pointer to a static buffer */ # ifdef DYN_BUF pkg_free(msg->buf); # endif }
void del_nonshm_lump( struct lump** lump_list ) { struct lump *r, *foo, *crt, **prev, *prev_r; prev = lump_list; crt = *lump_list; while (crt) { if (crt->flags!=LUMPFLAG_SHMEM) { /* unlink it */ foo = crt; crt = crt->next; foo->next = 0; /* update the 'next' link of the previous lump */ *prev = crt; /* entire before/after list must be removed */ free_lump_list( foo ); } else { /* check on before and prev list for non-shmem lumps */ r = crt->after; prev_r = crt; while(r){ foo=r; r=r->after; if (foo->flags!=LUMPFLAG_SHMEM) { prev_r->after = r; free_lump(foo); pkg_free(foo); } else { prev_r = foo; } } /* before */ r = crt->before; prev_r = crt; while(r){ foo=r; r=r->before; if (foo->flags!=LUMPFLAG_SHMEM) { prev_r->before = r; free_lump(foo); pkg_free(foo); } else { prev_r = foo; } } /* go to next lump */ prev = &(crt->next); crt = crt->next; } } }