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;
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));
210 if (p_organizer != 0) {
211 parts->organizer = strdup(p_organizer);
225 parts->uid = strdup(p_uid);
243 const char *attendee = 0;
251 parts->reply_attendee = strdup(attendee);
257static bool icalssutil_is_rescheduled(
const icalcomponent *a,
const icalcomponent *b)
259 icalcomponent *i1, *i2;
260 const char *temp1, *temp2;
283 if ((p1 != 0) ^ (p2 != 0)) {
287 }
else if (!p1 && !p2) {
293 cmp = strcmp(temp1, temp2);
297 if (p1 && cmp != 0) {
305#define icalclassify_pre \
308#define icalclassify_post \
312 const struct icalclassify_parts *match,
const char *user)
326 const struct icalclassify_parts *match,
const char *user)
340 const struct icalclassify_parts *match,
const char *user)
354 const struct icalclassify_parts *match,
const char *user)
368 const struct icalclassify_parts *match,
const char *user)
376 comp->sequence >= match->sequence && !icalssutil_is_rescheduled(comp->c, match->c)) {
384 const struct icalclassify_parts *match,
const char *user)
391 comp->sequence > match->sequence && icalssutil_is_rescheduled(comp->c, match->c)) {
399 const struct icalclassify_parts *match,
const char *user)
401 icalproperty *attendee;
423 const struct icalclassify_parts *match,
const char *user)
435 const struct icalclassify_parts *match,
const char *user)
446 const struct icalclassify_parts *match,
const char *user)
457 const struct icalclassify_parts *match,
const char *user)
468 const struct icalclassify_parts *match,
const char *user)
470 const icalproperty *attendee;
485 const struct icalclassify_parts *match,
const char *user)
487 const icalproperty *attendee;
501 const struct icalclassify_parts *match,
const char *user)
503 const icalproperty *attendee;
517 const struct icalclassify_parts *match,
const char *user)
519 const icalproperty *attendee;
533 const struct icalclassify_parts *match,
const char *user)
535 const icalproperty *attendee;
549 const struct icalclassify_parts *match,
const char *user)
561 const struct icalclassify_parts *match,
const char *user)
572 const struct icalclassify_parts *match,
const char *user)
583 const struct icalclassify_parts *match,
const char *user)
594 const struct icalclassify_parts *match,
const char *user)
605 const struct icalclassify_parts *match,
const char *user)
616 const struct icalclassify_parts *match,
const char *user)
628static const struct icalclassify_map {
630 int (*fn)(
const struct icalclassify_parts *comp,
const struct icalclassify_parts *match,
633} icalclassify_map[] = {
661 const icalcomponent *inner;
668 struct icalclassify_parts comp_parts;
669 struct icalclassify_parts match_parts;
685 if (comp_parts.sequence < match_parts.sequence &&
692 if ((comp_parts.sequence < match_parts.sequence) ||
693 (comp_parts.sequence == match_parts.sequence &&
708 if (icalclassify_map[i].method == method) {
709 if ((*(icalclassify_map[i].fn))(&comp_parts, &match_parts, user) == 1) {
710 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)