if (server) {
#ifdef SILC_SIM
SilcSim sim;
-#endif
-
- silc_free(server->local_list);
- silc_free(server->global_list);
- if (server->rng)
- silc_rng_free(server->rng);
- if (server->pkcs)
- silc_pkcs_free(server->pkcs);
-
-#ifdef SILC_SIM
while ((sim = silc_dlist_get(server->sim)) != SILC_LIST_END) {
silc_dlist_del(server->sim, sim);
silc_sim_free(sim);
silc_dlist_uninit(server->sim);
#endif
+ if (server->rng)
+ silc_rng_free(server->rng);
+ if (server->pkcs)
+ silc_pkcs_free(server->pkcs);
if (server->pending_commands)
silc_dlist_uninit(server->pending_commands);
+ if (server->id_entry)
+ silc_idlist_del_server(server->local_list, server->id_entry);
+ silc_idcache_free(server->local_list->clients);
+ silc_idcache_free(server->local_list->servers);
+ silc_idcache_free(server->local_list->channels);
+ silc_idcache_free(server->global_list->clients);
+ silc_idcache_free(server->global_list->servers);
+ silc_idcache_free(server->global_list->channels);
+
+ silc_free(server->sockets);
silc_free(server);
}
}
For now, NULL is sent as router. This allocates new entry to
the ID list. */
id_entry =
- silc_idlist_add_server(server->local_list,
- server->config->server_info->server_name,
+ silc_idlist_add_server(server->local_list, strdup(server->server_name),
server->server_type, server->id, NULL, NULL);
if (!id_entry) {
SILC_LOG_ERROR(("Could not add ourselves to cache"));
server->stat.packets_sent++;
- if (sock->outbuf->data - sock->outbuf->head)
- silc_buffer_push(sock->outbuf, sock->outbuf->data - sock->outbuf->head);
-
/* Send the packet */
ret = silc_packet_send(sock, TRUE);
is tried to be sent immediately. */
silc_server_packet_send(server, sock, SILC_PACKET_DISCONNECT, 0,
buf, strlen(buf), TRUE);
+ silc_server_packet_queue_purge(server, sock);
/* Mark the connection to be disconnected */
SILC_SET_DISCONNECTED(sock);
/* Client ID */
SILC_GET16_MSB(idp_len, user_list->data + 2);
idp_len += 4;
- client_id = silc_id_payload_parse_id(user_list->data, idp_len);
+ client_id = silc_id_payload_parse_id(user_list->data, idp_len, NULL);
silc_buffer_pull(user_list, idp_len);
if (!client_id)
continue;
silc_free(client_id);
- if (!silc_server_client_on_channel(client, channel)) {
+ if (!silc_server_client_on_channel(client, channel, NULL)) {
/* Client was not on the channel, add it. */
SilcChannelClientEntry chl = silc_calloc(1, sizeof(*chl));
chl->client = client;