From f388e5f0b159b8938e255be8562a795a2540243b Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 21 Jul 2010 11:11:33 +0100 Subject: [PATCH] Start using SoupSoapMessage. This is much nicer... --- ews_syncfolder.c | 78 +++++++++++++++++++++++++----------------------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/ews_syncfolder.c b/ews_syncfolder.c index 7e99d31..7c21cc7 100644 --- a/ews_syncfolder.c +++ b/ews_syncfolder.c @@ -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"); -- 2.49.0