In non-background execution, check whether the server reports success.
authorDiego Elio Pettenò <flameeyes@gmail.com>
Fri, 18 Mar 2011 18:01:53 +0000 (19:01 +0100)
committerDiego Elio Pettenò <flameeyes@gmail.com>
Fri, 18 Mar 2011 18:01:53 +0000 (19:01 +0100)
The test is currently only implemented in non-OAuth codepath, and tested
only with identi.ca.

bti.c

diff --git a/bti.c b/bti.c
index 147d44b..7f82879 100644 (file)
--- 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);