diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2012-12-11 12:42:06 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2012-12-11 14:34:51 +0200 |
commit | 2fe31259571d24cd06292946a2a108046d3bc228 (patch) | |
tree | bdcfd00fdde244761a8c6560becf615f1e6f4d66 /src/eclat.h | |
parent | 980d465d9ea87e2123bd9a3045de5c0a45e84cd7 (diff) | |
download | eclat-2fe31259571d24cd06292946a2a108046d3bc228.tar.gz eclat-2fe31259571d24cd06292946a2a108046d3bc228.tar.bz2 |
Change handler invocation.
* src/eclat.c: Initialize query in main and pass it to
each handler along with the curl pointer in a "runtime
environment" structure. If the handler returns 0, send
that query to the endpoint (from main, again). This
avoids duplication of code. Reserve a CMD_NOQRY flag
for commands that are supposed to do everything by
themselves. Use command->tag member as the Action
parameter.
* src/eclat.h (eclat_command_env): New structure.
Change all handler prototypes.
* src/util.c (describe_query_create): Take a pointer
to eclat_command_env_t as the first argument. Assume
that the query structure is already initialized. The
"verb" argument becomes superfluous and is removed. All
uses changed.
* src/allocaddr.c: Update.
* src/asscaddr.c: Update.
* src/attvol.c: Update.
* src/cresnap.c: Update.
* src/cretags.c: Update.
* src/crevol.c: Update.
* src/delsnap.c: Update.
* src/delvol.c: Update.
* src/detvol.c: Update.
* src/disassaddr.c: Update.
* src/dscraddrs.c: Update.
* src/dscrazs.c: Update.
* src/dscrinstattr.c: Update.
* src/dscrinsts.c: Update.
* src/dscrinststat.c: Update.
* src/dscrregs.c: Update.
* src/dscrsecgrps.c: Update.
* src/dscrsnap.c: Update.
* src/dscrtags.c: Update.
* src/dscrvols.c: Update.
* src/getconout.c: Update.
* src/reladdr.c: Update.
* src/startinst.c: Update.
Diffstat (limited to 'src/eclat.h')
-rw-r--r-- | src/eclat.h | 68 |
1 files changed, 37 insertions, 31 deletions
diff --git a/src/eclat.h b/src/eclat.h index 9a21835..8494f59 100644 --- a/src/eclat.h +++ b/src/eclat.h @@ -63,34 +63,41 @@ void config_init(void); void config_finish(struct grecs_node *tree); int run_config_finish_hooks(void); -typedef int (*eclat_command_handler_t) (CURL *curl, int argc, char **argv); - -int eclat_start_instance(CURL *curl, int argc, char **argv); -int eclat_stop_instance(CURL *curl, int argc, char **argv); -int eclat_reboot_instance(CURL *curl, int argc, char **argv); -int eclat_describe_tags(CURL *curl, int argc, char **argv); -int eclat_describe_instance_status(CURL *curl, int argc, char **argv); -int eclat_describe_instances(CURL *curl, int argc, char **argv); -int eclat_allocate_address(CURL *curl, int argc, char **argv); -int eclat_release_address(CURL *curl, int argc, char **argv); -int eclat_associate_address(CURL *curl, int argc, char **argv); -int eclat_disassociate_address(CURL *curl, int argc, char **argv); -int eclat_describe_addresses(CURL *curl, int argc, char **argv); -int eclat_describe_volumes(CURL *curl, int argc, char **argv); -int eclat_get_console_output(CURL *curl, int argc, char **argv); -int eclat_describe_instance_attribute(CURL *curl, int argc, char **argv); -int eclat_create_tags(CURL *curl, int argc, char **argv); -int eclat_delete_tags(CURL *curl, int argc, char **argv); -int eclat_describe_security_groups(CURL *curl, int argc, char **argv); -int eclat_create_snapshot(CURL *curl, int argc, char **argv); -int eclat_describe_snapshots(CURL *curl, int argc, char **argv); -int eclat_delete_snapshot(CURL *curl, int argc, char **argv); -int eclat_describe_avaialbility_zones(CURL *curl, int argc, char **argv); -int eclat_describe_regions(CURL *curl, int argc, char **argv); -int eclat_create_volume(CURL *curl, int argc, char **argv); -int eclat_delete_volume(CURL *curl, int argc, char **argv); -int eclat_attach_volume(CURL *curl, int argc, char **argv); -int eclat_detach_volume(CURL *curl, int argc, char **argv); +struct eclat_command_env { + CURL *curl; + struct ec2_query *query; +}; + +typedef struct eclat_command_env eclat_command_env_t; + +typedef int (*eclat_command_handler_t) (eclat_command_env_t *env, int argc, char **argv); + +int eclat_start_instance(eclat_command_env_t *env, int argc, char **argv); +int eclat_stop_instance(eclat_command_env_t *env, int argc, char **argv); +int eclat_reboot_instance(eclat_command_env_t *env, int argc, char **argv); +int eclat_describe_tags(eclat_command_env_t *env, int argc, char **argv); +int eclat_describe_instance_status(eclat_command_env_t *env, int argc, char **argv); +int eclat_describe_instances(eclat_command_env_t *env, int argc, char **argv); +int eclat_allocate_address(eclat_command_env_t *env, int argc, char **argv); +int eclat_release_address(eclat_command_env_t *env, int argc, char **argv); +int eclat_associate_address(eclat_command_env_t *env, int argc, char **argv); +int eclat_disassociate_address(eclat_command_env_t *env, int argc, char **argv); +int eclat_describe_addresses(eclat_command_env_t *env, int argc, char **argv); +int eclat_describe_volumes(eclat_command_env_t *env, int argc, char **argv); +int eclat_get_console_output(eclat_command_env_t *env, int argc, char **argv); +int eclat_describe_instance_attribute(eclat_command_env_t *env, int argc, char **argv); +int eclat_create_tags(eclat_command_env_t *env, int argc, char **argv); +int eclat_delete_tags(eclat_command_env_t *env, int argc, char **argv); +int eclat_describe_security_groups(eclat_command_env_t *env, int argc, char **argv); +int eclat_create_snapshot(eclat_command_env_t *env, int argc, char **argv); +int eclat_describe_snapshots(eclat_command_env_t *env, int argc, char **argv); +int eclat_delete_snapshot(eclat_command_env_t *env, int argc, char **argv); +int eclat_describe_avaialbility_zones(eclat_command_env_t *env, int argc, char **argv); +int eclat_describe_regions(eclat_command_env_t *env, int argc, char **argv); +int eclat_create_volume(eclat_command_env_t *env, int argc, char **argv); +int eclat_delete_volume(eclat_command_env_t *env, int argc, char **argv); +int eclat_attach_volume(eclat_command_env_t *env, int argc, char **argv); +int eclat_detach_volume(eclat_command_env_t *env, int argc, char **argv); char *region_to_endpoint(const char *region); @@ -98,9 +105,8 @@ void define_format(const char *name, const char *format, grecs_locus_t *locus); void set_command_format(const char *name, const char *format, grecs_locus_t *locus); -struct ec2_query *describe_query_create(CURL *curl, const char *verb, - int argc, char **argv, - const char *uparm); +void describe_query_create(eclat_command_env_t *env, int argc, char **argv, + const char *uparm); int eclat_send_query(CURL *curl, struct ec2_query *q); #define XML_DUMP_FILE_NAME "eclat.dump.xml" |