diff options
author | Werner Koch <wk@gnupg.org> | 2001-11-25 14:53:39 +0000 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2001-11-25 14:53:39 +0000 |
commit | e78360c0844e9463547043e971b78bd61ddc2a3d (patch) | |
tree | 58a5c221a3161056670d0d787077ae4ca19e1e62 | |
parent | c08d23fa74010d64721f3127b6607882895a05e8 (diff) | |
download | libassuan-e78360c0844e9463547043e971b78bd61ddc2a3d.tar.gz |
* assuan-handler.c (assuan_register_bye_notify)
(assuan_register_reset_notify)
(assuan_register_cancel_notify): New and call them from the
standard handlers.
-rw-r--r-- | src/ChangeLog | 7 | ||||
-rw-r--r-- | src/assuan-defs.h | 4 | ||||
-rw-r--r-- | src/assuan-handler.c | 38 | ||||
-rw-r--r-- | src/assuan.h | 8 |
4 files changed, 55 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index e514506..6f7f59e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2001-11-25 Werner Koch <wk@gnupg.org> + + * assuan-handler.c (assuan_register_bye_notify) + (assuan_register_reset_notify) + (assuan_register_cancel_notify): New and call them from the + standard handlers. + 2001-11-24 Werner Koch <wk@gnupg.org> * assuan-connect.c (assuan_get_pid): New. diff --git a/src/assuan-defs.h b/src/assuan-defs.h index 05e548c..2bbc9b8 100644 --- a/src/assuan-defs.h +++ b/src/assuan-defs.h @@ -69,6 +69,10 @@ struct assuan_context_s { size_t cmdtbl_used; /* used entries */ size_t cmdtbl_size; /* allocated size of table */ + void (*bye_notify_fnc)(ASSUAN_CONTEXT); + void (*cancel_notify_fnc)(ASSUAN_CONTEXT); + void (*reset_notify_fnc)(ASSUAN_CONTEXT); + int input_fd; /* set by INPUT command */ int output_fd; /* set by OUTPUT command */ diff --git a/src/assuan-handler.c b/src/assuan-handler.c index 472206b..d4de852 100644 --- a/src/assuan-handler.c +++ b/src/assuan-handler.c @@ -44,12 +44,16 @@ std_handler_nop (ASSUAN_CONTEXT ctx, char *line) static int std_handler_cancel (ASSUAN_CONTEXT ctx, char *line) { + if (ctx->cancel_notify_fnc) + ctx->cancel_notify_fnc (ctx); return set_error (ctx, Not_Implemented, NULL); } static int std_handler_bye (ASSUAN_CONTEXT ctx, char *line) { + if (ctx->bye_notify_fnc) + ctx->bye_notify_fnc (ctx); return -1; /* pretty simple :-) */ } @@ -62,7 +66,9 @@ std_handler_auth (ASSUAN_CONTEXT ctx, char *line) static int std_handler_reset (ASSUAN_CONTEXT ctx, char *line) { - return set_error (ctx, Not_Implemented, NULL); + if (ctx->reset_notify_fnc) + ctx->reset_notify_fnc (ctx); + return 0; } static int @@ -128,7 +134,7 @@ static struct { const char *name; int cmd_id; int (*handler)(ASSUAN_CONTEXT, char *line); - int always; /* always initializethis command */ + int always; /* always initialize this command */ } std_cmd_table[] = { { "NOP", ASSUAN_CMD_NOP, std_handler_nop, 1 }, { "CANCEL", ASSUAN_CMD_CANCEL, std_handler_cancel, 1 }, @@ -220,6 +226,34 @@ assuan_register_command (ASSUAN_CONTEXT ctx, return 0; } +int +assuan_register_bye_notify (ASSUAN_CONTEXT ctx, void (*fnc)(ASSUAN_CONTEXT)) +{ + if (!ctx) + return ASSUAN_Invalid_Value; + ctx->bye_notify_fnc = fnc; + return 0; +} + +int +assuan_register_reset_notify (ASSUAN_CONTEXT ctx, void (*fnc)(ASSUAN_CONTEXT)) +{ + if (!ctx) + return ASSUAN_Invalid_Value; + ctx->reset_notify_fnc = fnc; + return 0; +} + +int +assuan_register_cancel_notify (ASSUAN_CONTEXT ctx, void (*fnc)(ASSUAN_CONTEXT)) +{ + if (!ctx) + return ASSUAN_Invalid_Value; + ctx->cancel_notify_fnc = fnc; + return 0; +} + + /* Helper to register the standards commands */ int _assuan_register_std_commands (ASSUAN_CONTEXT ctx) diff --git a/src/assuan.h b/src/assuan.h index a5ae8ae..a858dc7 100644 --- a/src/assuan.h +++ b/src/assuan.h @@ -39,6 +39,7 @@ typedef enum { ASSUAN_Timeout = 4, ASSUAN_Read_Error = 5, ASSUAN_Write_Error = 6, + ASSUAN_Problem_Starting_Server = 7, /* error codes above 99 are meant as status codes */ ASSUAN_Not_Implemented = 100, @@ -53,6 +54,7 @@ typedef enum { ASSUAN_No_Input = 109, ASSUAN_No_Output = 110, ASSUAN_Canceled = 111, + ASSUAN_Unsupported_Algorithm = 112, ASSUAN_Cert_Revoked = 301, ASSUAN_No_CRL_For_Cert = 302, @@ -83,6 +85,12 @@ typedef struct assuan_context_s *ASSUAN_CONTEXT; int assuan_register_command (ASSUAN_CONTEXT ctx, int cmd_id, const char *cmd_string, int (*handler)(ASSUAN_CONTEXT, char *)); +int assuan_register_bye_notify (ASSUAN_CONTEXT ctx, + void (*fnc)(ASSUAN_CONTEXT)); +int assuan_register_reset_notify (ASSUAN_CONTEXT ctx, + void (*fnc)(ASSUAN_CONTEXT)); +int assuan_register_cancel_notify (ASSUAN_CONTEXT ctx, + void (*fnc)(ASSUAN_CONTEXT)); int assuan_process (ASSUAN_CONTEXT ctx); FILE *assuan_get_data_fp (ASSUAN_CONTEXT ctx); void assuan_write_status (ASSUAN_CONTEXT ctx, |