summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2001-11-25 14:53:39 +0000
committerWerner Koch <wk@gnupg.org>2001-11-25 14:53:39 +0000
commite78360c0844e9463547043e971b78bd61ddc2a3d (patch)
tree58a5c221a3161056670d0d787077ae4ca19e1e62
parentc08d23fa74010d64721f3127b6607882895a05e8 (diff)
downloadlibassuan-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/ChangeLog7
-rw-r--r--src/assuan-defs.h4
-rw-r--r--src/assuan-handler.c38
-rw-r--r--src/assuan.h8
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,