diff options
author | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-07-18 20:41:42 +0100 |
---|---|---|
committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-07-18 20:41:42 +0100 |
commit | 5bb10cf303762530d847b2d9879e6b0fdf32603f (patch) | |
tree | 028b559e572d030bf98c541306819c4248985576 /src/libicalcap/icalcap_utils.c | |
download | libical-5bb10cf303762530d847b2d9879e6b0fdf32603f.tar.gz |
Tarball conversion
Diffstat (limited to 'src/libicalcap/icalcap_utils.c')
-rw-r--r-- | src/libicalcap/icalcap_utils.c | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/src/libicalcap/icalcap_utils.c b/src/libicalcap/icalcap_utils.c new file mode 100644 index 0000000..7308f8f --- /dev/null +++ b/src/libicalcap/icalcap_utils.c @@ -0,0 +1,145 @@ +/*- + * $Id: icalcap_utils.c,v 1.3 2008-01-02 20:07:38 dothebart Exp $ + * + * 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); + char *str; + + 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) { + str = icalproperty_as_ical_string_r(prop); + rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, + "CMD has no value", str); + free(str); + 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) { + str = icalproperty_as_ical_string_r(prop); + rr_cap_send_error(cap, NULL, + ICAL_9_0_UNRECOGNIZED_COMMAND, + "ID param is garbled", + str); + free(str); + goto FAILED; + } + } + + /* LATENCY */ + if ((param = icalproperty_get_first_parameter(prop, + ICAL_LATENCY_PARAMETER)) != NULL) { + const char *tmp; + if ((tmp = icalparameter_get_latency(param)) == NULL) { + str = icalproperty_as_ical_string_r(prop); + rr_cap_send_error(cap, NULL, + ICAL_9_0_UNRECOGNIZED_COMMAND, + "LATENCY is garbled", + str); + free(str); + 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) { + str = icalproperty_as_ical_string_r(prop); + rr_cap_send_error(cap, NULL, + ICAL_9_0_UNRECOGNIZED_COMMAND, + "ACTION is garbled", + str); + free(str); + goto FAILED; + } + } + + if ((ret->latency >= 0) ^ (ret->action != ICAL_ACTIONPARAM_NONE)) { + str = icalproperty_as_ical_string_r(prop); + rr_cap_send_error(cap, NULL, ICAL_9_0_UNRECOGNIZED_COMMAND, + "LATENCY and ACTION must be both present", + str); + free(str); + goto FAILED; + } + + return ret; + +FAILED: + g_free(ret); + return NULL; +} +#endif |