Example #1
0
  void ScrolledWindow::set_policy(PolicyType hpolicy, PolicyType vpolicy)throw(BadEnum)
  {
    if(!is_valid_enum_value(hpolicy))
      throw BadEnum();
    if(!is_valid_enum_value(vpolicy))
      throw BadEnum();

    _hpolicy  = hpolicy;
    _vpolicy  = vpolicy;

    recalc_size_request();
    invalidate();
  }
Example #2
0
  void ScrolledWindow::set_shadow_type(ShadowType shadow_type)throw(BadEnum)
  {
    if(!is_valid_enum_value(shadow_type))
      throw BadEnum();

    _shadow_type  = shadow_type;

    recalc_size_request();
    invalidate();
  }
Example #3
0
    void interpret_chunk() {
        switch (this->chunk_type) {
        case META_FILE:
            this->info_version                   = this->stream.in_uint16_le();
            this->info_width                     = this->stream.in_uint16_le();
            this->info_height                    = this->stream.in_uint16_le();
            this->info_bpp                       = this->stream.in_uint16_le();
            this->info_cache_0_entries           = this->stream.in_uint16_le();
            this->info_cache_0_size              = this->stream.in_uint16_le();
            this->info_cache_1_entries           = this->stream.in_uint16_le();
            this->info_cache_1_size              = this->stream.in_uint16_le();
            this->info_cache_2_entries           = this->stream.in_uint16_le();
            this->info_cache_2_size              = this->stream.in_uint16_le();

            if (this->info_version <= 3) {
                this->info_number_of_cache       = 3;
                this->info_use_waiting_list      = false;

                this->info_cache_0_persistent    = false;
                this->info_cache_1_persistent    = false;
                this->info_cache_2_persistent    = false;
            }
            else {
                this->info_number_of_cache       = this->stream.in_uint8();
                this->info_use_waiting_list      = (this->stream.in_uint8() ? true : false);

                this->info_cache_0_persistent    = (this->stream.in_uint8() ? true : false);
                this->info_cache_1_persistent    = (this->stream.in_uint8() ? true : false);
                this->info_cache_2_persistent    = (this->stream.in_uint8() ? true : false);

                this->info_cache_3_entries       = this->stream.in_uint16_le();
                this->info_cache_3_size          = this->stream.in_uint16_le();
                this->info_cache_3_persistent    = (this->stream.in_uint8() ? true : false);

                this->info_cache_4_entries       = this->stream.in_uint16_le();
                this->info_cache_4_size          = this->stream.in_uint16_le();
                this->info_cache_4_persistent    = (this->stream.in_uint8() ? true : false);

                this->info_compression_algorithm = static_cast<WrmCompressionAlgorithm>(this->stream.in_uint8());
                REDASSERT(is_valid_enum_value(this->info_compression_algorithm));
                if (!is_valid_enum_value(this->info_compression_algorithm)) {
                    this->info_compression_algorithm = WrmCompressionAlgorithm::no_compression;
                }

                // re-init
                this->compression_wrapper.~CompressionTransportWrapper();
                new (&this->compression_wrapper) CompressionInTransportWrapper(
                    *this->trans_source, this->info_compression_algorithm);
                this->trans = &this->compression_wrapper.get();
            }

            this->stream.rewind();

            if (!this->meta_ok) {
                this->meta_ok = true;
            }
            break;
        case RESET_CHUNK:
            this->info_compression_algorithm = WrmCompressionAlgorithm::no_compression;

            this->trans = this->trans_source;
            break;
        }

        for (size_t i = 0; i < this->nbconsumers ; i++) {
            if (this->consumers[i]) {
                this->consumers[i]->chunk(this->chunk_type, this->chunk_count, this->stream.clone());
            }
        }
    }   // void interpret_chunk()
Example #4
0
static json_t *member_data_to_json(const json_t *member, const qeocore_data_t *data)
{
    json_t  *json_data  = NULL;
    json_t  *id         = json_object_get(member, KEY_ID);            // Mandatory
    json_t  *type       = json_object_get(member, KEY_QEO_TYPE_CODE); // Mandatory

    if ((NULL == id) || (!json_is_integer(id)) ||
        (NULL == type) || (!json_is_integer(type))) {
        return json_data;
    }

    qeocore_member_id_t qeo_member_id = (qeocore_member_id_t) json_integer_value(id);
    qeocore_typecode_t  qeoTypeCode   = (qeocore_typecode_t) json_integer_value(type);

    switch (qeoTypeCode) {
        case QEOCORE_TYPECODE_BOOLEAN:
        {
            qeo_boolean_t bool_value = 0;
            if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &bool_value)) {
                json_data = bool_value ? (json_true()) : (json_false());
            }
        }
        break;

        case QEOCORE_TYPECODE_INT8:
        {
            int8_t int_value;
            if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &int_value)) {
                json_data = json_integer(int_value);
            }
        }
        break;

        case QEOCORE_TYPECODE_INT16:
        {
            int16_t int_value;
            if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &int_value)) {
                json_data = json_integer(int_value);
            }
        }
        break;

        case QEOCORE_TYPECODE_INT32:
        {
            int32_t int_value;
            if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &int_value)) {
                json_data = json_integer(int_value);
            }
        }
        break;

        case QEOCORE_TYPECODE_INT64:
        {
            int64_t int_value;
            if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &int_value)) {
                char *char_value = NULL;
                if (-1 != asprintf(&char_value, "%" PRId64 "", int_value)) {
                    json_data = json_string(char_value);
                    free(char_value);
                }
            }
        }
        break;

        case QEOCORE_TYPECODE_FLOAT32:
        {
            float float_value;
            if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &float_value)) {
                json_data = json_real(float_value);
            }
        }
        break;

        case QEOCORE_TYPECODE_STRING:
        {
            char *char_value;
            if (QEO_OK == qeocore_data_get_member(data, qeo_member_id, &char_value)) {
                json_data = json_string(char_value);
                free(char_value);
            }
        }
        break;

        case QEOCORE_TYPECODE_STRUCT:
        {
            qeocore_data_t *qeo_data = NULL;
            do {
                json_t *item = json_object_get(member, KEY_ITEM);
                if (NULL == item) {
                    qeo_log_e("NULL == item");
                    break;
                }

                if (!json_is_object(item)) {
                    qeo_log_e("not an object");
                    break;
                }

                if (QEO_OK != qeocore_data_get_member(data, qeo_member_id, &qeo_data)) {
                    qeo_log_e("qeocore_data_get_member failed");
                    break;
                }

                if (NULL == qeo_data) {
                    qeo_log_e("NULL == qeo_data");
                    break;
                }

                json_data = object_data_to_json(item, qeo_data);
            } while (0);

            if (NULL != qeo_data) {
                qeocore_data_free(qeo_data);
            }
        }
        break;

        case QEOCORE_TYPECODE_SEQUENCE:
        {
            json_t *items = json_object_get(member, KEY_ITEMS);
            if ((NULL != items) && json_is_object(items)) {
                qeocore_data_t *seqdata = NULL;
                if ((QEO_OK == qeocore_data_get_member(data, qeo_member_id, &seqdata)) && (NULL != seqdata)) {
                    json_data = array_data_to_json(items, seqdata);
                    qeocore_data_free(seqdata);
                }
            }
        }
        break;
        case QEOCORE_TYPECODE_ENUM:
        {
            qeo_enum_value_t enum_value;
            if (QEO_OK != qeocore_data_get_member(data, qeo_member_id, &enum_value)) {
                qeo_log_e("Could not get member");
                break;
            } 
            if (is_valid_enum_value(member, enum_value) == false){
                qeo_log_e("Not a valid enum value");
                break;
            }
            json_data = json_integer(enum_value);

        }
        break;
    }
    return json_data;
}
Example #5
0
static qeo_retcode_t array_to_data(json_t *elemtype, json_t *json_data, qeocore_data_t *data)
{
    qeo_retcode_t result = QEO_EINVAL;

    json_t *type = json_object_get(elemtype, KEY_QEO_TYPE_CODE); // Mandatory

    if ((NULL == type) || (!json_is_integer(type))) {
        return result;
    }

    qeo_sequence_t seq = { 0 };
    if (QEO_OK != qeocore_data_sequence_new(data, &seq, json_array_size(json_data))) {
        result = QEO_EFAIL;
        return result;
    }

    qeocore_typecode_t qeoTypeCode = (qeocore_typecode_t) json_integer_value(type);
    result = QEO_OK;
    int i;
    int numOfElem = json_array_size(json_data);
    for (i = 0; i < numOfElem; ++i) {
        json_t *elem = json_array_get(json_data, i);
        if (NULL == elem) {
            result = QEO_EFAIL;
            break;
        }

        result = QEO_EFAIL;

        switch (qeoTypeCode) {
            case QEOCORE_TYPECODE_BOOLEAN:
            {
                if (json_is_boolean(elem)) {
                    ((qeo_boolean_t *)DDS_SEQ_DATA(seq))[i] = json_is_true(elem);
                    result = QEO_OK;
                }
            }
            break;

            case QEOCORE_TYPECODE_INT8:
            {
                if (json_is_integer(elem)) {
                    json_int_t json_value = json_integer_value(elem);
                    if ((-128LL <= json_value) && (json_value <= 127LL)) {
                        ((int8_t *)DDS_SEQ_DATA(seq))[i] = (int8_t) json_value;
                        result = QEO_OK;
                    }
                }
            }
            break;

            case QEOCORE_TYPECODE_INT16:
            {
                if (json_is_integer(elem)) {
                    json_int_t json_value = json_integer_value(elem);
                    if ((-32768LL <= json_value) && (json_value <= 32767LL)) {
                        ((int16_t *)DDS_SEQ_DATA(seq))[i] = (int16_t) json_value;
                        result = QEO_OK;
                    }
                }
            }
            break;

            case QEOCORE_TYPECODE_INT32:
            {
                if (json_is_integer(elem)) {
                    json_int_t json_value = json_integer_value(elem);
                    if ((-2147483648LL <= json_value) && (json_value <= 2147483647LL)) {
                        ((int32_t *)DDS_SEQ_DATA(seq))[i] = (int32_t) json_value;
                        result = QEO_OK;
                    }
                }
            }
            break;

            case QEOCORE_TYPECODE_INT64:
            {
                if (json_is_integer(elem)) {
                    ((int64_t *)DDS_SEQ_DATA(seq))[i] = (int64_t) json_integer_value(elem);
                    result = QEO_OK;
                }

                if (json_is_string(elem)) {
                    const char  *qeo_value  = json_string_value(elem);
                    intmax_t    num         = strtoimax(qeo_value, NULL, 10);
                    ((int64_t *)DDS_SEQ_DATA(seq))[i] = (int64_t) num;
                    result = QEO_OK;
                }
            }
            break;

            case QEOCORE_TYPECODE_FLOAT32:
            {
                /*
                   *Also allow integer values, when float:0.0 is written in a webview then JSON.stringify can result into float:0
                   *meaning that the float 0.0 is transformed in an integer like 0, that's why we also need to allow integers, to be
                   *able to handle these rounding issues.
                 */
                if (json_is_real(json_data) || json_is_integer(json_data)) {
                    ((float *)DDS_SEQ_DATA(seq))[i] = (float) json_real_value(elem);
                    result = QEO_OK;
                }
            }
            break;

            case QEOCORE_TYPECODE_STRING:
            {
                if (json_is_string(elem)) {
                    ((char **)DDS_SEQ_DATA(seq))[i] = strdup(json_string_value(elem));
                    result = QEO_OK;
                }
            }
            break;

            case QEOCORE_TYPECODE_STRUCT:
            {
                if (json_is_object(elem)) {
                    json_t *item = json_object_get(elemtype, KEY_ITEM);
                    if ((NULL != item) && json_is_object(item)) {
                        qeocore_data_t *qeo_value = ((qeocore_data_t **)DDS_SEQ_DATA(seq))[i];
                        result = object_to_data(item, elem, qeo_value);
                    }
                }
            }
            break;

            case QEOCORE_TYPECODE_SEQUENCE:
            {
                if (json_is_array(elem)) {
                    json_t *items = json_object_get(elemtype, KEY_ITEMS);
                    if ((NULL != items) && json_is_object(items)) {
                        qeocore_data_t *qeo_value = ((qeocore_data_t **)DDS_SEQ_DATA(seq))[i];
                        result = array_to_data(items, elem, qeo_value);
                    }
                }
            }
            break;
            case QEOCORE_TYPECODE_ENUM:
            {
                if (!json_is_integer(json_data)){
                    qeo_log_e("Enum should be integer");
                    break;
                }
                qeo_enum_value_t enum_val = (qeo_enum_value_t) json_integer_value(json_data);
                if (is_valid_enum_value(elemtype, enum_val) == false){
                    qeo_log_e("Could not convert json to enum");
                    break;
                }
                ((qeo_enum_value_t *)DDS_SEQ_DATA(seq))[i] = enum_val;
            }
            break;
        }

        if (QEO_OK != result) {
            break;
        }
    }

    if (QEO_OK == result) {
        result = qeocore_data_sequence_set(data, &seq, 0);
    }

    return result;
}
Example #6
0
static qeo_retcode_t member_to_data(json_t *member, json_t *json_data, qeocore_data_t *data)
{
    qeo_retcode_t result = QEO_EINVAL;

    json_t  *id   = json_object_get(member, KEY_ID);            // Mandatory
    json_t  *type = json_object_get(member, KEY_QEO_TYPE_CODE); // Mandatory

    if ((NULL == id) || (!json_is_integer(id)) ||
        (NULL == type) || (!json_is_integer(type))) {
        return result;
    }
    result = QEO_EFAIL;

    qeocore_member_id_t qeo_member_id = (qeocore_member_id_t) json_integer_value(id);
    qeocore_typecode_t  qeoTypeCode   = (qeocore_typecode_t) json_integer_value(type);
/*
    bool isKey = false;
    json_t *key_value = json_object_get(member, KEY_KEY);
    if ((NULL != key_value) && (json_is_true(key_value))) {
        isKey = true;
    }
 */
    switch (qeoTypeCode) {
        case QEOCORE_TYPECODE_BOOLEAN:
        {
            if (json_is_boolean(json_data)) {
                qeo_boolean_t qeo_value = (qeo_boolean_t) json_is_true(json_data);
                result = qeocore_data_set_member(data, qeo_member_id, &qeo_value);
                if (QEO_OK != result) {
                    qeo_log_e("qeocore_data_set_member failed");
                }
            }
        }
        break;

        case QEOCORE_TYPECODE_INT8:
        {
            if (json_is_integer(json_data)) {
                json_int_t json_value = json_integer_value(json_data);
                if ((-128LL <= json_value) && (json_value <= 127LL)) {
                    int8_t qeo_value = (int8_t)json_value;
                    result = qeocore_data_set_member(data, qeo_member_id, &qeo_value);
                    if (QEO_OK != result) {
                        qeo_log_e("qeocore_data_set_member failed");
                    }
                }
            }
        }
        break;

        case QEOCORE_TYPECODE_INT16:
        {
            if (json_is_integer(json_data)) {
                json_int_t json_value = json_integer_value(json_data);
                if ((-32768LL <= json_value) && (json_value <= 32767LL)) {
                    int16_t qeo_value = (int16_t)json_value;
                    result = qeocore_data_set_member(data, qeo_member_id, &qeo_value);
                    if (QEO_OK != result) {
                        qeo_log_e("qeocore_data_set_member failed");
                    }
                }
            }
        }
        break;

        case QEOCORE_TYPECODE_INT32:
        {
            if (json_is_integer(json_data)) {
                json_int_t json_value = json_integer_value(json_data);
                if ((-2147483648LL <= json_value) && (json_value <= 2147483647LL)) {
                    int32_t qeo_value = (int32_t)json_value;
                    result = qeocore_data_set_member(data, qeo_member_id, &qeo_value);
                }
            }
        }
        break;

        case QEOCORE_TYPECODE_INT64:
        {
            if (json_is_integer(json_data)) {
                int64_t qeo_value = (int64_t) json_integer_value(json_data);
                result = qeocore_data_set_member(data, qeo_member_id, &qeo_value);
                if (QEO_OK != result) {
                    qeo_log_e("qeocore_data_set_member failed");
                }
            }

            if (json_is_string(json_data)) {
                const char *qeo_value = json_string_value(json_data);

                intmax_t num = strtoimax(qeo_value, NULL, 10);
                result = qeocore_data_set_member(data, qeo_member_id, (int64_t *) &num);
                if (QEO_OK != result) {
                    qeo_log_e("qeocore_data_set_member failed");
                }
            }
        }
        break;

        case QEOCORE_TYPECODE_FLOAT32:
        {
            /*
               *Also allow integer values, when float:0.0 is written in a webview then JSON.stringify can result into float:0
               *meaning that the float 0.0 is transformed in an integer like 0, that's why we also need to allow integers, to be
               *able to handle these rounding issues.
             */
            if (json_is_real(json_data) || json_is_integer(json_data)) {
                float qeo_value = (float) json_real_value(json_data);
                result = qeocore_data_set_member(data, qeo_member_id, &qeo_value);
                if (QEO_OK != result) {
                    qeo_log_e("qeocore_data_set_member failed");
                }
            }
        }
        break;

        case QEOCORE_TYPECODE_STRING:
        {
            if (json_is_string(json_data)) {
                const char *qeo_value = json_string_value(json_data);
                result = qeocore_data_set_member(data, qeo_member_id, &qeo_value);
                if (QEO_OK != result) {
                    qeo_log_e("qeocore_data_set_member failed");
                }
            }
        }
        break;

        case QEOCORE_TYPECODE_STRUCT:
        {
            if (json_is_object(json_data)) {
                qeocore_data_t *qeo_data = NULL;
                do {
                    if (QEO_OK != qeocore_data_get_member(data, qeo_member_id, &qeo_data)) {
                        qeo_log_e("qeocore_data_get_member failed");
                        break;
                    }

                    if (NULL == qeo_data) {
                        qeo_log_e("NULL == qeo_data");
                        break;
                    }

                    json_t *item = json_object_get(member, KEY_ITEM);
                    if (NULL == item) {
                        qeo_log_e("NULL == item");
                        break;
                    }
                    if (!json_is_object(item)) {
                        qeo_log_e("item is not an object");
                        break;
                    }

                    result = object_to_data(item, json_data, qeo_data);
                    if (QEO_OK != result) {
                        qeo_log_e("object_to_data failed");
                        break;
                    }

                    result = qeocore_data_set_member(data, qeo_member_id, &qeo_data);
                    if (QEO_OK != result) {
                        qeo_log_e("qeocore_data_set_member failed: member_id:%u", qeo_member_id);
                        break;
                    }
                } while (0);

                if (NULL != qeo_data) {
                    qeocore_data_free(qeo_data);
                }
            }
        }
        break;

        case QEOCORE_TYPECODE_SEQUENCE:
        {
            if (json_is_array(json_data)) {
                qeocore_data_t *qeo_data = NULL;
                if ((QEO_OK == qeocore_data_get_member(data, qeo_member_id, &qeo_data)) && (NULL != qeo_data)) {
                    json_t *items = json_object_get(member, KEY_ITEMS);
                    if ((NULL != items) && json_is_object(items)) {
                        if (QEO_OK == array_to_data(items, json_data, qeo_data)) {
                            result = qeocore_data_set_member(data, qeo_member_id, &qeo_data);
                        }
                    }
                }
                qeocore_data_free(qeo_data);
            }
        }
        break;
        case QEOCORE_TYPECODE_ENUM:
        {
            if (!json_is_integer(json_data)){
                qeo_log_e("Enum should be integer");
                break;
            }
            qeo_enum_value_t enum_val = (qeo_enum_value_t) json_integer_value(json_data);
            if (is_valid_enum_value(member, enum_val) == false){
                qeo_log_e("Could not convert json to enum");
                break;
            }
            result = qeocore_data_set_member(data, qeo_member_id, &enum_val);
        }
        break;
    }
    return result;
}
Example #7
0
static json_t *array_data_to_json(const json_t *typedesc, qeocore_data_t *data)
{
    json_t          *json_data  = NULL;
    qeo_sequence_t  seq         = { 0 };

    json_t *type = json_object_get(typedesc, KEY_QEO_TYPE_CODE); // Mandatory

    if ((NULL == type) || (!json_is_integer(type)) ||
        (QEO_OK != qeocore_data_sequence_get(data, &seq, 0, QEOCORE_SIZE_UNLIMITED))) {
        return json_data;
    }
    json_data = json_array();
    qeocore_typecode_t qeoTypeCode = (qeocore_typecode_t) json_integer_value(type);

    int i;
    int numOfElem = DDS_SEQ_LENGTH(seq);
    for (i = 0; i < numOfElem; ++i) {
        switch (qeoTypeCode) {
            case QEOCORE_TYPECODE_BOOLEAN:
            {
                qeo_boolean_t bool_value = ((qeo_boolean_t *)DDS_SEQ_DATA(seq))[i];
                json_array_append_new(json_data, bool_value ? (json_true()) : (json_false()));
            }
            break;

            case QEOCORE_TYPECODE_INT8:
            {
                int8_t int_value = ((int8_t *)DDS_SEQ_DATA(seq))[i];
                json_array_append_new(json_data, json_integer((json_int_t)int_value));
            }
            break;

            case QEOCORE_TYPECODE_INT16:
            {
                int8_t int_value = ((int16_t *)DDS_SEQ_DATA(seq))[i];
                json_array_append_new(json_data, json_integer((json_int_t)int_value));
            }
            break;

            case QEOCORE_TYPECODE_INT32:
            {
                int8_t int_value = ((int32_t *)DDS_SEQ_DATA(seq))[i];
                json_array_append_new(json_data, json_integer((json_int_t)int_value));
            }
            break;

            case QEOCORE_TYPECODE_INT64:
            {
                int64_t int_value   = ((int64_t *)DDS_SEQ_DATA(seq))[i];
                char    *char_value = NULL;
                if (-1 != asprintf(&char_value, "%" PRId64 "", int_value)) {
                    json_array_append_new(json_data, json_string(char_value));
                    free(char_value);
                }
            }
            break;

            case QEOCORE_TYPECODE_STRING:
            {
                char *char_value = ((char **)DDS_SEQ_DATA(seq))[i];
                json_array_append_new(json_data, json_string(char_value));
            }
            break;

            case QEOCORE_TYPECODE_STRUCT:
            {
                json_t *item = json_object_get(typedesc, KEY_ITEM);
                if ((NULL != item) && json_is_object(item)) {
                    qeocore_data_t  *object_value = ((qeocore_data_t **)DDS_SEQ_DATA(seq))[i];
                    json_t          *json_element = object_data_to_json(item, object_value);
                    if (NULL != json_element) {
                        json_array_append_new(json_data, json_element);
                    }
                    else {
                        json_decref(json_data);
                        json_data = NULL;
                    }
                }
                else {
                    json_decref(json_data);
                    json_data = NULL;
                }
            }
            break;

            case QEOCORE_TYPECODE_SEQUENCE:
            {
                json_t *items = json_object_get(typedesc, KEY_ITEMS);
                if ((NULL != items) && json_is_object(items)) {
                    qeocore_data_t  *element_value  = ((qeocore_data_t **)DDS_SEQ_DATA(seq))[i];
                    json_t          *json_element   = array_data_to_json(items, element_value);
                    if (NULL != json_element) {
                        json_array_append_new(json_data, json_element);
                    }
                    else {
                        json_decref(json_data);
                        json_data = NULL;
                    }
                }
                else {
                    json_decref(json_data);
                    json_data = NULL;
                }
            }
            break;
            case QEOCORE_TYPECODE_ENUM:
            {
                qeo_enum_value_t enum_value = ((qeo_enum_value_t *)DDS_SEQ_DATA(seq))[i];
                if (is_valid_enum_value(typedesc, enum_value) == false){
                    qeo_log_e("Not a valid enum value");
                    break;
                }
                json_t *json_enum = json_integer(enum_value);
                json_array_append_new(json_data, json_enum);
            }
            break;
            case QEOCORE_TYPECODE_FLOAT32:
            {
                float float_value = ((float *)DDS_SEQ_DATA(seq))[i];
                json_array_append_new(json_data, json_real(float_value));
            }
            break;

        }

        if (NULL == json_data) {
            break;
        }
    }
    qeocore_data_sequence_free(data, &seq);
    return json_data;
}