Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 2001 - 2007 Pekka Riikonen
+ Copyright (C) 2001 - 2014 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
int i;
SilcServerBackupReplaced *r = silc_calloc(1, sizeof(*r));;
+ if (!r)
+ return;
if (!server->backup)
server->backup = silc_calloc(1, sizeof(*server->backup));
+ if (!server->backup)
+ return;
if (!server->backup->replaced) {
server->backup->replaced =
silc_calloc(1, sizeof(*server->backup->replaced));
server->backup->replaced_count = 1;
}
+ if (!server->backup->replaced)
+ return;
SILC_LOG_DEBUG(("Replacing router %s with %s",
silc_id_render(server_id, SILC_ID_SERVER),
SilcBool local)
{
SilcServerEntry backup;
- SilcPacketStream sock;
int i;
if (!server->backup || server->server_type != SILC_ROUTER)
if (server->backup->servers[i].server == server->id_entry)
continue;
- sock = backup->connection;
-
silc_server_packet_send(server, backup->connection, type, flags,
data, data_len);
}
SilcBool local)
{
SilcServerEntry backup;
- SilcPacketStream sock;
int i;
if (!server->backup || server->server_type != SILC_ROUTER)
if (server->backup->servers[i].server == server->id_entry)
continue;
- sock = backup->connection;
-
silc_server_packet_send_dest(server, backup->connection, type, flags,
dst_id, dst_id_type, data, data_len);
}
/* Reprocess this packet after received reply from router */
pc = silc_calloc(1, sizeof(*pc));
+ if (!pc) {
+ silc_server_backup_send_start_use(server, sock, FALSE);
+ silc_packet_free(packet);
+ return;
+ }
pc->server = server;
pc->sock = sock;
pc->packet = packet;
/* We have received a start for resuming protocol. We are either
primary router that came back online or normal server. */
SilcServerBackupProtocolContext proto_ctx;
+ unsigned char data[4];
/* If backup had closed the connection earlier we won't allow resuming
since we (primary router) have never gone away. */
if (server->server_type == SILC_ROUTER && !server->backup_router &&
server->backup_closed) {
- unsigned char data[4];
SILC_LOG_DEBUG(("Backup resuming not allowed since we are still "
"primary router"));
SILC_LOG_INFO(("Backup resuming not allowed since we are still "
}
proto_ctx = silc_calloc(1, sizeof(*proto_ctx));
+ if (!proto_ctx) {
+ SILC_PUT32_MSB(SILC_SERVER_BACKUP_START, data);
+ silc_server_packet_send(server, sock, SILC_PACKET_FAILURE, 0,
+ data, 4);
+ server->backup_closed = FALSE;
+ silc_packet_free(packet);
+ return;
+ }
proto_ctx->server = server;
proto_ctx->sock = sock;
proto_ctx->responder = TRUE;
sock = server_entry->connection;
proto_ctx = silc_calloc(1, sizeof(*proto_ctx));
+ if (!proto_ctx)
+ return;
proto_ctx->server = server;
proto_ctx->sock = sock;
proto_ctx->responder = FALSE;
/* Restart the protocol. */
proto_ctx = silc_calloc(1, sizeof(*proto_ctx));
+ if (!proto_ctx)
+ continue;
proto_ctx->server = server;
proto_ctx->sock = sock;
proto_ctx->responder = FALSE;