int process_weeklyrecurrence(xmlNode *xml_node, struct icalrecurrencetype *ical_recur, GError **error);
int process_dailyrecurrence(xmlNode *xml_node, struct icalrecurrencetype *ical_recur, GError **error);
-int process_organizer(icalcomponent *comp, xmlNode *xml_node, GError **error);
-int process_required_attendees(icalcomponent *comp, xmlNode *xml_node, GError **error);
-int process_optional_attendees(icalcomponent *comp, xmlNode *xml_node, GError **error);
+gboolean process_organizer(icalcomponent *comp, xmlNode *xml_node, GError **error);
+gboolean process_required_attendees(icalcomponent *comp, xmlNode *xml_node, GError **error);
+gboolean process_optional_attendees(icalcomponent *comp, xmlNode *xml_node, GError **error);
gboolean process_time(icalcomponent *comp, xmlNode *xml_node, icaltimetype *ical_time, GError **error);
gboolean process_truefalse(icalcomponent *comp, xmlNode *xml_node, gboolean *val, GError **error);
gboolean process_location(icalcomponent *comp, xmlNode *xml_node, GError **error);
for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
if (xml_node->type != XML_ELEMENT_NODE)
continue;
- if (!strcmp((char *)xml_node->name, "Organizer"))
- process_organizer(comp, xml_node, error);
- else if (!strcmp((char *)xml_node->name, "RequiredAttendees"))
- process_required_attendees(comp, xml_node, error);
- else if (!strcmp((char *)xml_node->name, "OptionalAttendees"))
- process_optional_attendees(comp, xml_node, error);
- else if (!strcmp((char *)xml_node->name, "Start")) {
+ if (!strcmp((char *)xml_node->name, "Organizer")) {
+ if (!process_organizer(comp, xml_node, error))
+ goto err;
+ } else if (!strcmp((char *)xml_node->name, "RequiredAttendees")) {
+ if (!process_required_attendees(comp, xml_node, error))
+ goto err;
+ } else if (!strcmp((char *)xml_node->name, "OptionalAttendees")) {
+ if (!process_optional_attendees(comp, xml_node, error))
+ goto err;
+ } else if (!strcmp((char *)xml_node->name, "Start")) {
if (!process_time(comp, xml_node, &dtstart, error))
goto err;
} else if (!strcmp((char *)xml_node->name, "End")) {
}
-int process_mailbox(xmlNode *xml_node, const char **r_name, const char **r_email, GError **error)
+gboolean process_mailbox(xmlNode *xml_node, const char **r_name, const char **r_email, GError **error)
{
const char *type = NULL, *name = NULL, *email = NULL;
/* We seem to get EX routing for people who don't exist any more */
if (type && strcmp(type, "SMTP")) {
- if (strcmp(type, "EX"))
- fprintf(stderr, "Unknown RoutingType '%s' ('%s' '%s')\n",
- type, name, email);
- return -1;
+ g_set_error(error, EWS_ERROR,
+ strcmp(type, "EX")?EWS_ERROR_ROUTING_UNKNOWN:EWS_ERROR_ROUTING_EX,
+ "Unknown RoutingType '%s' for '%s' ('%s')",
+ type, email, name);
+ return FALSE;
}
*r_name = name;
*r_email = email;
- return 0;
+ return TRUE;
}
-int process_organizer(icalcomponent *comp, xmlNode *xml_node, GError **error)
+gboolean process_organizer(icalcomponent *comp, xmlNode *xml_node, GError **error)
{
icalproperty *prop;
icalparameter *param;
if (!strcmp((char *)xml_node->name, "Mailbox")) {
const char *name = NULL, *email = NULL;
char *mailtoname;
- if (process_mailbox(xml_node, &name, &email, error))
- return -1;
+ if (!process_mailbox(xml_node, &name, &email, error))
+ return FALSE;
mailtoname = g_strdup_printf("mailto:%s", email);
prop = icalproperty_new_organizer(mailtoname);
- free(mailtoname);
+ g_free(mailtoname);
param = icalparameter_new_cn(name);
icalproperty_add_parameter(prop, param);
icalcomponent_add_property(comp, prop);
+ return TRUE;
}
}
- return 0;
+ g_set_error(error, EWS_ERROR, EWS_ERROR_PARSE,
+ "No <Mailbox> element in <Organizer>");
+ return FALSE;
}
-int process_attendee(icalcomponent *comp, xmlNode *xml_node, icalparameter_role role, GError **error)
+gboolean process_attendee(icalcomponent *comp, xmlNode *xml_node, icalparameter_role role, GError **error)
{
icalproperty *prop;
icalparameter *param;
if (xml_node->type != XML_ELEMENT_NODE)
continue;
if (!strcmp((char *)xml_node->name, "Mailbox")) {
+ GError *local_error = NULL;
const char *name = NULL, *email = NULL;
char *mailtoname;
- if (process_mailbox(xml_node, &name, &email, error))
- return -1;
+ if (!process_mailbox(xml_node, &name, &email, &local_error)) {
+ /* Warn, but don't fail */
+ g_warning(local_error->message);
+ g_clear_error(&local_error);
+ return TRUE;
+ }
mailtoname = g_strdup_printf("mailto:%s", email);
prop = icalproperty_new_attendee(mailtoname);
- free(mailtoname);
+ g_free(mailtoname);
param = icalparameter_new_cn(name);
icalproperty_add_parameter(prop, param);
param = icalparameter_new_role(role);
icalproperty_add_parameter(prop, param);
icalcomponent_add_property(comp, prop);
+ return TRUE;
}
}
- return 0;
+ g_set_error(error, EWS_ERROR, EWS_ERROR_PARSE,
+ "No <Mailbox> element in <Attendee>");
+ return FALSE;
}
-int process_required_attendees(icalcomponent *comp, xmlNode *xml_node, GError **error)
+gboolean process_required_attendees(icalcomponent *comp, xmlNode *xml_node, GError **error)
{
for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
if (xml_node->type != XML_ELEMENT_NODE)
continue;
if (!strcmp((char *)xml_node->name, "Attendee")) {
- if (process_attendee(comp, xml_node,
- ICAL_ROLE_REQPARTICIPANT, error))
- { }
+ if (!process_attendee(comp, xml_node,
+ ICAL_ROLE_REQPARTICIPANT, error))
+ return FALSE;
}
}
- return 0;
+ return TRUE;
}
-int process_optional_attendees(icalcomponent *comp, xmlNode *xml_node, GError **error)
+gboolean process_optional_attendees(icalcomponent *comp, xmlNode *xml_node, GError **error)
{
for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
if (xml_node->type != XML_ELEMENT_NODE)
continue;
if (!strcmp((char *)xml_node->name, "Attendee")) {
- if (process_attendee(comp, xml_node,
+ if (!process_attendee(comp, xml_node,
ICAL_ROLE_OPTPARTICIPANT, error))
- { }
+ return FALSE;
}
}
- return 0;
+ return TRUE;
}
gboolean process_time(icalcomponent *comp, xmlNode *xml_node, icaltimetype *ical_time, GError **error)