26struct icalclassify_parts {
35 struct icaltimetype dtstamp;
36 struct icaltimetype recurrence_id;
53 for (p = xnew; *p != 0; p++) {
54 *p = tolower((
int)*p);
67 icalcomponent *return_set;
69 struct icaltime_span compspan;
89 if (compspan.start < span.end && compspan.end > span.start) {
107 icalcomponent *inner;
111 if (!c || !attendee) {
119 upn = strchr(lattendee,
':');
132 const char *this_upn;
135 if (!this_attendee) {
139 this_upn = strchr(this_attendee,
':');
148 if (strcmp(this_upn, upn) == 0) {
167 if (parts->organizer != 0) {
168 free(parts->organizer);
171 if (parts->uid != 0) {
175 if (parts->reply_attendee) {
176 free(parts->reply_attendee);
183 icalcomponent *inner;
185 memset(parts, 0,
sizeof(
struct icalclassify_parts));
209 if (p_organizer != 0) {
210 parts->organizer = strdup(p_organizer);
224 parts->uid = strdup(p_uid);
242 const char *attendee = 0;
250 parts->reply_attendee = strdup(attendee);
256static bool icalssutil_is_rescheduled(
const icalcomponent *a,
const icalcomponent *b)
258 icalcomponent *i1, *i2;
259 const char *temp1, *temp2;
282 if ((p1 != 0) ^ (p2 != 0)) {
286 }
else if (!p1 && !p2) {
292 cmp = strcmp(temp1, temp2);
296 if (p1 && cmp != 0) {
304#define icalclassify_pre \
307#define icalclassify_post \
311 const struct icalclassify_parts *match,
const char *user)
325 const struct icalclassify_parts *match,
const char *user)
339 const struct icalclassify_parts *match,
const char *user)
353 const struct icalclassify_parts *match,
const char *user)
367 const struct icalclassify_parts *match,
const char *user)
375 comp->sequence >= match->sequence && !icalssutil_is_rescheduled(comp->c, match->c)) {
383 const struct icalclassify_parts *match,
const char *user)
390 comp->sequence > match->sequence && icalssutil_is_rescheduled(comp->c, match->c)) {
398 const struct icalclassify_parts *match,
const char *user)
400 icalproperty *attendee;
422 const struct icalclassify_parts *match,
const char *user)
434 const struct icalclassify_parts *match,
const char *user)
445 const struct icalclassify_parts *match,
const char *user)
456 const struct icalclassify_parts *match,
const char *user)
467 const struct icalclassify_parts *match,
const char *user)
469 const icalproperty *attendee;
484 const struct icalclassify_parts *match,
const char *user)
486 const icalproperty *attendee;
500 const struct icalclassify_parts *match,
const char *user)
502 const icalproperty *attendee;
516 const struct icalclassify_parts *match,
const char *user)
518 const icalproperty *attendee;
532 const struct icalclassify_parts *match,
const char *user)
534 const icalproperty *attendee;
548 const struct icalclassify_parts *match,
const char *user)
560 const struct icalclassify_parts *match,
const char *user)
571 const struct icalclassify_parts *match,
const char *user)
582 const struct icalclassify_parts *match,
const char *user)
593 const struct icalclassify_parts *match,
const char *user)
604 const struct icalclassify_parts *match,
const char *user)
615 const struct icalclassify_parts *match,
const char *user)
627static const struct icalclassify_map {
629 int (*fn)(
const struct icalclassify_parts *comp,
const struct icalclassify_parts *match,
632} icalclassify_map[] = {
660 const icalcomponent *inner;
667 struct icalclassify_parts comp_parts;
668 struct icalclassify_parts match_parts;
684 if (comp_parts.sequence < match_parts.sequence &&
691 if ((comp_parts.sequence < match_parts.sequence) ||
692 (comp_parts.sequence == match_parts.sequence &&
707 if (icalclassify_map[i].method == method) {
708 if ((*(icalclassify_map[i].fn))(&comp_parts, &match_parts, user) == 1) {
709 class = icalclassify_map[i].class;
icalcomponent * icalclassify_find_overlaps(icalset *set, icalcomponent *comp)
int icalclassify_reply_accept(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
icalproperty_xlicclass icalclassify(icalcomponent *c, icalcomponent *match, const char *user)
int icalclassify_add_instance(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_reply_crasher_decline(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_request_freebusy(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_cancel_instance(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_request_forward(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
icalproperty * icalclassify_find_attendee(const icalcomponent *c, const char *attendee)
int icalclassify_counter(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_request_new_organizer(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_publish_freebusy(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_cancel_all(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_refesh(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
void icalssutil_get_parts(icalcomponent *c, struct icalclassify_parts *parts)
char * icalclassify_lowercase(const char *str)
int icalclassify_delinecounter(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_publish_new(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
#define icalclassify_post
int icalclassify_request_status(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_request_delegate(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_reply_decline(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_reply_crasher_accept(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
void icalssutil_free_parts(struct icalclassify_parts *parts)
int icalclassify_reply_delegate(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_request_update(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_publish_update(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_request_reschedule(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_cancel_event(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
int icalclassify_request_new(const struct icalclassify_parts *comp, const struct icalclassify_parts *match, const char *user)
Defines functions for classification.
icalproperty * icalcomponent_get_first_property(icalcomponent *c, icalproperty_kind kind)
icalcomponent * icalcomponent_new(icalcomponent_kind kind)
icaltime_span icalcomponent_get_span(icalcomponent *comp)
icalcomponent * icalcomponent_get_first_real_component(const icalcomponent *c)
icalcomponent * icalcomponent_clone(const icalcomponent *old)
icalcomponent_kind icalcomponent_isa(const icalcomponent *component)
void icalcomponent_free(icalcomponent *c)
void icalcomponent_add_component(icalcomponent *parent, icalcomponent *child)
icalproperty * icalcomponent_get_next_property(icalcomponent *c, icalproperty_kind kind)
int icalcomponent_count_components(icalcomponent *component, icalcomponent_kind kind)
@ ICAL_PARTSTAT_PARAMETER
@ ICAL_DELEGATEDFROM_PARAMETER
@ ICAL_PARTSTAT_DELEGATED
struct icalparameter_impl icalparameter
icalparameter_partstat icalparameter_get_partstat(const icalparameter *value)
const char * icalproperty_get_uid(const icalproperty *prop)
int icalproperty_get_sequence(const icalproperty *prop)
struct icaltimetype icalproperty_get_dtstamp(const icalproperty *prop)
const char * icalproperty_get_organizer(const icalproperty *prop)
struct icaltimetype icalproperty_get_recurrenceid(const icalproperty *prop)
enum icalproperty_method icalproperty_get_method(const icalproperty *prop)
const char * icalproperty_get_attendee(const icalproperty *prop)
@ ICAL_RECURRENCEID_PROPERTY
@ ICAL_ORGANIZER_PROPERTY
@ ICAL_METHOD_DECLINECOUNTER
@ ICAL_XLICCLASS_REQUESTNEWORGANIZER
@ ICAL_XLICCLASS_REQUESTRESCHEDULE
@ ICAL_XLICCLASS_PUBLISHFREEBUSY
@ ICAL_XLICCLASS_OBSOLETE
@ ICAL_XLICCLASS_CANCELINSTANCE
@ ICAL_XLICCLASS_REPLYDECLINE
@ ICAL_XLICCLASS_REQUESTUPDATE
@ ICAL_XLICCLASS_CANCELEVENT
@ ICAL_XLICCLASS_REPLYCRASHERDECLINE
@ ICAL_XLICCLASS_ADDINSTANCE
@ ICAL_XLICCLASS_MISSEQUENCED
@ ICAL_XLICCLASS_REQUESTSTATUS
@ ICAL_XLICCLASS_REQUESTDELEGATE
@ ICAL_XLICCLASS_REQUESTFREEBUSY
@ ICAL_XLICCLASS_PUBLISHUPDATE
@ ICAL_XLICCLASS_REQUESTNEW
@ ICAL_XLICCLASS_CANCELALL
@ ICAL_XLICCLASS_REPLYACCEPT
@ ICAL_XLICCLASS_DECLINECOUNTER
@ ICAL_XLICCLASS_REPLYCRASHERACCEPT
@ ICAL_XLICCLASS_PUBLISHNEW
@ ICAL_XLICCLASS_REQUESTFORWARD
@ ICAL_XLICCLASS_REPLYDELEGATE
@ ICAL_VFREEBUSY_COMPONENT
void icalerror_set_errno(icalerrorenum x)
Sets the icalerrno to a given error.
void icalerror_clear_errno(void)
Resets icalerrno to ICAL_NO_ERROR.
Error handling for libical.
@ ICAL_UNIMPLEMENTED_ERROR
#define icalerrno
Access the current icalerrno value.
void icalmemory_free_buffer(void *buf)
Releases a buffer.
Common memory management routines.
char * icalproperty_as_ical_string_r(icalproperty *prop)
icalparameter * icalproperty_get_first_parameter(icalproperty *p, icalparameter_kind kind)
icalcomponent * icalset_get_first_component(icalset *set)
icalcomponent * icalset_get_next_component(icalset *set)
bool icaltime_is_utc(const struct icaltimetype t)
int icaltime_compare(const struct icaltimetype a_in, const struct icaltimetype b_in)