コード例 #1
0
Value::Value(int protocol_version,
             const DataType::ConstPtr& data_type,
             char* data, int32_t size)
  : protocol_version_(protocol_version)
  , data_type_(data_type) {
  if (size > 0 && data_type->is_collection()) {
    data_ = decode_size(protocol_version, data, count_);
    if (protocol_version_ >= 3) {
      size_ = size - sizeof(int32_t);
    } else {
      size_ = size - sizeof(uint16_t);
    }
  } else {
    if (data_type->is_tuple()) {
      SharedRefPtr<const CompositeType> composite_type(data_type);
      count_ = composite_type->types().size();
    } else if (data_type->is_user_type()) {
      UserType::ConstPtr user_type(data_type);
      count_ = user_type->fields().size();
    } else {
      count_ = 0;
    }
    data_ = data;
    size_ = size;
  }
}
コード例 #2
0
ファイル: message.c プロジェクト: lerwys/sllp
enum sllp_err packet_process (sllp_instance_t *sllp,
                              struct sllp_raw_packet *recv_pkt,
                              struct sllp_raw_packet *send_pkt)
{
    if(!sllp || !recv_pkt || !send_pkt)
        return SLLP_ERR_PARAM_INVALID;

    // Interpret packet payload as a message
    struct raw_message *recv_raw_msg = (struct raw_message *) recv_pkt->data;
    struct raw_message *send_raw_msg = (struct raw_message *) send_pkt->data;

    // Create proper messages from the raw messages
    struct message recv_msg, send_msg;
   
    recv_msg.command_code = (enum command_code) recv_raw_msg->command_code;
    recv_msg.payload_size = decode_size(recv_raw_msg->encoded_size);
    recv_msg.payload      = recv_raw_msg->payload;    

    send_msg.payload      = send_raw_msg->payload;

    // Check inconsistency between the size of the received data and the size
    // specified in the message header
    if(!is_size_ok(recv_pkt->len, recv_msg.payload_size))
        message_set_answer(&send_msg, CMD_ERR_MALFORMED_MESSAGE);
    else
        message_process(sllp, &recv_msg, &send_msg);

    send_raw_msg->command_code = send_msg.command_code;
    send_raw_msg->encoded_size = encode_size(send_msg.payload_size);
    send_pkt->len = send_msg.payload_size + 2;

    return SLLP_SUCCESS;
}
コード例 #3
0
int
verify_datatype_size(struct attropl * pattr, char **err_msg)
{
	struct attribute atr;
	atr.at_flags = 0;
	return (decode_size(&atr, pattr->name, pattr->resource, pattr->value));
}
コード例 #4
0
ファイル: main.c プロジェクト: RajasekharBhumi/L4Re
static int process_args(int argc, char **argv)
{
  int c;
  int option_index = 0;

  while ((c = getopt_long(argc, argv, "vqe:nrhps:i:",
      		  long_options, &option_index)) != -1) {

    switch (c) {
      case 'v':
	opt_verbose = 1;
	break;
      case 'q':
	opt_quiet = 1;
	break;
      case 'e':
	strcpy(file_ext, ".");
	strncat(file_ext, optarg, FILEEXT_LEN-1);
	break;
      case OPTION_GETRAWFB:
	opt_write_fb = 1;
	break;
      case 'n':
	opt_convert = 0;
	opt_delete_raw = 0;
	break;
      case 'r':
	opt_delete_raw = 0;
	break;
      case 'p':
	opt_process_raw_input_only = 1;
	opt_delete_raw = 0;
	break;
      case 's':
	decode_size(optarg);
	break;
      case 'i':
	get_vc = atol(optarg);
	break;
      case 'h':
	usage();
	exit(0);
      default:
	printf("Unknown option.\n");
	usage();
	exit(1);
    }
  }

  return optind;
}
コード例 #5
0
char* CollectionIterator::decode_value(char* position) {
  int protocol_version = collection_->protocol_version();

  int32_t size;
  char* buffer = decode_size(protocol_version, position, size);

  SharedRefPtr<const DataType> data_type;
  if (collection_->value_type() == CASS_VALUE_TYPE_MAP) {
    data_type = (index_ % 2 == 0) ? collection_->primary_data_type()
                                  : collection_->secondary_data_type();
  } else {
    data_type = collection_->primary_data_type();
  }

  value_ = Value(protocol_version, data_type, buffer, size);

  return buffer + size;
}
コード例 #6
0
ファイル: codec.c プロジェクト: tidatida/alarmd
void
decode_event(DBusMessageIter *iter, int *err, alarm_event_t *eve)
{
  size_t action_cnt     = 0;
  size_t recurrence_cnt = 0;

  alarm_event_del_actions(eve);
  alarm_event_del_recurrences(eve);

  decode_cookie   (iter, err, &eve->ALARMD_PRIVATE(cookie));
  decode_time     (iter, err, &eve->ALARMD_PRIVATE(trigger));
  decode_dstring  (iter, err, &eve->title);
  decode_dstring  (iter, err, &eve->message);
  decode_dstring  (iter, err, &eve->sound);
  decode_dstring  (iter, err, &eve->icon);
  decode_unsigned (iter, err, &eve->flags);
  decode_dstring  (iter, err, &eve->alarm_appid);
  decode_time     (iter, err, &eve->alarm_time);
  decode_tm       (iter, err, &eve->alarm_tm);
  decode_dstring  (iter, err, &eve->alarm_tz);
  decode_time     (iter, err, &eve->recur_secs);
  decode_int      (iter, err, &eve->recur_count);
  decode_time     (iter, err, &eve->snooze_secs);
  decode_time     (iter, err, &eve->snooze_total);

  decode_size     (iter, err, &action_cnt);
  decode_int      (iter, err, &eve->response);

  /* - - - - - - - - - - - - - - - - - - - *
   * action table
   * - - - - - - - - - - - - - - - - - - - */

  alarm_action_t *act = alarm_event_add_actions(eve, action_cnt);
  for( size_t i = 0; i < action_cnt; ++i )
  {
    decode_action(iter, err, &act[i]);
  }

  /* - - - - - - - - - - - - - - - - - - - *
   * recurrence table
   * - - - - - - - - - - - - - - - - - - - */

  decode_size     (iter, err, &recurrence_cnt);
  alarm_recur_t *rec = alarm_event_add_recurrences(eve, recurrence_cnt);
  for( size_t i = 0; i < recurrence_cnt; ++i )
  {
    decode_recur(iter, err, &rec[i]);
  }
  /* - - - - - - - - - - - - - - - - - - - *
   * attribute table sent by libalarm >= 1.0.4
   * - - - - - - - - - - - - - - - - - - - */

  if( !decode_eom_p(iter, err) )
  {
    size_t count = 0;
    decode_size     (iter, err, &count);
    for( size_t i = 0; i < count; ++i )
    {
      alarm_attr_t *att = alarm_event_add_attr(eve, "\x7f");
      decode_attr(iter, err, att);
    }
  }
}