aboutsummaryrefslogtreecommitdiffstats
path: root/tools/wks-receive.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/wks-receive.c')
-rw-r--r--tools/wks-receive.c39
1 files changed, 37 insertions, 2 deletions
diff --git a/tools/wks-receive.c b/tools/wks-receive.c
index ecd8cafe3..6bc1318cc 100644
--- a/tools/wks-receive.c
+++ b/tools/wks-receive.c
@@ -50,6 +50,7 @@ struct receive_ctx_s
estream_t signature;
estream_t key_data;
estream_t wkd_data;
+ char *ct_language; /* The short locale of the conent or NULL. */
unsigned int collect_key_data:1;
unsigned int collect_wkd_data:1;
unsigned int draft_version_2:1; /* This is a draft version 2 request. */
@@ -288,6 +289,34 @@ t2body (void *cookie, int level)
}
+/* Get the Content-Language from the curent MIME header and store it
+ * in CTX. */
+static void
+get_language (receive_ctx_t ctx)
+{
+ rfc822parse_t msg;
+ char *value, *p;
+ size_t valueoff;
+
+ msg = mime_parser_rfc822parser (ctx->parser);
+ if (msg)
+ {
+ value = rfc822parse_get_field (msg, "Content-Language",
+ -1, &valueoff);
+ if (value)
+ {
+ xfree (ctx->ct_language);
+ ctx->ct_language = xtrystrdup (value+valueoff);
+ /* Take only the first short language. */
+ if (ctx->ct_language
+ && (p = strpbrk (ctx->ct_language, " \t,_.@/")))
+ *p = 0;
+ rfc822_free (value);
+ }
+ }
+}
+
+
static gpg_error_t
new_part (void *cookie, const char *mediatype, const char *mediasubtype)
{
@@ -308,6 +337,7 @@ new_part (void *cookie, const char *mediatype, const char *mediasubtype)
}
else
{
+ get_language (ctx);
ctx->key_data = es_fopenmem (0, "w+b");
if (!ctx->key_data)
{
@@ -333,6 +363,7 @@ new_part (void *cookie, const char *mediatype, const char *mediasubtype)
}
else
{
+ get_language (ctx);
ctx->wkd_data = es_fopenmem (0, "w+b");
if (!ctx->wkd_data)
{
@@ -410,6 +441,7 @@ gpg_error_t
wks_receive (estream_t fp,
gpg_error_t (*result_cb)(void *opaque,
const char *mediatype,
+ const char *language,
estream_t data,
unsigned int flags),
void *cb_data)
@@ -482,6 +514,8 @@ wks_receive (estream_t fp,
if (DBG_MIME)
{
es_rewind (ctx->key_data);
+ if (ctx->ct_language)
+ log_debug ("Language: '%s'\n", ctx->ct_language);
log_debug ("Key: '");
log_printf ("\n");
while ((c = es_getc (ctx->key_data)) != EOF)
@@ -492,7 +526,7 @@ wks_receive (estream_t fp,
{
es_rewind (ctx->key_data);
err = result_cb (cb_data, "application/pgp-keys",
- ctx->key_data, flags);
+ ctx->ct_language, ctx->key_data, flags);
if (err)
goto leave;
}
@@ -512,7 +546,7 @@ wks_receive (estream_t fp,
{
es_rewind (ctx->wkd_data);
err = result_cb (cb_data, "application/vnd.gnupg.wks",
- ctx->wkd_data, flags);
+ ctx->ct_language, ctx->wkd_data, flags);
if (err)
goto leave;
}
@@ -529,6 +563,7 @@ wks_receive (estream_t fp,
es_fclose (ctx->signature);
es_fclose (ctx->key_data);
es_fclose (ctx->wkd_data);
+ xfree (ctx->ct_language);
xfree (ctx);
return err;
}