/*- * $Id$ * * See the file LICENSE for redistribution information. * * Copyright (c) 2002 Andrea Campi */ #include "config.h" #ifdef HAVE_STRING_H #include #endif #include "icalcap.h" #define CONTENT_TYPE "Content-Type: text/calendar" icalcomponent * icalcap_component_new_from_string(const char *data) { icalcomponent *ret = NULL; char *mtype; /* FIXME split the check */ if (strncmp(data, CONTENT_TYPE, strlen(CONTENT_TYPE))) { return NULL; } mtype = (char *)data+strlen(CONTENT_TYPE); ret = icalcomponent_new_from_string(mtype); if (ret == NULL) { return NULL; } #ifdef DEBUG g_message("icalcap_component_new_from_string icalcomponent_new_from_string = %p", ret); #endif /* FIXME * Validate here: should check at least the version */ if (icalcomponent_isa(ret) != ICAL_VCALENDAR_COMPONENT && icalcomponent_isa(ret) != ICAL_XROOT_COMPONENT) { icalcomponent_free(ret); return NULL; } return ret; } #if 0 RRCAPCmdArgs * msg_parse(RRCAP *cap, icalcomponent *comp) { icalproperty *prop; icalparameter *param; icalvalue *value; RRCAPCmdArgs *ret = g_new0(RRCAPCmdArgs, 1); ret->comp = comp; /* Find the command */ if ((prop = icalcomponent_get_first_property(comp, ICAL_CMD_PROPERTY)) == NULL) { rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, "No CMD sent", NULL); goto FAILED; } if ((value = icalproperty_get_value(prop)) == NULL) { rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, "CMD has no value", icalproperty_as_ical_string(prop)); goto FAILED; } ret->cmd = icalvalue_get_cmd(value); /* Look for params */ /* ID */ if ((param = icalproperty_get_first_parameter(prop, ICAL_ID_PARAMETER)) != NULL) { if ((ret->id = icalparameter_get_id(param)) == NULL) { rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, "ID param is garbled", icalproperty_as_ical_string(prop)); goto FAILED; } } /* LATENCY */ if ((param = icalproperty_get_first_parameter(prop, ICAL_LATENCY_PARAMETER)) != NULL) { const char *tmp; if ((tmp = icalparameter_get_latency(param)) == NULL) { rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, "LATENCY is garbled", icalproperty_as_ical_string(prop)); goto FAILED; } ret->latency = atoi(tmp); } /* ACTION */ if ((param = icalproperty_get_first_parameter(prop, ICAL_ACTIONPARAM_PARAMETER)) != NULL) { if ((ret->action = icalparameter_get_actionparam(param)) == NULL) { rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, "ACTION is garbled", icalproperty_as_ical_string(prop)); goto FAILED; } } if ((ret->latency >= 0) ^ (ret->action != ICAL_ACTIONPARAM_NONE)) { rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, "LATENCY and ACTION must be both present", icalproperty_as_ical_string(prop)); goto FAILED; } return ret; FAILED: g_free(ret); return NULL; } #endif