void nghttp2_outbound_item_free(nghttp2_outbound_item *item) { if(item == NULL) { return; } if(item->frame_cat == NGHTTP2_CAT_CTRL) { nghttp2_frame *frame; frame = nghttp2_outbound_item_get_ctrl_frame(item); switch(frame->hd.type) { case NGHTTP2_HEADERS: nghttp2_frame_headers_free(&frame->headers); if(item->aux_data) { free(((nghttp2_headers_aux_data*)item->aux_data)->data_prd); } break; case NGHTTP2_PRIORITY: nghttp2_frame_priority_free(&frame->priority); break; case NGHTTP2_RST_STREAM: nghttp2_frame_rst_stream_free(&frame->rst_stream); break; case NGHTTP2_SETTINGS: nghttp2_frame_settings_free(&frame->settings); break; case NGHTTP2_PUSH_PROMISE: nghttp2_frame_push_promise_free(&frame->push_promise); break; case NGHTTP2_PING: nghttp2_frame_ping_free(&frame->ping); break; case NGHTTP2_GOAWAY: nghttp2_frame_goaway_free(&frame->goaway); break; case NGHTTP2_WINDOW_UPDATE: nghttp2_frame_window_update_free(&frame->window_update); break; case NGHTTP2_EXT_ALTSVC: nghttp2_frame_altsvc_free(&frame->ext); free(frame->ext.payload); break; } } else if(item->frame_cat == NGHTTP2_CAT_DATA) { nghttp2_private_data *data_frame; data_frame = nghttp2_outbound_item_get_data_frame(item); nghttp2_frame_private_data_free(data_frame); } else { /* Unreachable */ assert(0); } free(item->frame); free(item->aux_data); }
void test_nghttp2_frame_pack_window_update(void) { nghttp2_window_update frame, oframe; nghttp2_bufs bufs; int rv; frame_pack_bufs_init(&bufs); nghttp2_frame_window_update_init(&frame, NGHTTP2_FLAG_NONE, 1000000007, 4096); rv = nghttp2_frame_pack_window_update(&bufs, &frame); CU_ASSERT(0 == rv); CU_ASSERT(NGHTTP2_FRAME_HDLEN + 4 == nghttp2_bufs_len(&bufs)); CU_ASSERT(0 == unpack_framebuf((nghttp2_frame*)&oframe, &bufs)); check_frame_header(4, NGHTTP2_WINDOW_UPDATE, NGHTTP2_FLAG_NONE, 1000000007, &oframe.hd); CU_ASSERT(4096 == oframe.window_size_increment); nghttp2_bufs_free(&bufs); nghttp2_frame_window_update_free(&oframe); nghttp2_frame_window_update_free(&frame); }