SilcServerCommandReplyContext ctx;
SilcCommandPayload payload;
SilcCommand command;
- SilcUInt16 ident;
SILC_LOG_DEBUG(("Start"));
ctx->sock = silc_socket_dup(sock);
ctx->payload = payload;
ctx->args = silc_command_get_args(ctx->payload);
- ident = silc_command_get_ident(ctx->payload);
+ ctx->ident = silc_command_get_ident(ctx->payload);
/* Check for pending commands and mark to be exeucted */
ctx->callbacks =
- silc_server_command_pending_check(server, ctx,
- silc_command_get(ctx->payload),
- ident, &ctx->callbacks_count);
+ silc_server_command_pending_check(server, silc_command_get(ctx->payload),
+ ctx->ident, &ctx->callbacks_count);
/* Execute command reply */
command = silc_command_get(ctx->payload);
if (fingerprint && flen == sizeof(client->data.fingerprint))
memcpy(client->data.fingerprint, fingerprint, flen);
+ /* Take Requested Attributes if set. */
+ tmp = silc_argument_get_arg_type(cmd->args, 11, &len);
+ if (tmp) {
+ silc_free(client->attrs);
+ client->attrs = silc_memdup(tmp, len);
+ }
+
return TRUE;
}
return FALSE;
}
+ client->data.status |= SILC_IDLIST_STATUS_RESOLVED;
+ client->data.status &= ~SILC_IDLIST_STATUS_RESOLVING;
client->data.status &= ~SILC_IDLIST_STATUS_REGISTERED;
client->servername = servername;
} else {
silc_free(client->nickname);
silc_free(client->username);
+ silc_free(client->servername);
client->nickname = nick;
client->username = strdup(username);
client->servername = servername;
+ client->data.status |= SILC_IDLIST_STATUS_RESOLVED;
+ client->data.status &= ~SILC_IDLIST_STATUS_RESOLVING;
/* Remove the old cache entry and create a new one */
silc_idcache_del_by_context(global ? server->global_list->clients :
}
out:
+ silc_server_command_process_error(cmd, error);
SILC_SERVER_PENDING_EXEC(cmd, SILC_COMMAND_WHOWAS);
+ silc_server_command_reply_free(cmd);
+ return;
+
err:
+ silc_server_command_process_error(cmd, error);
silc_server_command_reply_free(cmd);
}