return NULL;
silc_rwlock_alloc(&client_entry->internal.lock);
- silc_atomic_init8(&client_entry->internal.refcnt, 0);
+ silc_atomic_init32(&client_entry->internal.refcnt, 0);
+ silc_atomic_init32(&client_entry->internal.deleted, 1);
client_entry->id = *id;
client_entry->mode = mode;
client_entry->realname = userinfo ? strdup(userinfo) : NULL;
silc_client_ftp_session_free_client(client, client_entry);
if (client_entry->internal.ke)
silc_client_abort_key_agreement(client, conn, client_entry);
- silc_atomic_uninit8(&client_entry->internal.refcnt);
+ silc_atomic_uninit32(&client_entry->internal.deleted);
+ silc_atomic_uninit32(&client_entry->internal.refcnt);
silc_rwlock_free(client_entry->internal.lock);
silc_free(client_entry);
}
SilcBool silc_client_del_client(SilcClient client, SilcClientConnection conn,
SilcClientEntry client_entry)
{
- SilcBool ret;
-
if (!client_entry)
return FALSE;
- if (silc_atomic_sub_int8(&client_entry->internal.refcnt, 1) > 0)
- return FALSE;
-
- SILC_LOG_DEBUG(("Deleting client %p", client_entry));
-
- silc_mutex_lock(conn->internal->lock);
- ret = silc_idcache_del_by_context(conn->internal->client_cache,
- client_entry, NULL);
- silc_mutex_unlock(conn->internal->lock);
-
- if (ret) {
- /* Remove from channels */
- silc_client_remove_from_channels(client, conn, client_entry);
- if (silc_atomic_sub_int32(&client_entry->internal.deleted, 1) != 0)
- {
- SILC_LOG_DEBUG(("** WARNING ** Deleting a client twice %p", client_entry));
-// asm("int3");
- return FALSE;
++ SILC_LOG_DEBUG(("Marking client entry %p deleted"));
+
- /* Free the client entry data */
- silc_client_del_client_entry(client, conn, client_entry);
++ if (silc_atomic_sub_int32(&client_entry->internal.deleted, 1) != 0) {
++ SILC_LOG_DEBUG(("Client entry %p already marked deleted"));
++ return FALSE;
}
- return ret;
+ silc_client_unref_client(client, conn, client_entry);
+ return TRUE;
-
}
/* Internal routine used to find client by ID and if not found this creates
SilcClientConnection conn,
SilcClientEntry client_entry)
{
- silc_atomic_add_int8(&client_entry->internal.refcnt, 1);
+ silc_atomic_add_int32(&client_entry->internal.refcnt, 1);
SILC_LOG_DEBUG(("Client %p refcnt %d->%d", client_entry,
- silc_atomic_get_int8(&client_entry->internal.refcnt) - 1,
- silc_atomic_get_int8(&client_entry->internal.refcnt)));
+ silc_atomic_get_int32(&client_entry->internal.refcnt) - 1,
+ silc_atomic_get_int32(&client_entry->internal.refcnt)));
return client_entry;
}
void silc_client_unref_client(SilcClient client, SilcClientConnection conn,
SilcClientEntry client_entry)
{
-- if (client_entry) {
- SILC_LOG_DEBUG(("Client %p refcnt %d->%d", client_entry,
- silc_atomic_get_int8(&client_entry->internal.refcnt),
- silc_atomic_get_int8(&client_entry->internal.refcnt) - 1));
- silc_client_del_client(client, conn, client_entry);
- SilcBool ret;
++ SilcBool ret;
+
- SILC_LOG_DEBUG(("Client %p refcnt %d->%d", client_entry,
- silc_atomic_get_int32(&client_entry->internal.refcnt),
- silc_atomic_get_int32(&client_entry->internal.refcnt) - 1));
++ if (!client_entry)
++ return;
+
- if (silc_atomic_sub_int32(&client_entry->internal.refcnt, 1) > 0)
- return;
-
- SILC_LOG_DEBUG(("Deleting client %p (%d)", client_entry,
- silc_atomic_get_int32(&client_entry->internal.deleted)));
++ SILC_LOG_DEBUG(("Client %p refcnt %d->%d", client_entry,
++ silc_atomic_get_int32(&client_entry->internal.refcnt),
++ silc_atomic_get_int32(&client_entry->internal.refcnt) - 1));
+
- silc_mutex_lock(conn->internal->lock);
- ret = silc_idcache_del_by_context(conn->internal->client_cache,
- client_entry, NULL);
- silc_mutex_unlock(conn->internal->lock);
++ if (silc_atomic_sub_int32(&client_entry->internal.refcnt, 1) > 0)
++ return;
+
- if (ret) {
- /* Remove from channels */
- silc_client_remove_from_channels(client, conn, client_entry);
++ SILC_LOG_DEBUG(("Deleting client %p (%d)", client_entry,
++ silc_atomic_get_int32(&client_entry->internal.deleted)));
+
- /* Free the client entry data */
- silc_client_del_client_entry(client, conn, client_entry);
- }
++ silc_mutex_lock(conn->internal->lock);
++ ret = silc_idcache_del_by_context(conn->internal->client_cache,
++ client_entry, NULL);
++ silc_mutex_unlock(conn->internal->lock);
++
++ if (ret) {
++ /* Remove from channels */
++ silc_client_remove_from_channels(client, conn, client_entry);
++
++ /* Free the client entry data */
++ silc_client_del_client_entry(client, conn, client_entry);
}
}
return NULL;
silc_rwlock_alloc(&channel->internal.lock);
- silc_atomic_init16(&channel->internal.refcnt, 0);
+ silc_atomic_init32(&channel->internal.refcnt, 0);
+ silc_atomic_init32(&channel->internal.deleted, 1);
channel->id = *channel_id;
channel->mode = mode;
if (!channel->channel_name) {
silc_rwlock_free(channel->internal.lock);
- silc_atomic_uninit16(&channel->internal.refcnt);
+ silc_atomic_uninit32(&channel->internal.refcnt);
silc_free(channel);
return NULL;
}
NULL, NULL, NULL, TRUE);
if (!channel->user_list) {
silc_rwlock_free(channel->internal.lock);
- silc_atomic_uninit16(&channel->internal.refcnt);
+ silc_atomic_uninit32(&channel->internal.refcnt);
silc_free(channel->channel_name);
silc_free(channel);
return NULL;
SILC_STRING_UTF8, 256, NULL);
if (!channel_namec) {
silc_rwlock_free(channel->internal.lock);
- silc_atomic_uninit16(&channel->internal.refcnt);
+ silc_atomic_uninit32(&channel->internal.refcnt);
silc_free(channel->channel_name);
silc_hash_table_free(channel->user_list);
silc_free(channel);
if (!silc_idcache_add(conn->internal->channel_cache, channel_namec,
&channel->id, channel)) {
silc_rwlock_free(channel->internal.lock);
- silc_atomic_uninit16(&channel->internal.refcnt);
+ silc_atomic_uninit32(&channel->internal.refcnt);
silc_free(channel_namec);
silc_free(channel->channel_name);
silc_hash_table_free(channel->user_list);
SilcBool silc_client_del_channel(SilcClient client, SilcClientConnection conn,
SilcChannelEntry channel)
{
- SilcIDCacheEntry id_cache;
- SilcBool ret = TRUE;
- SilcCipher key;
- SilcHmac hmac;
- char *namec;
-
if (!channel)
return FALSE;
- if (silc_atomic_sub_int16(&channel->internal.refcnt, 1) > 0)
- return FALSE;
-
- SILC_LOG_DEBUG(("Deleting channel %p", channel));
- if (silc_atomic_sub_int32(&channel->internal.deleted, 1) > 0)
- {
- SILC_LOG_DEBUG(("** WARNING ** Deleting a channel twice %p", channel));
-// asm("int3");
++ SILC_LOG_DEBUG(("Marking channel entry %p deleted"));
+
- silc_mutex_lock(conn->internal->lock);
- if (silc_idcache_find_by_context(conn->internal->channel_cache, channel,
- &id_cache)) {
- namec = id_cache->name;
- ret = silc_idcache_del_by_context(conn->internal->channel_cache,
- channel, NULL);
- silc_free(namec);
- }
- silc_mutex_unlock(conn->internal->lock);
-
- if (!ret)
++ if (silc_atomic_sub_int32(&channel->internal.deleted, 1) != 0) {
++ SILC_LOG_DEBUG(("Channel entry %p already marked deleted"));
return FALSE;
-
- silc_client_empty_channel(client, conn, channel);
- silc_client_del_channel_private_keys(client, conn, channel);
- silc_hash_table_free(channel->user_list);
- silc_free(channel->channel_name);
- silc_free(channel->topic);
- if (channel->founder_key)
- silc_pkcs_public_key_free(channel->founder_key);
- if (channel->internal.send_key)
- silc_cipher_free(channel->internal.send_key);
- if (channel->internal.receive_key)
- silc_cipher_free(channel->internal.receive_key);
- if (channel->internal.hmac)
- silc_hmac_free(channel->internal.hmac);
- if (channel->internal.old_channel_keys) {
- silc_dlist_start(channel->internal.old_channel_keys);
- while ((key = silc_dlist_get(channel->internal.old_channel_keys)))
- silc_cipher_free(key);
- silc_dlist_uninit(channel->internal.old_channel_keys);
}
- if (channel->internal.old_hmacs) {
- silc_dlist_start(channel->internal.old_hmacs);
- while ((hmac = silc_dlist_get(channel->internal.old_hmacs)))
- silc_hmac_free(hmac);
- silc_dlist_uninit(channel->internal.old_hmacs);
- }
- if (channel->channel_pubkeys)
- silc_argument_list_free(channel->channel_pubkeys,
- SILC_ARGUMENT_PUBLIC_KEY);
- silc_atomic_uninit16(&channel->internal.refcnt);
- silc_rwlock_free(channel->internal.lock);
- silc_schedule_task_del_by_context(conn->client->schedule, channel);
- silc_free(channel);
- return ret;
+ silc_client_unref_channel(client, conn, channel);
+ return TRUE;
}
/* Replaces the channel ID of the `channel' to `new_id'. Returns FALSE
SilcClientConnection conn,
SilcChannelEntry channel_entry)
{
- silc_atomic_add_int16(&channel_entry->internal.refcnt, 1);
+ silc_atomic_add_int32(&channel_entry->internal.refcnt, 1);
SILC_LOG_DEBUG(("Channel %p refcnt %d->%d", channel_entry,
- silc_atomic_get_int16(&channel_entry->internal.refcnt) - 1,
- silc_atomic_get_int16(&channel_entry->internal.refcnt)));
+ silc_atomic_get_int32(&channel_entry->internal.refcnt) - 1,
+ silc_atomic_get_int32(&channel_entry->internal.refcnt)));
return channel_entry;
}
void silc_client_unref_channel(SilcClient client, SilcClientConnection conn,
SilcChannelEntry channel_entry)
{
-- if (channel_entry) {
- SILC_LOG_DEBUG(("Channel %p refcnt %d->%d", channel_entry,
- silc_atomic_get_int16(&channel_entry->internal.refcnt),
- silc_atomic_get_int16(&channel_entry->internal.refcnt)
- - 1));
- silc_client_del_channel(client, conn, channel_entry);
- SilcIDCacheEntry id_cache;
- SilcBool ret = TRUE;
- SilcCipher key;
- SilcHmac hmac;
- char *namec;
++ SilcIDCacheEntry id_cache;
++ SilcBool ret = TRUE;
++ SilcCipher key;
++ SilcHmac hmac;
++ char *namec;
+
- SILC_LOG_DEBUG(("Channel %p refcnt %d->%d", channel_entry,
- silc_atomic_get_int32(&channel_entry->internal.refcnt),
- silc_atomic_get_int32(&channel_entry->internal.refcnt)
- - 1));
++ if (!channel_entry)
++ return;
+
- if (silc_atomic_sub_int32(&channel_entry->internal.refcnt, 1) > 0)
- return;
++ SILC_LOG_DEBUG(("Channel %p refcnt %d->%d", channel_entry,
++ silc_atomic_get_int32(&channel_entry->internal.refcnt),
++ silc_atomic_get_int32(&channel_entry->internal.refcnt)
++ - 1));
+
- SILC_LOG_DEBUG(("Deleting channel %p", channel_entry));
++ if (silc_atomic_sub_int32(&channel_entry->internal.refcnt, 1) > 0)
++ return;
+
- silc_mutex_lock(conn->internal->lock);
- if (silc_idcache_find_by_context(conn->internal->channel_cache, channel_entry,
++ SILC_LOG_DEBUG(("Deleting channel %p", channel_entry));
++
++ silc_mutex_lock(conn->internal->lock);
++ if (silc_idcache_find_by_context(conn->internal->channel_cache, channel_entry,
+ &id_cache)) {
- namec = id_cache->name;
- ret = silc_idcache_del_by_context(conn->internal->channel_cache,
++ namec = id_cache->name;
++ ret = silc_idcache_del_by_context(conn->internal->channel_cache,
+ channel_entry, NULL);
- silc_free(namec);
- }
- silc_mutex_unlock(conn->internal->lock);
++ silc_free(namec);
+ }
++ silc_mutex_unlock(conn->internal->lock);
+
- if (!ret)
- return;
++ if (!ret)
++ return;
+
- silc_client_empty_channel(client, conn, channel_entry);
- silc_client_del_channel_private_keys(client, conn, channel_entry);
- silc_hash_table_free(channel_entry->user_list);
- silc_free(channel_entry->channel_name);
- silc_free(channel_entry->topic);
- if (channel_entry->founder_key)
- silc_pkcs_public_key_free(channel_entry->founder_key);
- if (channel_entry->internal.send_key)
- silc_cipher_free(channel_entry->internal.send_key);
- if (channel_entry->internal.receive_key)
- silc_cipher_free(channel_entry->internal.receive_key);
- if (channel_entry->internal.hmac)
- silc_hmac_free(channel_entry->internal.hmac);
- if (channel_entry->internal.old_channel_keys) {
- silc_dlist_start(channel_entry->internal.old_channel_keys);
- while ((key = silc_dlist_get(channel_entry->internal.old_channel_keys)))
- silc_cipher_free(key);
- silc_dlist_uninit(channel_entry->internal.old_channel_keys);
- }
- if (channel_entry->internal.old_hmacs) {
- silc_dlist_start(channel_entry->internal.old_hmacs);
- while ((hmac = silc_dlist_get(channel_entry->internal.old_hmacs)))
- silc_hmac_free(hmac);
- silc_dlist_uninit(channel_entry->internal.old_hmacs);
- }
- if (channel_entry->channel_pubkeys)
- silc_argument_list_free(channel_entry->channel_pubkeys,
++ silc_client_empty_channel(client, conn, channel_entry);
++ silc_client_del_channel_private_keys(client, conn, channel_entry);
++ silc_hash_table_free(channel_entry->user_list);
++ silc_free(channel_entry->channel_name);
++ silc_free(channel_entry->topic);
++ if (channel_entry->founder_key)
++ silc_pkcs_public_key_free(channel_entry->founder_key);
++ if (channel_entry->internal.send_key)
++ silc_cipher_free(channel_entry->internal.send_key);
++ if (channel_entry->internal.receive_key)
++ silc_cipher_free(channel_entry->internal.receive_key);
++ if (channel_entry->internal.hmac)
++ silc_hmac_free(channel_entry->internal.hmac);
++ if (channel_entry->internal.old_channel_keys) {
++ silc_dlist_start(channel_entry->internal.old_channel_keys);
++ while ((key = silc_dlist_get(channel_entry->internal.old_channel_keys)))
++ silc_cipher_free(key);
++ silc_dlist_uninit(channel_entry->internal.old_channel_keys);
++ }
++ if (channel_entry->internal.old_hmacs) {
++ silc_dlist_start(channel_entry->internal.old_hmacs);
++ while ((hmac = silc_dlist_get(channel_entry->internal.old_hmacs)))
++ silc_hmac_free(hmac);
++ silc_dlist_uninit(channel_entry->internal.old_hmacs);
++ }
++ if (channel_entry->channel_pubkeys)
++ silc_argument_list_free(channel_entry->channel_pubkeys,
+ SILC_ARGUMENT_PUBLIC_KEY);
- silc_atomic_uninit32(&channel_entry->internal.deleted);
- silc_atomic_uninit32(&channel_entry->internal.refcnt);
- silc_rwlock_free(channel_entry->internal.lock);
- silc_schedule_task_del_by_context(conn->client->schedule, channel_entry);
- silc_free(channel_entry);
- }
++ silc_atomic_uninit32(&channel_entry->internal.deleted);
++ silc_atomic_uninit32(&channel_entry->internal.refcnt);
++ silc_rwlock_free(channel_entry->internal.lock);
++ silc_schedule_task_del_by_context(conn->client->schedule, channel_entry);
++ silc_free(channel_entry);
}
/* Free channel entry list */
return NULL;
silc_rwlock_alloc(&server_entry->internal.lock);
- silc_atomic_init8(&server_entry->internal.refcnt, 0);
+ silc_atomic_init32(&server_entry->internal.refcnt, 0);
server_entry->id = *server_id;
if (server_name)
server_entry->server_name = strdup(server_name);
if (!server)
return FALSE;
- if (silc_atomic_sub_int8(&server->internal.refcnt, 1) > 0)
+ if (silc_atomic_sub_int32(&server->internal.refcnt, 1) > 0)
return FALSE;
SILC_LOG_DEBUG(("Deleting server %p", server));
silc_free(server->server_info);
if (server->public_key)
silc_pkcs_public_key_free(server->public_key);
- silc_atomic_uninit8(&server->internal.refcnt);
+ silc_atomic_uninit32(&server->internal.refcnt);
silc_rwlock_free(server->internal.lock);
silc_free(server);
SilcClientConnection conn,
SilcServerEntry server_entry)
{
- silc_atomic_add_int8(&server_entry->internal.refcnt, 1);
+ silc_atomic_add_int32(&server_entry->internal.refcnt, 1);
SILC_LOG_DEBUG(("Server %p refcnt %d->%d", server_entry,
- silc_atomic_get_int8(&server_entry->internal.refcnt) - 1,
- silc_atomic_get_int8(&server_entry->internal.refcnt)));
+ silc_atomic_get_int32(&server_entry->internal.refcnt) - 1,
+ silc_atomic_get_int32(&server_entry->internal.refcnt)));
return server_entry;
}
{
if (server_entry) {
SILC_LOG_DEBUG(("Server %p refcnt %d->%d", server_entry,
- silc_atomic_get_int8(&server_entry->internal.refcnt),
- silc_atomic_get_int8(&server_entry->internal.refcnt)
+ silc_atomic_get_int32(&server_entry->internal.refcnt),
+ silc_atomic_get_int32(&server_entry->internal.refcnt)
- 1));
silc_client_del_server(client, conn, server_entry);
}
SilcMutex lock; /* Engine lock */
SilcRng rng; /* RNG for engine */
SilcHashTable contexts; /* Per scheduler contexts */
- SilcPacketCallbacks *callbacks; /* Packet callbacks */
+ const SilcPacketCallbacks *callbacks; /* Packet callbacks */
void *callback_context; /* Context for callbacks */
SilcList streams; /* All streams in engine */
SilcList packet_pool; /* Free list for received packets */
/* Packet processor context */
typedef struct SilcPacketProcessStruct {
SilcPacketType *types; /* Packets to process */
- SilcPacketCallbacks *callbacks; /* Callbacks or NULL */
+ const SilcPacketCallbacks *callbacks; /* Callbacks or NULL */
void *callback_context;
SilcInt32 priority; /* Priority */
} *SilcPacketProcess;
unsigned char *dst_id; /* Destination ID */
SilcUInt32 send_psn; /* Sending sequence */
SilcUInt32 receive_psn; /* Receiving sequence */
- SilcAtomic8 refcnt; /* Reference counter */
+ SilcAtomic32 refcnt; /* Reference counter */
SilcUInt8 sid; /* Security ID, set if IV included */
unsigned int src_id_len : 6;
unsigned int src_id_type : 2;
SilcPacketEngine
silc_packet_engine_start(SilcRng rng, SilcBool router,
- SilcPacketCallbacks *callbacks,
+ const SilcPacketCallbacks *callbacks,
void *callback_context)
{
SilcPacketEngine engine;
return NULL;
ps->stream = stream;
- silc_atomic_init8(&ps->refcnt, 1);
+ silc_atomic_init32(&ps->refcnt, 1);
silc_mutex_alloc(&ps->lock);
/* Allocate out buffer */
return NULL;
ps->sc = stream->sc;
- silc_atomic_init8(&ps->refcnt, 1);
+ silc_atomic_init32(&ps->refcnt, 1);
silc_mutex_alloc(&ps->lock);
/* Set the UDP packet stream as underlaying stream */
if (!stream)
return;
- if (silc_atomic_sub_int8(&stream->refcnt, 1) > 0) {
+ if (silc_atomic_sub_int32(&stream->refcnt, 1) > 0) {
if (stream->destroyed)
return;
stream->destroyed = TRUE;
silc_free(stream->src_id);
silc_free(stream->dst_id);
- silc_atomic_uninit8(&stream->refcnt);
+ silc_atomic_uninit32(&stream->refcnt);
silc_mutex_free(stream->lock);
silc_free(stream);
}
/* Links `callbacks' to `stream' for specified packet types */
static SilcBool silc_packet_stream_link_va(SilcPacketStream stream,
- SilcPacketCallbacks *callbacks,
+ const SilcPacketCallbacks *callbacks,
void *callback_context,
int priority, va_list ap)
{
stream->process = silc_dlist_init();
if (!stream->process) {
silc_mutex_unlock(stream->lock);
+ silc_free(p);
return FALSE;
}
}
/* Links `callbacks' to `stream' for specified packet types */
SilcBool silc_packet_stream_link(SilcPacketStream stream,
- SilcPacketCallbacks *callbacks,
+ const SilcPacketCallbacks *callbacks,
void *callback_context,
int priority, ...)
{
/* Unlinks `callbacks' from `stream'. */
void silc_packet_stream_unlink(SilcPacketStream stream,
- SilcPacketCallbacks *callbacks,
+ const SilcPacketCallbacks *callbacks,
void *callback_context)
{
SilcPacketProcess p;
void silc_packet_stream_ref(SilcPacketStream stream)
{
- silc_atomic_add_int8(&stream->refcnt, 1);
+ silc_atomic_add_int32(&stream->refcnt, 1);
SILC_LOG_DEBUG(("Stream %p, refcnt %d->%d", stream,
- silc_atomic_get_int8(&stream->refcnt) - 1,
- silc_atomic_get_int8(&stream->refcnt)));
+ silc_atomic_get_int32(&stream->refcnt) - 1,
+ silc_atomic_get_int32(&stream->refcnt)));
}
/* Unreference packet stream */
void silc_packet_stream_unref(SilcPacketStream stream)
{
SILC_LOG_DEBUG(("Stream %p, refcnt %d->%d", stream,
- silc_atomic_get_int8(&stream->refcnt),
- silc_atomic_get_int8(&stream->refcnt) - 1));
- if (silc_atomic_sub_int8(&stream->refcnt, 1) > 0)
+ silc_atomic_get_int32(&stream->refcnt),
+ silc_atomic_get_int32(&stream->refcnt) - 1));
+ if (silc_atomic_sub_int32(&stream->refcnt, 1) > 0)
return;
- silc_atomic_add_int8(&stream->refcnt, 1);
+ silc_atomic_add_int32(&stream->refcnt, 1);
silc_packet_stream_destroy(stream);
}
{
SilcUInt32 len;
unsigned char tmp[32];
++ void *tmp_id;
if (!src_id && !dst_id)
return FALSE;
if (src_id) {
SILC_LOG_DEBUG(("Setting source ID to packet stream %p", stream));
-- silc_free(stream->src_id);
- stream->src_id = NULL;
if (!silc_id_id2str(src_id, src_id_type, tmp, sizeof(tmp), &len)) {
silc_mutex_unlock(stream->lock);
return FALSE;
}
-- stream->src_id = silc_memdup(tmp, len);
-- if (!stream->src_id) {
++ tmp_id = silc_memdup(tmp, len);
++ if (!tmp_id) {
silc_mutex_unlock(stream->lock);
return FALSE;
}
++ silc_free(stream->src_id);
++ stream->src_id = tmp_id;
stream->src_id_type = src_id_type;
stream->src_id_len = len;
}
if (dst_id) {
SILC_LOG_DEBUG(("Setting destination ID to packet stream %p", stream));
-- silc_free(stream->dst_id);
- stream->dst_id = NULL;
if (!silc_id_id2str(dst_id, dst_id_type, tmp, sizeof(tmp), &len)) {
silc_mutex_unlock(stream->lock);
return FALSE;
}
-- stream->dst_id = silc_memdup(tmp, len);
-- if (!stream->dst_id) {
++ tmp_id = silc_memdup(tmp, len);
++ if (!tmp_id) {
silc_mutex_unlock(stream->lock);
return FALSE;
}
++ silc_free(stream->dst_id);
++ stream->dst_id = tmp_id;
stream->dst_id_type = dst_id_type;
stream->dst_id_len = len;
}
void *stream_context);
/* Packet waiting callbacks */
-static SilcPacketCallbacks silc_packet_wait_cbs =
+static const SilcPacketCallbacks silc_packet_wait_cbs =
{
silc_packet_wait_packet_receive, NULL, NULL
};
} *SilcPacketWrapperStream;
/* Packet wrapper callbacks */
-static SilcPacketCallbacks silc_packet_wrap_cbs =
+static const SilcPacketCallbacks silc_packet_wrap_cbs =
{
silc_packet_wrap_packet_receive, NULL, NULL
};