X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilcclient%2Fcommand_reply.h;h=4eb8ca18ea428b63345f25ae0234cd7d9a8f14af;hp=3f9e7598fd54b82cd68fe4060d79880299085e0d;hb=413da0f8686910f5e627393157566ae729ca99c4;hpb=050bd9d9e5d843220f3f393a18ab5011622237b9 diff --git a/lib/silcclient/command_reply.h b/lib/silcclient/command_reply.h index 3f9e7598..4eb8ca18 100644 --- a/lib/silcclient/command_reply.h +++ b/lib/silcclient/command_reply.h @@ -1,10 +1,10 @@ /* - command_reply.h + command_reply.h Author: Pekka Riikonen - Copyright (C) 1997 - 2001 Pekka Riikonen + Copyright (C) 1997 - 2003 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 @@ -51,16 +51,30 @@ struct SilcClientCommandReplyContextStruct { /* Macros */ -/* Command reply operation that is called at the end of all command replys. +/* Command reply operation that is called at the end of all command replys. Usage: COMMAND_REPLY((ARGS, argument1, argument2, etc...)), */ #define COMMAND_REPLY(args) cmd->client->internal->ops->command_reply args -#define SILC_ARGS cmd->client, cmd->sock->user_data, \ +#define SILC_ARGS cmd->client, cmd->sock->user_data, \ cmd->payload, TRUE, silc_command_get(cmd->payload), cmd->status /* Error reply to application. Usage: COMMAND_REPLY_ERROR; */ -#define COMMAND_REPLY_ERROR cmd->client->internal->ops-> \ - command_reply(cmd->client, cmd->sock->user_data, cmd->payload, \ - FALSE, silc_command_get(cmd->payload), cmd->status) +#define COMMAND_REPLY_ERROR(error) \ +do { \ + if (cmd->status == SILC_STATUS_OK) { \ + cmd->client->internal->ops-> \ + command_reply(cmd->client, cmd->sock->user_data, cmd->payload, \ + FALSE, silc_command_get(cmd->payload), error); \ + } else { \ + void *arg1 = NULL, *arg2 = NULL; \ + silc_status_get_args(cmd->status, cmd->args, &arg1, &arg2); \ + cmd->client->internal->ops-> \ + command_reply(cmd->client, cmd->sock->user_data, cmd->payload, \ + FALSE, silc_command_get(cmd->payload), cmd->status, \ + arg1, arg2); \ + silc_free(arg1); \ + silc_free(arg2); \ + } \ +} while(0) /* Macro used to declare command reply functions */ #define SILC_CLIENT_CMD_REPLY_FUNC(func) \