diff options
-rw-r--r-- | shell/syncmanager.c | 62 |
1 files changed, 37 insertions, 25 deletions
diff --git a/shell/syncmanager.c b/shell/syncmanager.c index ed8b7623..0b95e720 100644 --- a/shell/syncmanager.c +++ b/shell/syncmanager.c @@ -163,14 +163,18 @@ static gint _soup_get_xmlrpc_value_int(SoupMessage * msg, goto bad; } - if (!soup_xmlrpc_extract_method_response(msg->response_body->data, - msg->response_body->length, - NULL, - G_TYPE_INT, &int_value)) { + GVariant *value = soup_xmlrpc_parse_response(msg->response_body->data, + msg->response_body->length, + "h", NULL); + if (!value) { SNA_ERROR(2, _("Could not parse XML-RPC response")); + goto bad; } - bad: + int_value = g_variant_get_int32(value); + g_variant_unref(value); + +bad: return int_value; } @@ -187,14 +191,18 @@ static gchar *_soup_get_xmlrpc_value_string(SoupMessage * msg, goto bad; } - if (!soup_xmlrpc_extract_method_response(msg->response_body->data, - msg->response_body->length, - NULL, - G_TYPE_STRING, &string)) { + GVariant *value = soup_xmlrpc_parse_response(msg->response_body->data, + msg->response_body->length, + "s", NULL); + if (!value) { SNA_ERROR(2, _("Could not parse XML-RPC response")); + goto bad; } - bad: + string = g_strdup(g_variant_get_string(value, NULL)); + g_variant_unref(value); + +bad: return string; } @@ -205,8 +213,7 @@ static gboolean _soup_xmlrpc_call(gchar * method, SyncNetAction * sna, sna->error = NULL; - msg = soup_xmlrpc_request_new(XMLRPC_SERVER_URI, method, - G_TYPE_INVALID); + msg = soup_xmlrpc_message_new(XMLRPC_SERVER_URI, method, NULL, NULL); if (!msg) return FALSE; @@ -224,7 +231,8 @@ static gboolean _soup_xmlrpc_call_with_parameters(gchar * method, callback, ...) { SoupMessage *msg; - GValueArray *parameters; + GVariantBuilder builder; + GVariant *parameters; gchar *argument, *body; va_list ap; @@ -236,24 +244,29 @@ static gboolean _soup_xmlrpc_call_with_parameters(gchar * method, if (!msg) return FALSE; - parameters = g_value_array_new(1); + g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); va_start(ap, callback); while ((argument = va_arg(ap, gchar *))) { - soup_value_array_append(parameters, G_TYPE_STRING, argument); + g_variant_builder_add(&builder, "s", argument); DEBUG("with parameter: %s", argument); } va_end(ap); + parameters = g_variant_builder_end(&builder); + g_variant_builder_unref(&builder); - body = soup_xmlrpc_build_method_call(method, parameters->values, - parameters->n_values); - g_value_array_free(parameters); - soup_message_set_request(msg, "text/xml", - SOUP_MEMORY_TAKE, body, strlen (body)); + body = soup_xmlrpc_build_request(method, parameters, NULL); + g_variant_unref(parameters); + if (body) { + soup_message_set_request(msg, "text/xml", + SOUP_MEMORY_TAKE, body, strlen(body)); - soup_session_queue_message(session, msg, callback, sna); - g_main_run(loop); + soup_session_queue_message(session, msg, callback, sna); + g_main_run(loop); - return TRUE; + return TRUE; + } + + return FALSE; } static void _action_check_api_version_got_response(SoupSession * session, @@ -403,8 +416,7 @@ static void sync_dialog_start_sync(SyncDialog * sd) if (!session) { SoupURI *proxy = sync_manager_get_proxy(); - session = - soup_session_async_new_with_options(SOUP_SESSION_TIMEOUT, 10, + session = soup_session_new_with_options(SOUP_SESSION_TIMEOUT, 10, SOUP_SESSION_PROXY_URI, proxy, NULL); /* Crashes if we unref the proxy? O_o */ |