- if (channel->old_channel_key)
- silc_cipher_free(channel->old_channel_key);
- if (channel->old_hmac)
- silc_hmac_free(channel->old_hmac);
- if (channel->rekey_task)
- silc_schedule_task_del(client->schedule, channel->rekey_task);
- channel->old_channel_key = channel->channel_key;
- channel->old_hmac = channel->hmac;
- channel->rekey_task =
- silc_schedule_task_add(client->schedule, 0,
- silc_client_save_channel_key_rekey, channel,
- 10, 0, SILC_TASK_TIMEOUT, SILC_TASK_PRI_NORMAL);
+ if (!channel->old_channel_keys)
+ channel->old_channel_keys = silc_dlist_init();
+ if (!channel->old_hmacs)
+ channel->old_hmacs = silc_dlist_init();
+ silc_dlist_add(channel->old_channel_keys, channel->channel_key);
+ silc_dlist_add(channel->old_hmacs, channel->hmac);
+ silc_schedule_task_add(client->schedule, 0,
+ silc_client_save_channel_key_rekey, channel,
+ 10, 0, SILC_TASK_TIMEOUT, SILC_TASK_PRI_NORMAL);