From: Diego Elio Pettenò Date: Fri, 18 Mar 2011 18:01:53 +0000 (+0100) Subject: In non-background execution, check whether the server reports success. X-Git-Url: https://git.toastfreeware.priv.at/gregoa/bti.git/commitdiff_plain/ec9264385a18f6f2212b7e19f2ea34ef807ca1cd 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. --- 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);