---
 src/plugins/ureport.c |   79 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 79 insertions(+), 0 deletions(-)

diff --git a/src/plugins/ureport.c b/src/plugins/ureport.c
index 96c7878..b48cabb 100644
--- a/src/plugins/ureport.c
+++ b/src/plugins/ureport.c
@@ -58,8 +58,69 @@ struct ureport_server_response {
     const char *value;
     const char *message;
     const char *bthash;
+    GList *reported_to_list;
 };
 
+/* reported_to json element should be a list of structures
+{ "reporter": "Bugzilla",
+  "type": "url",
+  "value": "https://bugzilla.redhat.com/show_bug.cgi?id=XYZ"; } */
+static GList *parse_reported_to_from_json_list(struct json_object *list)
+{
+    int i;
+    json_object *list_elem, *struct_elem;
+    const char *reporter, *value, *type;
+    char *reported_to_line, *prefix;
+    GList *result = NULL;
+
+    for (i = 0; i < json_object_array_length(list); ++i)
+    {
+        prefix = NULL;
+        list_elem = json_object_array_get_idx(list, i);
+        if (!list_elem)
+            continue;
+
+        struct_elem = json_object_object_get(list_elem, "reporter");
+        if (!struct_elem)
+            continue;
+
+        reporter = json_object_get_string(struct_elem);
+        if (!reporter)
+            continue;
+
+        struct_elem = json_object_object_get(list_elem, "value");
+        if (!struct_elem)
+            continue;
+
+        value = json_object_get_string(struct_elem);
+        if (!value)
+            continue;
+
+        struct_elem = json_object_object_get(list_elem, "type");
+        if (!struct_elem)
+            continue;
+
+        type = json_object_get_string(struct_elem);
+        if (type)
+        {
+            if (strcasecmp("url", type) == 0)
+                prefix = xstrdup("URL=");
+            else if (strcasecmp("bthash", type) == 0)
+                prefix = xstrdup("BTHASH=");
+        }
+
+        if (!prefix)
+            prefix = xstrdup("");
+
+        reported_to_line = xasprintf("%s: %s%s", reporter, prefix, value);
+        free(prefix);
+
+        result = g_list_append(result, reported_to_line);
+    }
+
+    return result;
+}
+
 /*
  * Reponse samples:
  * {"error":"field 'foo' is required"}
@@ -92,6 +153,10 @@ static bool ureport_server_parse_json(json_object *json, 
struct ureport_server_r
         if (bthash)
             out_response->bthash = json_object_get_string(bthash);
 
+        json_object *reported_to_list = json_object_object_get(json, 
"reported_to");
+        if (reported_to_list)
+            out_response->reported_to_list = 
parse_reported_to_from_json_list(reported_to_list);
+
         return true;
     }
 
@@ -276,6 +341,20 @@ int main(int argc, char **argv)
                 char *msg = xasprintf("uReport: BTHASH=%s", response.bthash);
                 add_reported_to(dd, msg);
                 free(msg);
+
+                if (response.reported_to_list)
+                {
+                    GList *elem = response.reported_to_list;
+                    while (elem)
+                    {
+                        add_reported_to(dd, elem->data);
+                        free(elem->data);
+                        elem = g_list_next(elem);
+                    }
+
+                    g_list_free(response.reported_to_list);
+                }
+
                 dd_close(dd);
             }
 
-- 
1.7.1

Reply via email to