From: Skywing Date: Sat, 13 Dec 2008 18:43:25 +0000 (-0500) Subject: Send resume notifications to previous owner server when client resumes. X-Git-Tag: silc.toolkit.1.1.9~4^2~2 X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=commitdiff_plain;h=2652f16abc04e55355d948a10d92ce9771ca1f4b Send resume notifications to previous owner server when client resumes. Previously, resume notifications were broadcast to all routers, but not necessarily the original owner of a particular detached user. This caused various breakage when a user was previously homed at a plain server and then resumed at a router server, as the users previous home server would never have been properly notified about the resume. --- diff --git a/apps/silcd/packet_receive.c b/apps/silcd/packet_receive.c index 5a49ca31..ac815610 100644 --- a/apps/silcd/packet_receive.c +++ b/apps/silcd/packet_receive.c @@ -3951,6 +3951,23 @@ void silc_server_resume_client(SilcServer server, FALSE, TRUE); } + /* If the client has a locally-connected previous owner, then we + will need to notify them that the resume has completed. Note + that if the previous owner was a router, this case is already + handled above by the broadcast, so we shouldn't attempt to + send another notification in that case. Additionally, if + the previous owner was the server that sent the packet, then + we'll not send the notification as it will have already done + the necessary work locally. */ + if (server->server_type == SILC_ROUTER && + idata->conn_type == SILC_CONN_SERVER && + detached_client->router && + SILC_IS_LOCAL(detached_client->router) && + detached_client->router->server_type != SILC_ROUTER) + silc_server_packet_send(server, detached_client->router->connection, + SILC_PACKET_RESUME_CLIENT, 0, + buffer->data, silc_buffer_len(buffer)); + /* Client is detached, and now it is resumed. Remove the detached mode and mark that it is resumed. */