aboutsummaryrefslogblamecommitdiffstats
path: root/libical/src/libicalcap/icalcap_utils.c
blob: b676f6272dbfbce6b5fc96fefe0a65ee28e0a4ae (plain) (tree)





































































































































                                                                                               
/*-
 * $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