1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3 * Copyright (C) 2001-2003, Ximian, Inc.
15 #include <libsoup/soup.h>
17 static GMainLoop *loop;
20 print_value (GValue *value)
22 if (G_VALUE_HOLDS_STRING (value))
23 printf ("%s", g_value_get_string (value));
24 else if (G_VALUE_HOLDS_INT (value))
25 printf ("%d", g_value_get_int (value));
26 else if (G_VALUE_HOLDS_DOUBLE (value))
27 printf ("%f", g_value_get_double (value));
28 else if (G_VALUE_TYPE (value) == G_TYPE_VALUE_ARRAY) {
29 GValueArray *array = g_value_get_boxed (value);
32 for (i = 0; i < array->n_values; i++) {
35 print_value (&array->values[i]);
39 printf ("(%s)", g_type_name (G_VALUE_TYPE (value)));
43 print_struct_field (gpointer key, gpointer value, gpointer data)
45 printf ("%s: ", (char *)key);
51 got_response (SoupSession *session, SoupMessage *msg, gpointer user_data)
56 if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
57 fprintf (stderr, "%d %s\n", msg->status_code, msg->reason_phrase);
61 if (!soup_xmlrpc_extract_method_response (msg->response_body->data,
62 msg->response_body->length,
64 G_TYPE_HASH_TABLE, &hash)) {
66 fprintf (stderr, "Could not parse XMLRPC response:\n%d %s\n\n",
67 msg->status_code, msg->reason_phrase);
68 fprintf (stderr, "%s\n", msg->response_body->data);
70 fprintf (stderr, "XML-RPC error: %d %s",
71 error->code, error->message);
76 g_hash_table_foreach (hash, print_struct_field, NULL);
77 g_hash_table_destroy (hash);
79 g_main_loop_quit (loop);
85 fprintf (stderr, "Usage: getbug [-p proxy_uri] [bugzilla-uri] bug-number\n");
90 main (int argc, char **argv)
93 SoupURI *proxy = NULL;
95 const char *uri = "http://bugzilla.redhat.com/bugzilla/xmlrpc.cgi";
101 while ((opt = getopt (argc, argv, "p:")) != -1) {
104 proxy = soup_uri_new (optarg);
106 fprintf (stderr, "Could not parse %s as URI\n",
126 if (argc != 1 || (bug = atoi (argv[0])) == 0)
129 session = soup_session_async_new_with_options (
130 SOUP_SESSION_PROXY_URI, proxy,
133 msg = soup_xmlrpc_request_new (uri, "bugzilla.getBug",
137 fprintf (stderr, "Could not create web service request to '%s'\n", uri);
140 soup_session_queue_message (session, SOUP_MESSAGE (msg),
143 loop = g_main_loop_new (NULL, TRUE);
144 g_main_loop_run (loop);
145 g_main_loop_unref (loop);