SILC_SERVER_CMD_FUNC(watch)
{
SilcServerCommandContext cmd = (SilcServerCommandContext)context;
+ SilcServerEntry server_entry;
SilcServer server = cmd->server;
char *add_nick, *del_nick;
SilcUInt32 add_nick_len, del_nick_len, tmp_len, pk_len;
SILC_PACKET_COMMAND, cmd->packet->flags,
tmpbuf->data, tmpbuf->len, TRUE);
- /* Reprocess this packet after received reply from router */
- silc_server_command_pending(server, SILC_COMMAND_WATCH,
- silc_command_get_ident(cmd->payload),
- silc_server_command_watch,
- silc_server_command_dup(cmd));
- cmd->pending = TRUE;
+ /* If we are backup router, we're not expecting reply as router
+ won't be sending it. */
+ if (server->server_type != SILC_BACKUP_ROUTER) {
+ /* Reprocess this packet after received reply from router */
+ silc_server_command_pending(server, SILC_COMMAND_WATCH,
+ silc_command_get_ident(cmd->payload),
+ silc_server_command_watch,
+ silc_server_command_dup(cmd));
+ cmd->pending = TRUE;
+ silc_command_set_ident(cmd->payload, old_ident);
+ silc_buffer_free(tmpbuf);
+ goto out;
+ }
+
silc_command_set_ident(cmd->payload, old_ident);
silc_buffer_free(tmpbuf);
} else if (context2) {
silc_command_get_status(reply->payload, &status, NULL);
silc_server_command_send_status_reply(cmd, SILC_COMMAND_WATCH, status,
0);
+ goto out;
}
-
- goto out;
}
/* We are router and keep the watch list for local cell */
SilcBuffer tmpbuf;
silc_command_set_ident(cmd->payload, ++server->cmd_ident);
tmpbuf = silc_command_payload_encode_payload(cmd->payload);
- silc_server_backup_send(server, NULL, SILC_PACKET_COMMAND,
+ silc_server_backup_send(server, cmd->sock->user_data, SILC_PACKET_COMMAND,
cmd->packet->flags, tmpbuf->data, tmpbuf->len,
FALSE, TRUE);
silc_buffer_free(tmpbuf);