/* Remove this client from watcher list if it is */
silc_server_del_from_watcher_list(server, client);
+ /* It's possible router doesn't accept our local client in the network
+ and sends SIGNOFF to our local client */
+ if (SILC_IS_LOCAL(client)) {
+ SILC_LOG_DEBUG(("SIGNOFF from router to local client, disconnect"));
+ if (client->data.sconn) {
+ silc_server_connection_free(client->data.sconn);
+ client->data.sconn = NULL;
+ }
+ silc_packet_set_context(client->connection, NULL);
+ silc_server_disconnect_remote(server, client->connection,
+ SILC_STATUS_ERR_RESOURCE_LIMIT,
+ "Router prevented registration");
+ }
+
client->data.status &= ~SILC_IDLIST_STATUS_REGISTERED;
client->mode = 0;
client->router = NULL;
/* Add connection to server->conns so that we know we have connection
to this peer. */
sconn = silc_calloc(1, sizeof(*sconn));
+ if (!sconn)
+ goto out;
sconn->server = server;
sconn->sock = sock;
sconn->remote_host = strdup(hostname);
silc_packet_free(packet);
return;
}
+ if (idata->conn_type == SILC_CONN_UNKNOWN) {
+ silc_packet_free(packet);
+ return;
+ }
SILC_LOG_DEBUG(("Executing rekey protocol with %s:%d [%s], sock %p",
idata->sconn->remote_host, idata->sconn->remote_port,
Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1997 - 2007 Pekka Riikonen
+ Copyright (C) 1997 - 2009 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
SILC_TASK_CALLBACK(silc_server_connect_to_router_retry);
void silc_server_watcher_list_destroy(void *key, void *context,
void *user_context);
+void silc_server_connection_free(SilcServerConnection sconn);
#endif
{ 7, "silcd\\.c,server\\.c,command\\.c,server_backup\\.c,packet_send\\.c" },
/* All basic stuff from silcd/ */
- { 10, "silc_server_*" },
+ { 10, "silc_server_*,*silc_id_create_*" },
/* All from silcd/ */
{ 15, "*silcd*,*serverid*,silc_server_*,*idlist*" },