X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fcommand_reply.h;h=383f6d2e6b04b2cfa9ad5d75adeeeed9512b1348;hb=3df964f52d094db8ea9e8981fee73ff2a59e365c;hp=e07fcccbfb1649cb3ea0a6c20020408081f5c91e;hpb=087575e2f4248e52d8db5900f757b847e65d9d91;p=silc.git diff --git a/lib/silcclient/command_reply.h b/lib/silcclient/command_reply.h index e07fcccb..383f6d2e 100644 --- a/lib/silcclient/command_reply.h +++ b/lib/silcclient/command_reply.h @@ -4,7 +4,7 @@ Author: Pekka Riikonen - Copyright (C) 1997 - 2005 Pekka Riikonen + Copyright (C) 2006 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 @@ -20,108 +20,35 @@ #ifndef COMMAND_REPLY_H #define COMMAND_REPLY_H -/* Structure holding one command reply and pointer to its function. */ -typedef struct { - SilcCommandCb cb; - SilcCommand cmd; -} SilcClientCommandReply; - -/* Context holding pending command callbacks. */ -typedef struct { - SilcCommandCb callback; - void *context; -} *SilcClientCommandPendingCallbacks; - -/* Context sent as argument to all command reply functions */ -struct SilcClientCommandReplyContextStruct { - SilcClient client; - SilcSocketConnection sock; - SilcCommandPayload payload; - SilcStatus status; - SilcStatus error; - SilcArgumentPayload args; - SilcPacketContext *packet; - - /* If defined this executes the pending command. */ - SilcClientCommandPendingCallbacks callbacks; - SilcUInt32 callbacks_count; - SilcUInt16 ident; - SilcUInt8 users; -}; - -/* Macros */ - -/* 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, \ - cmd->payload, TRUE, silc_command_get(cmd->payload), cmd->status - -/* Error reply to application. Usage: COMMAND_REPLY_ERROR; */ -#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) \ -void silc_client_command_reply_##func(void *context, void *context2) - -/* Prototypes */ - -void silc_client_command_reply_process(SilcClient client, - SilcSocketConnection sock, - SilcPacketContext *packet); -void silc_client_command_reply_free(SilcClientCommandReplyContext cmd); -SILC_CLIENT_CMD_REPLY_FUNC(whois); -SILC_CLIENT_CMD_REPLY_FUNC(whowas); -SILC_CLIENT_CMD_REPLY_FUNC(identify); -SILC_CLIENT_CMD_REPLY_FUNC(nick); -SILC_CLIENT_CMD_REPLY_FUNC(list); -SILC_CLIENT_CMD_REPLY_FUNC(topic); -SILC_CLIENT_CMD_REPLY_FUNC(invite); -SILC_CLIENT_CMD_REPLY_FUNC(kill); -SILC_CLIENT_CMD_REPLY_FUNC(info); -SILC_CLIENT_CMD_REPLY_FUNC(stats); -SILC_CLIENT_CMD_REPLY_FUNC(ping); -SILC_CLIENT_CMD_REPLY_FUNC(oper); -SILC_CLIENT_CMD_REPLY_FUNC(join); -SILC_CLIENT_CMD_REPLY_FUNC(motd); -SILC_CLIENT_CMD_REPLY_FUNC(umode); -SILC_CLIENT_CMD_REPLY_FUNC(cmode); -SILC_CLIENT_CMD_REPLY_FUNC(cumode); -SILC_CLIENT_CMD_REPLY_FUNC(kick); -SILC_CLIENT_CMD_REPLY_FUNC(ban); -SILC_CLIENT_CMD_REPLY_FUNC(detach); -SILC_CLIENT_CMD_REPLY_FUNC(watch); -SILC_CLIENT_CMD_REPLY_FUNC(silcoper); -SILC_CLIENT_CMD_REPLY_FUNC(leave); -SILC_CLIENT_CMD_REPLY_FUNC(users); -SILC_CLIENT_CMD_REPLY_FUNC(getkey); -SILC_CLIENT_CMD_REPLY_FUNC(service); -SILC_CLIENT_CMD_REPLY_FUNC(quit); - -/* Internal command reply functions */ -SILC_CLIENT_CMD_REPLY_FUNC(whois_i); -SILC_CLIENT_CMD_REPLY_FUNC(identify_i); -SILC_CLIENT_CMD_REPLY_FUNC(info_i); -SILC_CLIENT_CMD_REPLY_FUNC(users_i); - -SILC_CLIENT_CMD_REPLY_FUNC(connect); -SILC_CLIENT_CMD_REPLY_FUNC(close); -SILC_CLIENT_CMD_REPLY_FUNC(shutdown); - -#endif +SILC_FSM_STATE(silc_client_command_reply); +SILC_FSM_STATE(silc_client_command_reply_wait); +SILC_FSM_STATE(silc_client_command_reply_process); +SILC_FSM_STATE(silc_client_command_reply_whois); +SILC_FSM_STATE(silc_client_command_reply_whowas); +SILC_FSM_STATE(silc_client_command_reply_identify); +SILC_FSM_STATE(silc_client_command_reply_nick); +SILC_FSM_STATE(silc_client_command_reply_list); +SILC_FSM_STATE(silc_client_command_reply_topic); +SILC_FSM_STATE(silc_client_command_reply_invite); +SILC_FSM_STATE(silc_client_command_reply_kill); +SILC_FSM_STATE(silc_client_command_reply_info); +SILC_FSM_STATE(silc_client_command_reply_stats); +SILC_FSM_STATE(silc_client_command_reply_ping); +SILC_FSM_STATE(silc_client_command_reply_oper); +SILC_FSM_STATE(silc_client_command_reply_join); +SILC_FSM_STATE(silc_client_command_reply_motd); +SILC_FSM_STATE(silc_client_command_reply_umode); +SILC_FSM_STATE(silc_client_command_reply_cmode); +SILC_FSM_STATE(silc_client_command_reply_cumode); +SILC_FSM_STATE(silc_client_command_reply_kick); +SILC_FSM_STATE(silc_client_command_reply_ban); +SILC_FSM_STATE(silc_client_command_reply_detach); +SILC_FSM_STATE(silc_client_command_reply_watch); +SILC_FSM_STATE(silc_client_command_reply_silcoper); +SILC_FSM_STATE(silc_client_command_reply_leave); +SILC_FSM_STATE(silc_client_command_reply_users); +SILC_FSM_STATE(silc_client_command_reply_getkey); +SILC_FSM_STATE(silc_client_command_reply_service); +SILC_FSM_STATE(silc_client_command_reply_quit); + +#endif /* COMMAND_REPLY_H */