/** Implements the close_output function of the plugin API */ int bgpcorsaro_pfxmonitor_close_output(bgpcorsaro_t *bgpcorsaro) { int i; struct bgpcorsaro_pfxmonitor_state_t *state = STATE(bgpcorsaro); khiter_t k; khash_t(peer_asn_map) * v; if (state == NULL) { return 0; } /* close all the outfile pointers */ for (i = 0; i < OUTFILE_POINTERS; i++) { if (state->outfile_p[i] != NULL) { wandio_wdestroy(state->outfile_p[i]); state->outfile_p[i] = NULL; } } state->outfile = NULL; if (state->poi != NULL) { bgpstream_ip_counter_destroy(state->poi); state->poi = NULL; } /* deallocate the dynamic memory in use */ if (state->overlapping_pfx_cache != NULL) { bgpstream_pfx_storage_set_destroy(state->overlapping_pfx_cache); state->overlapping_pfx_cache = NULL; } if (state->non_overlapping_pfx_cache != NULL) { bgpstream_pfx_storage_set_destroy(state->non_overlapping_pfx_cache); state->non_overlapping_pfx_cache = NULL; } if (state->peer_asns != NULL) { bgpstream_id_set_destroy(state->peer_asns); state->peer_asns = NULL; } if (state->pfx_info != NULL) { for (k = kh_begin(state->pfx_info); k != kh_end(state->pfx_info); ++k) { if (kh_exist(state->pfx_info, k)) { v = kh_val(state->pfx_info, k); kh_destroy(peer_asn_map, v); } } kh_destroy(pfx_info_map, state->pfx_info); state->pfx_info = NULL; } if (state->unique_origins != NULL) { bgpstream_id_set_destroy(state->unique_origins); state->unique_origins = NULL; } bgpcorsaro_plugin_free_state(bgpcorsaro->plugin_manager, PLUGIN(bgpcorsaro)); return 0; }
/** Implements the close_output function of the plugin API */ int bgpcorsaro_pacifier_close_output(bgpcorsaro_t *bgpcorsaro) { int i; struct bgpcorsaro_pacifier_state_t *state = STATE(bgpcorsaro); if(state != NULL) { /* close all the outfile pointers */ for(i = 0; i < OUTFILE_POINTERS; i++) { if(state->outfile_p[i] != NULL) { wandio_wdestroy(state->outfile_p[i]); state->outfile_p[i] = NULL; } } state->outfile = NULL; bgpcorsaro_plugin_free_state(bgpcorsaro->plugin_manager, PLUGIN(bgpcorsaro)); } return 0; }