projects
/
silc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Disconnect problem: Mark incoming connections immediately local
[silc.git]
/
apps
/
silcd
/
server.c
diff --git
a/apps/silcd/server.c
b/apps/silcd/server.c
index bb5b3b279e819a72d240fa388f5b8fb7610d0e0a..c2df082c61118703639b85fca1f9ad34de233bfd 100644
(file)
--- a/
apps/silcd/server.c
+++ b/
apps/silcd/server.c
@@
-201,6
+201,8
@@
static void silc_server_packet_eos(SilcPacketEngine engine,
if (server->router_conn && server->router_conn->sock == stream &&
!server->router && server->standalone) {
if (server->router_conn && server->router_conn->sock == stream &&
!server->router && server->standalone) {
+ if (idata->sconn && idata->sconn->callback)
+ (*idata->sconn->callback)(server, NULL, idata->sconn->callback_context);
silc_server_create_connections(server);
silc_server_free_sock_user_data(server, stream, NULL);
} else {
silc_server_create_connections(server);
silc_server_free_sock_user_data(server, stream, NULL);
} else {
@@
-212,6
+214,8
@@
static void silc_server_packet_eos(SilcPacketEngine engine,
server->backup_closed = TRUE;
}
server->backup_closed = TRUE;
}
+ if (idata->sconn && idata->sconn->callback)
+ (*idata->sconn->callback)(server, NULL, idata->sconn->callback_context);
silc_server_free_sock_user_data(server, stream, NULL);
}
silc_server_free_sock_user_data(server, stream, NULL);
}
@@
-239,6
+243,8
@@
SILC_TASK_CALLBACK(silc_server_packet_error_timeout)
server->backup_closed = TRUE;
}
server->backup_closed = TRUE;
}
+ if (idata->sconn && idata->sconn->callback)
+ (*idata->sconn->callback)(server, NULL, idata->sconn->callback_context);
silc_server_free_sock_user_data(server, stream, NULL);
}
silc_server_free_sock_user_data(server, stream, NULL);
}
@@
-1322,7
+1328,8
@@
void silc_server_create_connection(SilcServer server,
sconn->no_conf = dynamic;
sconn->server = server;
sconn->no_conf = dynamic;
sconn->server = server;
- SILC_LOG_DEBUG(("Created connection %p", sconn));
+ SILC_LOG_DEBUG(("Created connection %p to %s:%d", sconn,
+ remote_host, port));
silc_schedule_task_add_timeout(server->schedule, silc_server_connect_router,
sconn, 0, 0);
silc_schedule_task_add_timeout(server->schedule, silc_server_connect_router,
sconn, 0, 0);
@@
-1479,6
+1486,7
@@
silc_server_ke_auth_compl(SilcConnAuth connauth, SilcBool success,
idata->status |= (SILC_IDLIST_STATUS_REGISTERED |
SILC_IDLIST_STATUS_LOCAL);
idata->sconn = sconn;
idata->status |= (SILC_IDLIST_STATUS_REGISTERED |
SILC_IDLIST_STATUS_LOCAL);
idata->sconn = sconn;
+ idata->sconn->callback = NULL;
/* Statistics */
server->stat.my_routers++;
/* Statistics */
server->stat.my_routers++;
@@
-1591,9
+1599,9
@@
static void silc_server_ke_completed(SilcSKE ske, SilcSKEStatus status,
{
SilcPacketStream sock = context;
SilcUnknownEntry entry = silc_packet_get_context(sock);
{
SilcPacketStream sock = context;
SilcUnknownEntry entry = silc_packet_get_context(sock);
- SilcServerConnection sconn
= entry->data.sconn
;
- SilcServer server
= entry->server
;
- SilcServerConfigRouter *conn
= sconn->conn.ref_ptr
;
+ SilcServerConnection sconn;
+ SilcServer server;
+ SilcServerConfigRouter *conn;
SilcAuthMethod auth_meth = SILC_AUTH_NONE;
void *auth_data = NULL;
SilcUInt32 auth_data_len = 0;
SilcAuthMethod auth_meth = SILC_AUTH_NONE;
void *auth_data = NULL;
SilcUInt32 auth_data_len = 0;
@@
-1602,10
+1610,13
@@
static void silc_server_ke_completed(SilcSKE ske, SilcSKEStatus status,
SilcHmac hmac_send, hmac_receive;
SilcHash hash;
SilcHmac hmac_send, hmac_receive;
SilcHash hash;
- SILC_LOG_DEBUG(("Connection %p, SKE completed, entry %p", sconn, entry));
-
+ server = entry->server;
+ sconn = entry->data.sconn;
+ conn = sconn->conn.ref_ptr;
entry->op = NULL;
entry->op = NULL;
+ SILC_LOG_DEBUG(("Connection %p, SKE completed, entry %p", sconn, entry));
+
if (status != SILC_SKE_STATUS_OK) {
/* SKE failed */
SILC_LOG_ERROR(("Error (%s) during Key Exchange protocol with %s (%s)",
if (status != SILC_SKE_STATUS_OK) {
/* SKE failed */
SILC_LOG_ERROR(("Error (%s) during Key Exchange protocol with %s (%s)",
@@
-2595,6
+2606,7
@@
silc_server_accept_auth_compl(SilcConnAuth connauth, SilcBool success,
sconn->remote_port = port;
silc_dlist_add(server->conns, sconn);
idata->sconn = sconn;
sconn->remote_port = port;
silc_dlist_add(server->conns, sconn);
idata->sconn = sconn;
+ idata->sconn->callback = NULL;
idata->last_receive = time(NULL);
/* Add the common data structure to the ID entry. */
idata->last_receive = time(NULL);
/* Add the common data structure to the ID entry. */
@@
-2809,6
+2821,7
@@
static void silc_server_accept_new_connection(SilcNetStatus status,
entry->port = port;
entry->server = server;
entry->data.conn_type = SILC_CONN_UNKNOWN;
entry->port = port;
entry->server = server;
entry->data.conn_type = SILC_CONN_UNKNOWN;
+ entry->data.status |= SILC_IDLIST_STATUS_LOCAL;
silc_packet_set_context(packet_stream, entry);
SILC_LOG_DEBUG(("Created unknown connection %p", entry));
silc_packet_set_context(packet_stream, entry);
SILC_LOG_DEBUG(("Created unknown connection %p", entry));