]> www.infradead.org Git - users/dwmw2/ews-sync.git/commitdiff
Start using SoupSoapMessage. This is much nicer...
authorDavid Woodhouse <dwmw2@infradead.org>
Wed, 21 Jul 2010 10:11:33 +0000 (11:11 +0100)
committerDavid Woodhouse <dwmw2@infradead.org>
Wed, 21 Jul 2010 10:11:33 +0000 (11:11 +0100)
ews_syncfolder.c

index 7e99d3179dea67f089f51c263182162cb863dd5e..7c21cc717e95d6013ce11ec085bbb8cc5be36d1a 100644 (file)
@@ -9,6 +9,9 @@
 
 #include "libews.h"
 
+#include "soup-soap-message.h"
+#include "soup-soap-response.h"
+
 #define ITEM_CREATE 1
 #define ITEM_DELETE 2
 #define ITEM_UPDATE 3
@@ -38,7 +41,7 @@ static void souptest_authenticate(SoupSession *sess, SoupMessage *msg,
 int main(int argc, char **argv)
 {
        SoupSession *sess;
-       SoupMessage *msg;
+       SoupSoapMessage *msg;
        xmlDoc *doc;
        xmlNode *node, *child;
        xmlNs *soap_ns, *types_ns, *messages_ns;
@@ -85,56 +88,57 @@ int main(int argc, char **argv)
                soup_session_add_feature(sess, SOUP_SESSION_FEATURE(logger));
        }
 
-       msg = soup_message_new("POST", url);
+       msg = soup_soap_message_new("POST", url, TRUE, NULL, NULL, NULL);
 
-       soup_message_headers_append (msg->request_headers,
+       soup_message_headers_append (SOUP_MESSAGE(msg)->request_headers,
                                     "User-Agent", "libews/0.1");
 
-       doc = xmlNewDoc((xmlChar *) "1.0");
-       node = xmlNewDocNode(doc, NULL, (xmlChar *)"Envelope", NULL);
-       xmlDocSetRootElement(doc, node);
-       
-       soap_ns = xmlNewNs (node, (xmlChar *)"http://schemas.xmlsoap.org/soap/envelope/",
-                           (xmlChar *)"soap");
-       xmlSetNs(node, soap_ns);
-       types_ns = xmlNewNs (node, (xmlChar *)"http://schemas.microsoft.com/exchange/services/2006/types",
-                            (xmlChar *)"types");
-       node = xmlNewChild(node, soap_ns, (xmlChar *)"Body", NULL);
-       node = xmlNewChild(node, NULL, (xmlChar *)"SyncFolderItems", NULL);
+       soup_soap_message_start_envelope(msg);
+       soup_soap_message_start_body(msg);
+       soup_soap_message_add_namespace(msg, "types", 
+                                      "http://schemas.microsoft.com/exchange/services/2006/types");
+       soup_soap_message_start_element(msg, "SyncFolderItems", NULL, NULL);
+       soup_soap_message_set_default_namespace(msg, "http://schemas.microsoft.com/exchange/services/2006/messages");
 
-       messages_ns = xmlNewNs (node, (xmlChar *)"http://schemas.microsoft.com/exchange/services/2006/messages", NULL);
-       xmlSetNs(node, messages_ns);
-       child = xmlNewChild (node, messages_ns, (xmlChar *)"ItemShape", NULL);
-       xmlNewTextChild(child, types_ns, (xmlChar *)"BaseShape", (xmlChar *)"IdOnly");
-       child = xmlNewChild (node, messages_ns, (xmlChar *)"SyncFolderId", NULL);
-       xmlNewProp(xmlNewChild(child, types_ns, (xmlChar *)"DistinguishedFolderId", NULL),
-                      (xmlChar *)"Id", (xmlChar *)"calendar");
-       if (syncstate)
-               child = xmlNewTextChild (node, messages_ns, (xmlChar *)"SyncState",
-                                        (xmlChar *)syncstate);
+       soup_soap_message_start_element(msg, "ItemShape", NULL, NULL);
 
-       child = xmlNewTextChild (node, messages_ns, (xmlChar *)"MaxChangesReturned",
-                                (xmlChar *)"5");
+       soup_soap_message_start_element(msg, "BaseShape", "types", NULL);
+       soup_soap_message_write_string(msg, "Default");
+       soup_soap_message_end_element(msg);
 
-       buf = xmlAllocOutputBuffer(NULL);
-       xmlNodeDumpOutput(buf, doc, xmlDocGetRootElement(doc), 0, 1, NULL);
-       xmlOutputBufferFlush(buf);
+       soup_soap_message_end_element(msg); /* ItemShape */
 
-       soup_message_set_request(msg, "text/xml", SOUP_MEMORY_COPY,
-                                (gchar *)buf->buffer->content,
-                                buf->buffer->use);
-                                
-       status = soup_session_send_message(sess, msg);
+       soup_soap_message_start_element(msg, "SyncFolderId", NULL, NULL);
 
-       xmlOutputBufferClose (buf);
-       xmlFreeDoc (doc);
+       soup_soap_message_start_element(msg, "DistinguishedFolderId", "types", NULL);
+       soup_soap_message_add_attribute(msg, "Id", "calendar", NULL, NULL);
+       soup_soap_message_end_element(msg);
+
+       soup_soap_message_end_element(msg); /* SyncFolderId */
+
+       if (syncstate && syncstate[0]) {
+               soup_soap_message_start_element(msg, "SyncState", NULL, NULL);
+               soup_soap_message_write_string(msg, syncstate);
+               soup_soap_message_end_element(msg);
+       }
+       soup_soap_message_start_element(msg, "MaxChangesReturned", NULL, NULL);
+       soup_soap_message_write_int(msg, 50);
+       soup_soap_message_end_element(msg);
+
+       soup_soap_message_end_element(msg); /* SyncFolderItems */
+       soup_soap_message_end_body(msg);
+       soup_soap_message_end_envelope(msg);
+
+       soup_soap_message_persist(msg);
+
+       status = soup_session_send_message(sess, SOUP_MESSAGE(msg));
 
        if (status != 200) {
                fprintf(stderr, "Unexpected response from server: %d\n", status);
                exit(1);
        }
 
-       doc = xmlReadMemory (msg->response_body->data, msg->response_body->length,
+       doc = xmlReadMemory (SOUP_MESSAGE(msg)->response_body->data, SOUP_MESSAGE(msg)->response_body->length,
                             "syncresponse.xml", NULL, 0);
        if (!doc) {
                fprintf(stderr, "Failed to parse autodiscover response XML\n");