#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
int main(int argc, char **argv)
{
SoupSession *sess;
- SoupMessage *msg;
+ SoupSoapMessage *msg;
xmlDoc *doc;
xmlNode *node, *child;
xmlNs *soap_ns, *types_ns, *messages_ns;
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");