From ec9264385a18f6f2212b7e19f2ea34ef807ca1cd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Diego=20Elio=20Petten=C3=B2?= Date: Fri, 18 Mar 2011 19:01:53 +0100 Subject: [PATCH] In non-background execution, check whether the server reports success. The test is currently only implemented in non-OAuth codepath, and tested only with identi.ca. --- bti.c | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/bti.c b/bti.c index 147d44b..7f82879 100644 --- a/bti.c +++ b/bti.c @@ -641,11 +641,36 @@ static int send_request(struct session *session) curl_easy_setopt(curl, CURLOPT_WRITEDATA, curl_buf); if (!session->dry_run) { res = curl_easy_perform(curl); - if (res && !session->background) { - fprintf(stderr, "error(%d) trying to perform " + if (!session->background) { + if (res) { + fprintf(stderr, "error(%d) trying to perform " "operation\n", res); - return -EINVAL; - } + return -EINVAL; + } else { + xmlDocPtr doc; + xmlNodePtr current; + + doc = xmlReadMemory(curl_buf->data, curl_buf->length, + "response.xml", NULL, XML_PARSE_NOERROR); + if (doc == NULL) + return -EINVAL; + + current = xmlDocGetRootElement(doc); + if (current == NULL) { + fprintf(stderr, "empty document\n"); + xmlFreeDoc(doc); + return -EINVAL; + } + + if (xmlStrcmp(current->name, (const xmlChar *) "status")) { + fprintf(stderr, "unexpected document type\n"); + xmlFreeDoc(doc); + return -EINVAL; + } + + xmlFreeDoc(doc); + } + } } curl_easy_cleanup(curl); -- 2.39.5