Beispiel #1
0
static void sip_deserialize(struct proto_info *info_, uint8_t const **buf)
{
    struct sip_proto_info *info = DOWNCAST(info_, info, sip_proto_info);
    proto_info_deserialize(info_, buf);
    info->set_values = deserialize_2(buf);
    if (info->set_values & SIP_CMD_SET)
        info->cmd = deserialize_1(buf);
    if (info->set_values & SIP_FROM_SET)
        deserialize_str(buf, info->from, sizeof(info->from));
    if (info->set_values & SIP_TO_SET)
        deserialize_str(buf, info->to, sizeof(info->to));
    if (info->set_values & SIP_CALLID_SET)
        deserialize_str(buf, info->call_id, sizeof(info->call_id));
    if (info->set_values & SIP_MIME_SET)
        deserialize_str(buf, info->mime_type, sizeof(info->mime_type));
    if (info->set_values & SIP_VIA_SET) {
        info->via.protocol = deserialize_1(buf);
        ip_addr_deserialize(&info->via.addr, buf);
        info->via.port = deserialize_2(buf);
    }
    if (info->set_values & SIP_LENGTH_SET)
        info->content_length = deserialize_4(buf);
    if (info->set_values & SIP_CODE_SET)
        info->code = deserialize_4(buf);
    if (info->set_values & SIP_CSEQ_SET)
        info->cseq = deserialize_4(buf);
}
Beispiel #2
0
static void dhcp_deserialize(struct proto_info *info_, uint8_t const **buf)
{
    struct dhcp_proto_info *info = DOWNCAST(info_, info, dhcp_proto_info);
    proto_info_deserialize(info_, buf);
    unsigned u = deserialize_1(buf);
    info->hw_addr_is_eth = u & 1U;
    info->opcode = u >> 1U;
    info->set_values = deserialize_1(buf);
    if (info->set_values & DHCP_CLIENT_SET) ip_addr_deserialize(&info->client, buf);
    deserialize_n(buf, info->client_mac, sizeof(info->client_mac));
    deserialize_str(buf, info->server_name, sizeof(info->server_name));
}
Beispiel #3
0
int deserialize_version(struct buff *buf, btc_msg_version *v) {
  int res;

  memset(v, 0, sizeof *v);

  res = deserialize_uint32(buf, &v->version);
  res |= deserialize_uint64(buf, &v->services);
  res |= deserialize_uint64(buf, &v->time);
  res |= deserialize_addr(BTC_PROTO_MIN, buf, &v->addrTo);
  res |= deserialize_addr(BTC_PROTO_MIN, buf, &v->addrFrom);
  res |= deserialize_uint64(buf, &v->nonce);
  res |= deserialize_str(buf, v->strVersion, sizeof v->strVersion);
  res |= deserialize_uint32(buf, &v->startingHeight);

  if (v->version >= BTC_PROTO_FILTERING && buff_space_left(buf) > 0) {
    res |= deserialize_uint8(buf, &v->relayTx);
  } else {
    v->relayTx = 1;
  }
  ASSERT(buff_space_left(buf) == 0);

  return res;
}