X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilccore%2Fsilcpacket.c;h=94fcffc71146e16bdbd73dfedde4d51186920f9f;hb=c1c904ec2af21f1c2b272d790b38d93824af5352;hp=071652bcf28fc99eed81b5c36ad64f51ce6fd657;hpb=db5f308b9a3897c74514ad5b366fb43dfec52a7c;p=silc.git diff --git a/lib/silccore/silcpacket.c b/lib/silccore/silcpacket.c index 071652bc..94fcffc7 100644 --- a/lib/silccore/silcpacket.c +++ b/lib/silccore/silcpacket.c @@ -604,14 +604,22 @@ silc_packet_engine_start(SilcRng rng, SilcBool router, void silc_packet_engine_stop(SilcPacketEngine engine) { + SilcPacket packet; SILC_LOG_DEBUG(("Stopping packet engine")); if (!engine) return; - /* XXX */ + /* Free packet free list */ + silc_list_start(engine->packet_pool); + while ((packet = silc_list_get(engine->packet_pool))) { + silc_buffer_purge(&packet->buffer); + silc_free(packet); + } + silc_hash_table_free(engine->contexts); + silc_mutex_free(engine->lock); silc_free(engine); } @@ -879,7 +887,27 @@ void silc_packet_stream_destroy(SilcPacketStream stream) silc_dlist_uninit(stream->process); } - /* XXX */ + /* Destroy ciphers and HMACs */ + if (stream->send_key[0]) + silc_cipher_free(stream->send_key[0]); + if (stream->receive_key[0]) + silc_cipher_free(stream->receive_key[0]); + if (stream->send_hmac[0]) + silc_hmac_free(stream->send_hmac[0]); + if (stream->receive_hmac[0]) + silc_hmac_free(stream->receive_hmac[0]); + if (stream->send_key[1]) + silc_cipher_free(stream->send_key[1]); + if (stream->receive_key[1]) + silc_cipher_free(stream->receive_key[1]); + if (stream->send_hmac[1]) + silc_hmac_free(stream->send_hmac[1]); + if (stream->receive_hmac[1]) + silc_hmac_free(stream->receive_hmac[1]); + + /* Free IDs */ + silc_free(stream->src_id); + silc_free(stream->dst_id); silc_atomic_uninit8(&stream->refcnt); silc_mutex_free(stream->lock); @@ -1167,7 +1195,7 @@ SilcBool silc_packet_set_keys(SilcPacketStream stream, SilcCipher send_key, } else { if (stream->send_key[0] && send_key) silc_cipher_free(stream->send_key[0]); - if (stream->send_key[1] && receive_key) + if (stream->receive_key[0] && receive_key) silc_cipher_free(stream->receive_key[0]); if (stream->send_hmac[0] && send_hmac) silc_hmac_free(stream->send_hmac[0]); @@ -2447,7 +2475,7 @@ int silc_packet_wrap_read(SilcStream stream, unsigned char *buf, if (read_more && !pws->blocking) { /* More data will be available (in blocking mode not supported). */ silc_buffer_pull(&packet->buffer, len); - silc_list_insert(pws->in_queue, NULL, packet); + silc_list_insert(pws->in_queue, NULL, packet); silc_schedule_task_add_timeout(pws->stream->sc->schedule, silc_packet_wrap_read_more, pws, 0, 0); pws->read_more = TRUE;