security: accept NULL domain for NTLM
[siplcs.git] / src / core / sipe-cal.h
blob3e13829ffb4df996a7e2d968a6fa4378898e716d
1 /**
2 * @file sipe-cal.h
4 * pidgin-sipe
6 * Copyright (C) 2010-2013 SIPE Project <http://sipe.sourceforge.net/>
7 * Copyright (C) 2009 pier11 <pier11@operamail.com>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 /* Forward declarations */
25 struct sipe_buddy;
26 struct sipe_core_private;
27 struct sipe_http_request;
28 struct sipe_http_session;
29 struct _sipe_xml;
31 /* Calendar statuses */
32 #define SIPE_CAL_FREE 0
33 #define SIPE_CAL_TENTATIVE 1
34 #define SIPE_CAL_BUSY 2
35 #define SIPE_CAL_OOF 3
36 #define SIPE_CAL_NO_DATA 4
38 /* Default granularity of FreeBusy data is 15 minutes */
39 #define SIPE_FREE_BUSY_GRANULARITY_SEC (15*60)
40 /* FreeBusy stream duration in seconds. Defaults to 4 days */
41 #define SIPE_FREE_BUSY_PERIOD_SEC (4*(24*60*60))
43 struct sipe_cal_event {
44 time_t start_time;
45 time_t end_time;
46 /* SIPE_CAL_* */
47 int cal_status;
48 char *subject;
49 char *location;
50 int is_meeting;
53 /** For extracting our Calendar information from
54 * external sources like Exchange, Lotus Domino.
56 struct sipe_calendar {
57 struct sipe_core_private *sipe_private;
59 int state;
60 char *email;
61 char *legacy_dn;
62 int auto_disco_method;
63 int is_ews_disabled;
64 int is_domino_disabled;
65 int is_updated;
66 gboolean retry;
68 char *as_url;
69 char *oof_url;
70 char *oab_url;
71 char *domino_url;
73 char *oof_state; /* Enabled, Disabled, Scheduled */
74 char *oof_note;
75 time_t oof_start;
76 time_t oof_end;
77 time_t updated;
78 gboolean published;
80 struct sipe_http_session *session;
81 struct sipe_http_request *request;
82 gchar *auth_domain;
83 gchar *auth_user; /* NULL -> use default authentication */
84 gchar *password;
86 time_t fb_start;
87 /* hex form */
88 char *free_busy;
89 char *working_hours_xml_str;
90 GSList *cal_events;
93 void
94 sipe_cal_event_free(struct sipe_cal_event* cal_event);
96 void
97 sipe_cal_events_free(GSList *cal_events);
99 void
100 sipe_cal_calendar_free(struct sipe_calendar *cal);
102 gboolean
103 sipe_cal_calendar_init(struct sipe_core_private *sipe_private,
104 gboolean *has_url);
107 * Returns hash of Calendar Event for comparison.
109 * Must be g_free()'d after use.
111 char *
112 sipe_cal_event_hash(struct sipe_cal_event* event);
115 * Describes Calendar event in human readable form.
117 * Must be g_free()'d after use.
119 char *
120 sipe_cal_event_describe(struct sipe_cal_event* cal_event);
123 * Converts struct tm to Epoch time_t considering timezone.
125 * @param tz as defined for TZ environment variable.
127 * Reference: see timegm(3) - Linux man page
129 time_t
130 sipe_mktime_tz(struct tm *tm,
131 const char* tz);
134 * Converts hex representation of freebusy string as
135 * returned by Exchange Web Services to
136 * condenced and base64 encoded form
138 * Must be g_free()'d after use.
140 char *
141 sipe_cal_get_freebusy_base64(const char* freebusy_hex);
143 /** Contains buddy's working hours information */
144 struct sipe_cal_working_hours;
147 * Parses Working Hours from passed XML piece
148 * and creates/fills struct sipe_cal_working_hours in struct sipe_buddy
150 void
151 sipe_cal_parse_working_hours(const struct _sipe_xml *xn_working_hours,
152 struct sipe_buddy *buddy);
155 * Frees struct sipe_cal_working_hours
157 void
158 sipe_cal_free_working_hours(struct sipe_cal_working_hours *wh);
161 * Returns user calendar information in text form.
162 * Example: "Currently Busy. Free at 13:00"
164 char *
165 sipe_cal_get_description(struct sipe_buddy *buddy);
168 * Returns calendar status SIPE_CAL_* at time specified.
169 * Returns SIPE_CAL_NO_DATA if no calendar data availible.
171 * @param since (out) Returns beginning time of the status.
174 sipe_cal_get_status(struct sipe_buddy *buddy,
175 time_t time_in_question,
176 time_t *since);
179 * Returns calendar event at time in question.
180 * If conflict, takes last event in the following
181 * priority order: OOF, Busy, Tentative.
183 struct sipe_cal_event*
184 sipe_cal_get_event(GSList *cal_events,
185 time_t time_in_question);
188 * Publish presence information
190 void sipe_cal_presence_publish(struct sipe_core_private *sipe_private,
191 gboolean do_publish_calendar);
194 * Schedule calendar update
196 void sipe_cal_delayed_calendar_update(struct sipe_core_private *sipe_private);
199 * Set authentication for HTTP request
201 void sipe_cal_http_authentication(struct sipe_calendar *cal);