void test_main (gint argc, gchar **argv) { const gchar *url; E2kContext *ctx; E2kHTTPStatus status; E2kResult *results; gint nresults; GByteArray *ba; E2kRules *rules; xmlDoc *doc; if (argc != 2) { fprintf (stderr, "Usage: %s URL\n", argv[0]); exit (1); } url = argv[1]; ctx = test_get_context (url); status = e2k_context_propfind (ctx, NULL, url, rules_props, G_N_ELEMENTS (rules_props), &results, &nresults); test_abort_if_http_error (status); ba = e2k_properties_get_prop (results[0].props, PR_RULES_DATA); if (!ba) { printf ("No rules\n"); goto done; } rules = e2k_rules_from_binary (ba); if (!rules) { printf ("Could not parse rules\n"); goto done; } doc = e2k_rules_to_xml (rules); if (doc) { xmlDocFormatDump (stdout, doc, TRUE); xmlFreeDoc (doc); } else printf ("Could not convert normal rules to XML\n"); e2k_rules_free (rules); e2k_results_free (results, nresults); done: test_quit (); }
/** * e2k_freebusy_new: * @ctx: an #E2kContext * @public_uri: the URI of the MAPI public folder tree * @dn: the legacy Exchange DN of a user * * Creates a new #E2kFreebusy, filled in with information from the * indicated user's published free/busy information. This uses the * public free/busy folder; the caller does not need permission to * access the @dn's Calendar. * * Note that currently, this will fail and return %NULL if the user * does not already have free/busy information stored on the server. * * Return value: the freebusy information **/ E2kFreebusy * e2k_freebusy_new (E2kContext *ctx, const char *public_uri, const char *dn) { E2kFreebusy *fb; char *uri, *time; GPtrArray *monthyears, *fbdatas; E2kHTTPStatus status; E2kResult *results; int nresults = 0, i; uri = fb_uri_for_dn (public_uri, dn); g_return_val_if_fail (uri, NULL); status = e2k_context_propfind (ctx, NULL, uri, public_freebusy_props, n_public_freebusy_props, &results, &nresults); if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status) || nresults == 0) { /* FIXME: create it */ g_free (uri); return NULL; } fb = g_new0 (E2kFreebusy, 1); fb->uri = uri; fb->dn = g_strdup (dn); fb->ctx = ctx; g_object_ref (ctx); for (i = 0; i < E2K_BUSYSTATUS_MAX; i++) fb->events[i] = g_array_new (FALSE, FALSE, sizeof (E2kFreebusyEvent)); time = e2k_properties_get_prop ( results[0].props, PR_FREEBUSY_START_RANGE); fb->start = time ? e2k_systime_to_time_t (strtol (time, NULL, 10)) : 0; time = e2k_properties_get_prop ( results[0].props, PR_FREEBUSY_END_RANGE); fb->end = time ? e2k_systime_to_time_t (strtol (time, NULL, 10)) : 0; monthyears = e2k_properties_get_prop ( results[0].props, PR_FREEBUSY_ALL_MONTHS); fbdatas = e2k_properties_get_prop ( results[0].props, PR_FREEBUSY_ALL_EVENTS); add_data_for_status (fb, monthyears, fbdatas, fb->events[E2K_BUSYSTATUS_ALL]); monthyears = e2k_properties_get_prop ( results[0].props, PR_FREEBUSY_TENTATIVE_MONTHS); fbdatas = e2k_properties_get_prop ( results[0].props, PR_FREEBUSY_TENTATIVE_EVENTS); add_data_for_status (fb, monthyears, fbdatas, fb->events[E2K_BUSYSTATUS_TENTATIVE]); monthyears = e2k_properties_get_prop ( results[0].props, PR_FREEBUSY_BUSY_MONTHS); fbdatas = e2k_properties_get_prop ( results[0].props, PR_FREEBUSY_BUSY_EVENTS); add_data_for_status (fb, monthyears, fbdatas, fb->events[E2K_BUSYSTATUS_BUSY]); monthyears = e2k_properties_get_prop ( results[0].props, PR_FREEBUSY_OOF_MONTHS); fbdatas = e2k_properties_get_prop ( results[0].props, PR_FREEBUSY_OOF_EVENTS); add_data_for_status (fb, monthyears, fbdatas, fb->events[E2K_BUSYSTATUS_OOF]); e2k_results_free (results, nresults); return fb; }