void silc_server_connection_free(SilcServerConnection sconn)
{
+ if (!sconn)
+ return;
SILC_LOG_DEBUG(("Free connection %p", sconn));
silc_dlist_del(sconn->server->conns, sconn);
silc_server_config_unref(&sconn->conn);
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_connection_free(sconn);
return;
}
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_connection_free(sconn);
- silc_free(entry);
return;
}
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_connection_free(sconn);
- silc_free(entry);
return;
}
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_connection_free(sconn);
- silc_free(entry);
return;
}
SILC_STATUS_ERR_RESOURCE_LIMIT, NULL);
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
- silc_server_connection_free(sconn);
- silc_free(entry);
+ silc_server_free_sock_user_data(server, sconn->sock, NULL);
return;
#endif /* 0 */
}
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_connection_free(sconn);
- silc_free(entry);
return;
}
{
SilcPacketStream sock = context;
SilcUnknownEntry entry = silc_packet_get_context(sock);
- SilcServerConnection sconn = silc_ske_get_context(ske);
+ SilcServerConnection sconn = entry->data.sconn;
SilcServer server = entry->server;
SilcServerConfigRouter *conn = sconn->conn.ref_ptr;
SilcAuthMethod auth_meth = SILC_AUTH_NONE;
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_connection_free(sconn);
return;
}
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_connection_free(sconn);
return;
}
silc_packet_set_keys(sconn->sock, send_key, receive_key, hmac_send,
if (sconn->callback)
(*sconn->callback)(server, NULL, sconn->callback_context);
silc_server_free_sock_user_data(server, sconn->sock, NULL);
- silc_server_connection_free(sconn);
return;
}
return;
}
entry->server = server;
+ entry->data.sconn = sconn;
silc_packet_set_context(sconn->sock, entry);
SILC_LOG_DEBUG(("Created unknown connection %p", entry));
SilcPacketStream sock,
const char *signoff_message)
{
- SilcIDListData idata = silc_packet_get_context(sock);
+ SilcIDListData idata;
const char *ip;
SilcUInt16 port;
+ if (!sock)
+ return;
+
SILC_LOG_DEBUG(("Start, sock %p", sock));
+ idata = silc_packet_get_context(sock);
if (!idata)
return;
}
server->backup_noswitch = FALSE;
- if (idata->sconn)
+ if (idata->sconn) {
silc_server_connection_free(idata->sconn);
+ idata->sconn = NULL;
+ }
/* Statistics */
if (idata->conn_type == SILC_CONN_SERVER) {