aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2010-08-11 13:10:08 +0000
committerWerner Koch <[email protected]>2010-08-11 13:10:08 +0000
commit5650dc358bda65d04558cc71992d7a0b8e48e65c (patch)
tree87785b036954ce83de5e2d9e9e6c27ac4b7dca15 /src
parentPost release updates. (diff)
downloadlibassuan-5650dc358bda65d04558cc71992d7a0b8e48e65c.tar.gz
libassuan-5650dc358bda65d04558cc71992d7a0b8e48e65c.zip
Add ASSUAN_CONVEY_COMMENTS flag.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog14
-rw-r--r--src/assuan-defs.h4
-rw-r--r--src/assuan-pipe-connect.c2
-rw-r--r--src/assuan-socket-connect.c6
-rw-r--r--src/assuan.h.in3
-rw-r--r--src/client.c17
-rw-r--r--src/context.c8
7 files changed, 45 insertions, 9 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index f37ae26..c85bbde 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,17 @@
+2010-08-11 Werner Koch <[email protected]>
+
+ * assuan.h.in (ASSUAN_CONVEY_COMMENTS): New.
+ * assuan-defs.h (struct assuan_context_s): Add flags.CONVEY_COMMENTS.
+ * context.c (assuan_set_flag, assuan_get_flag): Support this flag.
+ (_assuan_read_from_server): Add arg CONVEY_COMMENTS. Change all
+ callers.
+ * client.c (assuan_transact): Implement new flags.
+
+2010-08-09 Werner Koch <[email protected]>
+
+ * assuan-socket-connect.c (assuan_socket_connect): Fix ipv6
+ literal IP case.
+
2010-08-03 Marcus Brinkmann <[email protected]>
* gpgcedev.c (GPGCEDEV_IOCTL_ASSIGN_RVID): New call ASSIGN_RVID.
diff --git a/src/assuan-defs.h b/src/assuan-defs.h
index 63f0d10..3cdbc92 100644
--- a/src/assuan-defs.h
+++ b/src/assuan-defs.h
@@ -87,6 +87,7 @@ struct assuan_context_s
unsigned int no_waitpid : 1;
unsigned int confidential : 1;
unsigned int no_fixsignals : 1;
+ unsigned int convey_comments : 1;
} flags;
/* If set, this is called right before logging an I/O line. */
@@ -281,7 +282,8 @@ gpg_error_t _assuan_write_line (assuan_context_t ctx, const char *prefix,
/*-- client.c --*/
gpg_error_t _assuan_read_from_server (assuan_context_t ctx,
- assuan_response_t *okay, int *off);
+ assuan_response_t *okay, int *off,
+ int convey_comments);
/*-- assuan-error.c --*/
diff --git a/src/assuan-pipe-connect.c b/src/assuan-pipe-connect.c
index 92f2bcc..bdcedc1 100644
--- a/src/assuan-pipe-connect.c
+++ b/src/assuan-pipe-connect.c
@@ -96,7 +96,7 @@ initial_handshake (assuan_context_t ctx)
int off;
gpg_error_t err;
- err = _assuan_read_from_server (ctx, &response, &off);
+ err = _assuan_read_from_server (ctx, &response, &off, 0);
if (err)
TRACE1 (ctx, ASSUAN_LOG_SYSIO, "initial_handshake", ctx,
"can't connect server: %s", gpg_strerror (err));
diff --git a/src/assuan-socket-connect.c b/src/assuan-socket-connect.c
index 13b8aa5..a3694c0 100644
--- a/src/assuan-socket-connect.c
+++ b/src/assuan-socket-connect.c
@@ -100,7 +100,7 @@ parse_portno (const char *str, uint16_t *r_port)
file://<fname>
- This is the same as the defualt just with an explicit schemata.
+ This is the same as the default just with an explicit schemata.
assuan://<ipaddr>:<port>
assuan://[<ip6addr>]:<port>
@@ -175,7 +175,7 @@ assuan_socket_connect (assuan_context_t ctx, const char *name,
if (!addrstr)
return _assuan_error (ctx, gpg_err_code_from_syserror ());
- if (*addrstr == '[')
+ if (*name == '[')
{
strcpy (addrstr, name+1);
p = strchr (addrstr, ']');
@@ -276,7 +276,7 @@ assuan_socket_connect (assuan_context_t ctx, const char *name,
assuan_response_t response;
int off;
- err = _assuan_read_from_server (ctx, &response, &off);
+ err = _assuan_read_from_server (ctx, &response, &off, 0);
if (err)
TRACE1 (ctx, ASSUAN_LOG_SYSIO, "assuan_socket_connect", ctx,
"can't connect to server: %s\n", gpg_strerror (err));
diff --git a/src/assuan.h.in b/src/assuan.h.in
index 410b4b7..86733a3 100644
--- a/src/assuan.h.in
+++ b/src/assuan.h.in
@@ -161,6 +161,9 @@ typedef unsigned int assuan_flag_t;
#define ASSUAN_CONFIDENTIAL 2
/* This flag suppresses fix up of signal handlers for pipes. */
#define ASSUAN_NO_FIXSIGNALS 3
+/* This flag changes assuan_transact to return comment lines via the
+ status callback. The default is to skip comment lines. */
+#define ASSUAN_CONVEY_COMMENTS 4
/* For context CTX, set the flag FLAG to VALUE. Values for flags
are usually 1 or 0 but certain flags might allow for other values;
diff --git a/src/client.c b/src/client.c
index 05cb579..3dfcf75 100644
--- a/src/client.c
+++ b/src/client.c
@@ -195,7 +195,7 @@ assuan_client_parse_response (assuan_context_t ctx, char *line, int linelen,
gpg_error_t
_assuan_read_from_server (assuan_context_t ctx, assuan_response_t *response,
- int *off)
+ int *off, int convey_comments)
{
gpg_error_t rc;
char *line;
@@ -209,7 +209,7 @@ _assuan_read_from_server (assuan_context_t ctx, assuan_response_t *response,
if (!rc)
rc = assuan_client_parse_response (ctx, line, linelen, response, off);
}
- while (!rc && *response == ASSUAN_RESPONSE_COMMENT);
+ while (!rc && *response == ASSUAN_RESPONSE_COMMENT && !convey_comments);
return rc;
}
@@ -258,7 +258,8 @@ assuan_transact (assuan_context_t ctx,
return 0; /* Don't expect a response for a comment line. */
again:
- rc = _assuan_read_from_server (ctx, &response, &off);
+ rc = _assuan_read_from_server (ctx, &response, &off,
+ ctx->flags.convey_comments);
if (rc)
return rc; /* error reading from server */
@@ -283,7 +284,7 @@ assuan_transact (assuan_context_t ctx,
if (!inquire_cb)
{
assuan_write_line (ctx, "END"); /* get out of inquire mode */
- _assuan_read_from_server (ctx, &response, &off); /* dummy read */
+ _assuan_read_from_server (ctx, &response, &off, 0); /* dummy read */
rc = _assuan_error (ctx, GPG_ERR_ASS_NO_INQUIRE_CB);
}
else
@@ -302,6 +303,14 @@ assuan_transact (assuan_context_t ctx,
if (!rc)
goto again;
}
+ else if (response == ASSUAN_RESPONSE_COMMENT && ctx->flags.convey_comments)
+ {
+ line -= off; /* Send line with the comment marker. */
+ if (status_cb)
+ rc = status_cb (status_cb_arg, line);
+ if (!rc)
+ goto again;
+ }
else if (response == ASSUAN_RESPONSE_END)
{
if (!data_cb)
diff --git a/src/context.c b/src/context.c
index 2be3a31..c55f626 100644
--- a/src/context.c
+++ b/src/context.c
@@ -80,6 +80,10 @@ assuan_set_flag (assuan_context_t ctx, assuan_flag_t flag, int value)
case ASSUAN_NO_FIXSIGNALS:
ctx->flags.no_fixsignals = value;
break;
+
+ case ASSUAN_CONVEY_COMMENTS:
+ ctx->flags.convey_comments = value;
+ break;
}
}
@@ -108,6 +112,10 @@ assuan_get_flag (assuan_context_t ctx, assuan_flag_t flag)
case ASSUAN_NO_FIXSIGNALS:
res = ctx->flags.no_fixsignals;
break;
+
+ case ASSUAN_CONVEY_COMMENTS:
+ res = ctx->flags.convey_comments;
+ break;
}
return TRACE_SUC1 ("flag_value=%i", res);