diff options
Diffstat (limited to 'libical/src/libicalcap/icalcap_utils.c')
-rw-r--r-- | libical/src/libicalcap/icalcap_utils.c | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/libical/src/libicalcap/icalcap_utils.c b/libical/src/libicalcap/icalcap_utils.c new file mode 100644 index 0000000000..b676f6272d --- /dev/null +++ b/libical/src/libicalcap/icalcap_utils.c @@ -0,0 +1,134 @@ +/*- + * $Id$ + * + * See the file LICENSE for redistribution information. + * + * Copyright (c) 2002 Andrea Campi <a.campi@inet.it> + */ + +#include "config.h" + +#ifdef HAVE_STRING_H +#include <string.h> +#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 |