static SoupXmlrpcValue *_soup_get_xmlrpc_value(SoupMessage * msg, SyncNetAction * sna) { SoupXmlrpcResponse *response = NULL; SoupXmlrpcValue *value = NULL; sna->error = NULL; if (!SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) { SNA_ERROR(1, "%s (error #%d)", msg->reason_phrase, msg->status_code); goto bad; } response = soup_xmlrpc_message_parse_response(SOUP_XMLRPC_MESSAGE(msg)); if (!response) { SNA_ERROR(2, "Could not parse XML-RPC response"); goto bad; } value = soup_xmlrpc_response_get_value(response); if (!value) { SNA_ERROR(3, "No response value in XML-RPC response"); } /*g_object_unref(response); */ bad: return value; }
static gchar *_soup_get_xmlrpc_value_string(SoupMessage * msg, SyncNetAction * sna) { SoupXmlrpcValue *value; gchar *string = NULL; value = _soup_get_xmlrpc_value(msg, sna); if (!value) { SNA_ERROR(4, "Could not extract result from XML-RPC response"); goto bad; } if (!soup_xmlrpc_value_get_string(value, &string)) { SNA_ERROR(4, "Could not extract result from XML-RPC response"); } bad: return string; }
static long _soup_get_xmlrpc_value_int(SoupMessage * msg, SyncNetAction * sna) { SoupXmlrpcValue *value; long int_value = -1; value = _soup_get_xmlrpc_value(msg, sna); if (!value) { SNA_ERROR(4, "Could not extract result from XML-RPC response"); goto bad; } if (!soup_xmlrpc_value_get_int(value, &int_value)) { SNA_ERROR(4, "Could not extract result from XML-RPC response"); } bad: return int_value; }
static void _action_check_api_version_got_response(SoupMessage * msg, gpointer user_data) { SyncNetAction *sna = (SyncNetAction *) user_data; long version = _soup_get_xmlrpc_value_int(msg, sna); if (version != XMLRPC_SERVER_API_VERSION) { SNA_ERROR(5, "Server says it supports API version %ld, but " "this version of HardInfo only supports API " "version %d.", version, XMLRPC_SERVER_API_VERSION); } g_main_quit(loop); }
static gchar *_soup_get_xmlrpc_value_string(SoupMessage * msg, SyncNetAction * sna) { gchar *string = NULL; sna->error = NULL; if (!SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) { SNA_ERROR(1, "%s (error #%d)", msg->reason_phrase, msg->status_code); goto bad; } if (!soup_xmlrpc_extract_method_response(msg->response_body->data, msg->response_body->length, NULL, G_TYPE_STRING, &string)) { SNA_ERROR(2, "Could not parse XML-RPC response"); } bad: return string; }