aboutsummaryrefslogtreecommitdiffstats
path: root/libical/src/libicalcap/client.c
diff options
context:
space:
mode:
Diffstat (limited to 'libical/src/libicalcap/client.c')
-rw-r--r--libical/src/libicalcap/client.c187
1 files changed, 187 insertions, 0 deletions
diff --git a/libical/src/libicalcap/client.c b/libical/src/libicalcap/client.c
new file mode 100644
index 0000000000..399568ac79
--- /dev/null
+++ b/libical/src/libicalcap/client.c
@@ -0,0 +1,187 @@
+/*-
+ * $Id$
+ *
+ * See the file LICENSE for redistribution information.
+ * If you have not received a copy of the license, please contact CodeFactory
+ * by email at info@codefactory.se, or on the web at http://www.codefactory.se/
+ * You may also write to: CodeFactory AB, SE-903 47, Umeå, Sweden.
+ *
+ * Copyright (c) 2002 Jonas Borgström <jonas@codefactory.se>
+ * Copyright (c) 2002 Daniel Lundin <daniel@codefactory.se>
+ * Copyright (c) 2002 CodeFactory AB. All rights reserved.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <librr/rr.h>
+
+#include "icalcap.h"
+#include "icalcap_session.h"
+
+#define CLIENT_CAPABILITY \
+"Content-Type: text/html\n\n\
+BEGIN:VCALENDAR\n\
+VERSION:2.0\n\
+PRODIR:rrcap-client\n\
+CMD:REPLY\n\
+BEGIN:VREPLY\n\
+CAP-VERSION:1.0\n\
+PRODID:rrcap-client\n\
+QUERY-LEVEL:CAL-QL-NONE\n\
+CAR-LEVEL:CAR-FULL-NONE\n\
+DATE-MAX:99991231T235959Z\n\
+DATE-MIN:00000101T000000Z\n\
+MAX-COMPONENT-SIZE:0\n\
+COMPONENTS:VCALENDAR,VTODO,VJOURNAL,VEVENT,VCAR,\n\
+ VALARM,VFREEBUSY,VTIMEZONE,STANDARD,DAYLIGHT,VREPLY\n\
+ITIP-VERSION:2447\n\
+RECUR-ACCEPTED:TRUE\n\
+RECUR-EXPAND:TRUE\n\
+RECUR-LIMIT:0\n\
+STORES-EXPANDED:FALSE\n\
+END:VREPLY\n\
+END:VCALENDAR\n"
+
+
+icalcomponent *
+icalcap_send_cmd(const icalcap *cap, const gchar *cmd, const gchar *id, int timeout) {
+
+ icalcap_message*capmsg;
+ icalcomponent *comp, *ret = NULL;
+ icalproperty *prop;
+
+ prop = icalproperty_vanew_cmd(
+ icalproperty_string_to_enum(cmd),
+ icalparameter_new_id(id),
+ 0);
+
+ if (timeout > 0) {
+ char buf[16];
+
+ snprintf(buf, 16, "%d", timeout);
+ icalproperty_add_parameter(prop,
+ icalparameter_new_latency(buf));
+
+ icalproperty_add_parameter(prop,
+ icalparameter_new_actionparam(ICAL_ACTIONPARAM_ABORT));
+ }
+
+ comp = icalcomponent_vanew(
+ ICAL_VCALENDAR_COMPONENT,
+ icalproperty_new_version("2.0"),
+ icalproperty_new_prodid("-//I.Net spa//NONSGML//EN"),
+ prop,
+ 0);
+
+ capmsg = icalcap_message_new(cap, comp);
+ ret = icalcap_message_sync_send(capmsg, timeout);
+ icalcap_message_free(capmsg);
+ icalcomponent_free(comp);
+
+ return ret;
+}
+
+icalcomponent *
+icalcap_new_reply_component(const char *id, const icalcomponent *comp) {
+
+ if (comp == NULL)
+ return NULL;
+
+ return icalcomponent_vanew(
+ ICAL_VCALENDAR_COMPONENT,
+ icalproperty_new_version("2.0"),
+ icalproperty_new_prodid("-//I.Net spa//NONSGML//EN"),
+ icalproperty_vanew_cmd(
+ ICAL_CMD_REPLY,
+/* icalparameter_new_id(id), */
+ 0),
+ comp,
+ 0);
+}
+
+
+static int
+msg_handler(const icalcap_message *capmsg) {
+
+ icalcomponent *reply;
+
+ g_message("Got: %s", icalcomponent_as_ical_string(capmsg->comp));
+
+ /* FIXME Check it's a GET-CAPABILITY */
+
+ reply = icalcap_new_reply_component(NULL, capmsg->comp);
+ if (reply == NULL) {
+ return FALSE;
+ }
+
+ icalcomponent_add_property(reply,
+ icalproperty_new_prodid("client"));
+
+ icalcomponent_free(reply);
+ return TRUE;
+}
+
+int
+main (gint argc, gchar **argv)
+{
+ icalcap_session*conn;
+ icalcap *cap;
+ icalcomponent *comp;
+
+ int i, n;
+ int verbose = 0;
+
+ if ((conn = icalcap_session_new()) == NULL) {
+ fprintf(stderr, "Init failed\n");
+ exit(0);
+ }
+
+ if (!icalcap_session_connect(conn, "gundam.inet.it", 0)) {
+ fprintf(stderr, "Connect failed\n");
+ exit(0);
+ }
+
+ if (!icalcap_session_login(conn, "user@example.com", "user@example.com", "password")) {
+ fprintf(stderr, "Login failed\n");
+ exit(0);
+ }
+
+ if ((cap = icalcap_session_start(conn, msg_handler)) == NULL) {
+ fprintf(stderr, "Start failed\n");
+ exit(0);
+ }
+
+ if (argc > 1 && *argv[1] == '1')
+ n = 100;
+ else
+ n = 1;
+
+ for (i=0; i<n; i++) {
+ g_print("Test 1: %d\n", i);
+
+ if ((comp = icalcap_send_cmd(cap, "GET-CAPABILITY", "zero",15))
+ == NULL) {
+ fprintf(stderr, "Send failed\n");
+ exit(0);
+ }
+
+ if (verbose)
+ g_print("Got %s\n", icalcomponent_as_ical_string(comp));
+
+ if (comp)
+ icalcomponent_free(comp);
+ }
+
+ if (!icalcap_stop(cap)) {
+ fprintf(stderr, "Stop failed\n");
+ exit(0);
+ }
+
+ if (!icalcap_session_disconnect(conn)) {
+ fprintf(stderr, "Disconnect failed\n");
+ exit(0);
+ }
+
+ return 0;
+}