void sipe_ocs2005_presence_publish(struct sipe_core_private *sipe_private, gboolean do_publish_calendar) { send_presence_soap(sipe_private, do_publish_calendar, FALSE); }
void sipe_ocs2005_reset_status(struct sipe_core_private *sipe_private) { send_presence_soap(sipe_private, FALSE, TRUE); }
static void sipe_domino_process_calendar_response(int return_code, const char *body, const char *content_type, HttpConn *conn, void *data) { struct sipe_calendar *cal = data; SIPE_DEBUG_INFO_NOFORMAT("sipe_domino_process_calendar_response: cb started."); http_conn_set_close(conn); cal->http_conn = NULL; if (content_type && !g_str_has_prefix(content_type, "text/xml")) { cal->is_domino_disabled = TRUE; SIPE_DEBUG_INFO_NOFORMAT("sipe_domino_process_calendar_response: not XML, disabling."); return; } if (return_code == 200 && body) { struct sipe_core_private *sipe_private = cal->sipe_private; const sipe_xml *node, *node2, *node3; sipe_xml *xml; SIPE_DEBUG_INFO("sipe_domino_process_calendar_response: SUCCESS, ret=%d", return_code); xml = sipe_xml_parse(body, strlen(body)); sipe_cal_events_free(cal->cal_events); cal->cal_events = NULL; /* viewentry */ for (node = sipe_xml_child(xml, "viewentry"); node; node = sipe_xml_twin(node)) { struct sipe_cal_event *cal_event = g_new0(struct sipe_cal_event, 1); cal->cal_events = g_slist_append(cal->cal_events, cal_event); cal_event->cal_status = SIPE_CAL_BUSY; cal_event->is_meeting = TRUE; /* SIPE_DEBUG_INFO("viewentry unid=%s", sipe_xml_attribute(node, "unid")); */ /* entrydata */ for (node2 = sipe_xml_child(node, "entrydata"); node2; node2 = sipe_xml_twin(node2)) { const char *name = sipe_xml_attribute(node2, "name"); SIPE_DEBUG_INFO("\tentrydata name=%s", name); if (sipe_strequal(name, VIEWENTITY_START0_TIME) || sipe_strequal(name, VIEWENTITY_START_TIME) || sipe_strequal(name, VIEWENTITY_END_TIME)) { char *tmp = sipe_xml_data(sipe_xml_child(node2, "datetime")); time_t time_val = sipe_utils_str_to_time(tmp); if (sipe_strequal(name, VIEWENTITY_START_TIME)) { cal_event->start_time = time_val; } else if (sipe_strequal(name, VIEWENTITY_END_TIME)) { cal_event->end_time = time_val; } SIPE_DEBUG_INFO("\t\tdatetime=%s", asctime(gmtime(&time_val))); g_free(tmp); } else if (sipe_strequal(name, VIEWENTITY_TEXT_LIST)) { int i = 0; /* test */ for (node3 = sipe_xml_child(node2, "textlist/text"); node3; node3 = sipe_xml_twin(node3)) { char *tmp = sipe_xml_data(node3); if (!tmp) continue; SIPE_DEBUG_INFO("\t\ttext=%s", tmp); if (i == 0) { cal_event->subject = g_strdup(tmp); SIPE_DEBUG_INFO("\t\t*Subj.=%s", tmp); } else { /* plain English, don't localize! */ if (!g_ascii_strncasecmp(tmp, "Location:", 9)) { if (strlen(tmp) > 9) { cal_event->location = g_strdup(g_strstrip(tmp+9)); SIPE_DEBUG_INFO("\t\t*Loc.=%s", cal_event->location); } /* Translators: (!) should be as in localized Lotus Notes to be able to extract meeting location */ } else if (g_str_has_prefix(tmp, _("Location:"))) { guint len = strlen(_("Location:")); if (strlen(tmp) > len) { cal_event->location = g_strdup(g_strstrip(tmp+len)); SIPE_DEBUG_INFO("\t\t*Loc.=%s", cal_event->location); } } } i++; g_free(tmp); } } } } sipe_xml_free(xml); /* creates FreeBusy from cal->cal_events */ g_free(cal->free_busy); cal->free_busy = sipe_domino_get_free_busy(cal->fb_start, cal->cal_events); /* update SIP server */ cal->is_updated = TRUE; if (SIPE_CORE_PRIVATE_FLAG_IS(OCS2007)) { /* sipe.h */ publish_calendar_status_self(sipe_private, NULL); } else { /* sipe.h */ send_presence_soap(sipe_private, TRUE); } } else if (return_code < 0) {