aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/ChangeLog7
-rw-r--r--src/assuan-defs.h5
-rw-r--r--src/assuan-handler.c16
-rw-r--r--src/assuan.c2
-rw-r--r--src/assuan.h1
-rw-r--r--src/libassuan.def1
-rw-r--r--src/libassuan.vers1
7 files changed, 31 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index f2ae1e6..c9f2172 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2009-10-14 Werner Koch <[email protected]>
+
+ * assuan-defs.h (assuan_context_s): Add field CURRENT_CMD_NAME.
+ * assuan-handler.c (dispatch_command): Set this field.
+ (assuan_get_command_name): New.
+ * assuan.h, libassuan.vers, libassuan.def: Add new fucntion.
+
2009-10-08 Marcus Brinkmann <[email protected]>
* assuan.h (assuan_get_assuan_log_stream,
diff --git a/src/assuan-defs.h b/src/assuan-defs.h
index c20cef5..95706d6 100644
--- a/src/assuan-defs.h
+++ b/src/assuan-defs.h
@@ -200,6 +200,11 @@ struct assuan_context_s
struct cmdtbl_s *cmdtbl;
size_t cmdtbl_used; /* used entries */
size_t cmdtbl_size; /* allocated size of table */
+
+ /* The name of the command currently processed by a command handler.
+ This is a pointer into CMDTBL. NULL if not in a command
+ handler. */
+ const char *current_cmd_name;
void (*bye_notify_fnc)(assuan_context_t);
void (*reset_notify_fnc)(assuan_context_t);
diff --git a/src/assuan-handler.c b/src/assuan-handler.c
index da5d4bf..fd41719 100644
--- a/src/assuan-handler.c
+++ b/src/assuan-handler.c
@@ -330,6 +330,16 @@ assuan_register_command (assuan_context_t ctx,
return 0;
}
+/* Return the name of the command currently processed by a handler.
+ The string returned is valid until the next call to an assuan
+ function on the same context. Returns NULL if no handler is
+ executed or the command is not known. */
+const char *
+assuan_get_command_name (assuan_context_t ctx)
+{
+ return ctx? ctx->current_cmd_name : NULL;
+}
+
gpg_error_t
assuan_register_post_cmd_notify (assuan_context_t ctx,
void (*fnc)(assuan_context_t, gpg_error_t))
@@ -453,6 +463,7 @@ my_strcasecmp (const char *a, const char *b)
static gpg_error_t
dispatch_command (assuan_context_t ctx, char *line, int linelen)
{
+ gpg_error_t err;
char *p;
const char *s;
int shift, i;
@@ -499,7 +510,10 @@ dispatch_command (assuan_context_t ctx, char *line, int linelen)
linelen -= shift;
/* fprintf (stderr, "DBG-assuan: processing %s `%s'\n", s, line); */
- return ctx->cmdtbl[i].handler (ctx, line);
+ ctx->current_cmd_name = ctx->cmdtbl[i].name;
+ err = ctx->cmdtbl[i].handler (ctx, line);
+ ctx->current_cmd_name = NULL;
+ return err;
}
diff --git a/src/assuan.c b/src/assuan.c
index 06b9b8a..4848ec4 100644
--- a/src/assuan.c
+++ b/src/assuan.c
@@ -160,7 +160,7 @@ _assuan_reset (assuan_context_t ctx)
ctx->engine.release = NULL;
}
- // FIXME: Clean standard commands
+ /* FIXME: Clean standard commands */
}
diff --git a/src/assuan.h b/src/assuan.h
index 20de1b0..c0b1fea 100644
--- a/src/assuan.h
+++ b/src/assuan.h
@@ -288,6 +288,7 @@ gpg_error_t assuan_process_done (assuan_context_t ctx, gpg_error_t rc);
int assuan_get_active_fds (assuan_context_t ctx, int what,
assuan_fd_t *fdarray, int fdarraysize);
+const char *assuan_get_command_name (assuan_context_t ctx);
FILE *assuan_get_data_fp (assuan_context_t ctx);
gpg_error_t assuan_set_okay_line (assuan_context_t ctx, const char *line);
diff --git a/src/libassuan.def b/src/libassuan.def
index cc5509e..b2450d8 100644
--- a/src/libassuan.def
+++ b/src/libassuan.def
@@ -84,6 +84,7 @@ EXPORTS
assuan_transact @63
assuan_write_line @64
assuan_write_status @65
+ assuan_get_command_name @66
; END
diff --git a/src/libassuan.vers b/src/libassuan.vers
index 61eaebd..e4f6a7a 100644
--- a/src/libassuan.vers
+++ b/src/libassuan.vers
@@ -30,6 +30,7 @@ LIBASSUAN_1.0 {
assuan_end_confidential;
assuan_get_active_fds;
assuan_get_assuan_log_prefix;
+ assuan_get_command_name;
assuan_get_data_fp;
assuan_get_flag;
assuan_get_input_fd;