From d41b3c70a2c20f8b8fa3a20a687126ff6a2a75af Mon Sep 17 00:00:00 2001
From: Michal Toman <[email protected]>
Date: Wed, 15 Aug 2012 14:49:34 +0200
Subject: [PATCH] reporter-ureport: save backtrace hash to reported_to


Signed-off-by: Michal Toman <[email protected]>
---
 src/include/dump_dir.h |    1 +
 src/lib/dump_dir.c     |    6 ++++++
 src/plugins/ureport.c  |   16 ++++++++++++++++
 3 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/src/include/dump_dir.h b/src/include/dump_dir.h
index 1073949..21e8a2b 100644
--- a/src/include/dump_dir.h
+++ b/src/include/dump_dir.h
@@ -79,6 +79,7 @@ void add_reported_to(struct dump_dir *dd, const char *line);
 struct report_result {
     char *url;
     char *msg;
+    char *bthash;
     /* char *whole_line; */
     /* time_t timestamp; */
     /* ^^^ if you add more fields, don't forget to update free_report_result() 
*/
diff --git a/src/lib/dump_dir.c b/src/lib/dump_dir.c
index 6a44359..0a0d760 100644
--- a/src/lib/dump_dir.c
+++ b/src/lib/dump_dir.c
@@ -906,6 +906,7 @@ void free_report_result(struct report_result *result)
         return;
     free(result->url);
     free(result->msg);
+    free(result->bthash);
     free(result);
 }
 
@@ -931,6 +932,11 @@ static report_result_t *parse_reported_line(const char 
*line)
             free(result->url);
             result->url = xstrndup(line + 4, end - (line + 4));
         }
+        if (strncmp(line, "BTHASH=", 7) == 0)
+        {
+            free(result->bthash);
+            result->bthash = xstrndup(line + 7, end - (line + 7));
+        }
         //else
         //if (strncmp(line, "TIME=", 5) == 0)
         //{
diff --git a/src/plugins/ureport.c b/src/plugins/ureport.c
index 3913a89..f5e9229 100644
--- a/src/plugins/ureport.c
+++ b/src/plugins/ureport.c
@@ -53,6 +53,7 @@ struct ureport_server_response {
     enum response_type type;
     const char *value;
     const char *message;
+    const char *bthash;
 };
 
 /*
@@ -83,6 +84,10 @@ static bool ureport_server_parse_json(json_object *json, 
struct ureport_server_r
         if (message)
             out_response->message = json_object_get_string(message);
 
+        json_object *bthash = json_object_object_get(json, "bthash");
+        if (bthash)
+            out_response->bthash = json_object_get_string(bthash);
+
         return true;
     }
 
@@ -157,6 +162,7 @@ int main(int argc, char **argv)
         .type=UREPORT_SERVER_RESP_UNKNOWN_TYPE,
         .value=NULL,
         .message=NULL,
+        .bthash=NULL,
     };
 
     const bool is_valid_response = ureport_server_parse_json(json, &response);
@@ -172,6 +178,16 @@ int main(int argc, char **argv)
         case UREPORT_SERVER_RESP_KNOWN:
             VERB1 log("is known: %s", response.value);
             ret = 0;
+
+            if (response.bthash)
+            {
+                dd = dd_opendir(dump_dir_path, /* flags */ 0);
+                char *msg = xasprintf("uReport: BTHASH=%s", response.bthash);
+                add_reported_to(dd, msg);
+                free(msg);
+                dd_close(dd);
+            }
+
             /* If a reported problem is not known then emit NEEDMORE */
             if (strcmp("true", response.value) == 0)
             {
-- 
1.7.7

Reply via email to