void * malloc (size_t n) { void *res; switch (wrapper_state) { case WRAPPER_UNINITIALIZED: wrapper_state = WRAPPER_INITIALIZING; wrapper_state = WRAPPER_INITIALIZED; /* !!!!!!! fall through !!!!!!! */ case WRAPPER_INITIALIZED: if (semaphore) { wrapper_num_allocated++; wrapper_bytes_allocated += n; res = MY_malloc(n); } else { semaphore++; res = ccmalloc_malloc (n); semaphore--; } break; default: case WRAPPER_INITIALIZING: res = static_malloc (n); break; } # ifdef LOG_EXTERNAL_MALLOC { print ("::: 0x"); print_hex ((unsigned) res); if (wrapper_state == WRAPPER_INITIALIZING) print (" static "); else if (semaphore) print (" internal"); else print (" external"); print (" malloc("); print_dec (n); print (")\n"); } # endif /* Initialize with something weird */ memset (res, 0x42, n); return res; }
t_dipelta_instance *ka_dipelta_instance_init(const t_conn_addr *local_addr, const t_conn_addr *remote_addr) { t_dipelta_instance *rt = 0; rt = MY_malloc(sizeof(*rt)); rt->current_net = ka_dipelta_network_init(); rt->server = ka_dipelta_server_init(rt->current_net, local_addr); rt->client = ka_dipelta_client_init(rt->current_net, remote_addr); return rt; }
t_dipelta_server *ka_dipelta_server_init(t_dipelta_network *n, const t_conn_addr *a) { t_dipelta_server *rt = 0; assert(n != 0); assert(a != 0); rt = MY_malloc(sizeof(*rt)); rt->current_net = n; rt->packet_boxes = ds_bst_create(ka_id_compare); rt->local_addr = a; return rt; }
t_dipelta_client *ka_dipelta_client_init(t_dipelta_network *n, const t_conn_addr *a) { t_dipelta_client *rt = 0; size_t i = 0; assert(n != 0); assert(a != 0); rt = MY_malloc(sizeof(*rt)); rt->current_net = n; rt->remote_addr = a; rt->n_conns = 0; for (i = 0; i < MAX_CLIENT_CONNECTIONS; ++i) { rt->current_cns[i] = 0; } rt->contact_tbl = ds_hashtable_init(256); rt->contact_tbl->node_data_destroy_fn = ka_destroy_contact_table_row; /* maybe MAX_CLIENT_CONNECTIONS? */ return rt; }
int main(void) { t_contact_table *c_tbl = 0, *m_tbl = 0; t_id *f_id = 0; size_t sz = 0, i = 0, n_data_sz = 0; t_byte *data = 0, *n_data = 0; t_pkt_box *rbox = 0; f_id = ka_t_id_init(); c_tbl = ka_find_node(f_id); sz = ka_contact_table_buffer_size(c_tbl); printf("Allocating: %d\n", sz); data = MY_malloc(sz); ka_pack_contact_table(c_tbl, data); for (i = 0; i < sz; ++i) { printf("(%d, 0x%x)\n", i, data[i]); if (i %12 == 0) { printf("\n"); } } printf("\n"); rbox = ka_pkt_box_create_with_data(f_id, KA_CD_OK, data, sz); printf("Created packet box with %d packets\n", rbox->pkt_total); for (i = 0; i < rbox->pkts_recvd_sz; ++i) { ka_print_pkt(&(rbox->pkts_recvd[i])); } n_data = ka_process_pkt_box(rbox, &n_data_sz); m_tbl = ka_unpack_contact_table(n_data); sz = m_tbl->contacts_sz; for (i = 0; i < sz; ++i) { printf("Contact %d of %d\n", i + 1, sz); ka_contact_print(m_tbl->contacts[i]); printf("\n"); } ka_contact_table_destroy(c_tbl); c_tbl = 0; ka_contact_table_destroy(m_tbl); m_tbl = 0; MY_free(data); data = 0; MY_free(f_id); f_id = 0; return 0; }