コード例 #1
0
ファイル: resource.c プロジェクト: Pikacz/SIK2015
int resource_from_network(dns_resource_t * resource, char * buff, int max_size,
                          char* full_msg) {
  char * c = buff;
  int tmp;
  tmp = get_NAME_from_net(resource->NAME, buff, max_size, full_msg);
  if (tmp < 0)
    return -1;
  max_size -= tmp;
  buff += tmp;

  if(max_size < 2)
    return -1;
  resource->TYPE = get_uint16_t(buff);
  buff += 2;
  max_size -= 2;

  if(max_size < 2)
    return -1;
  resource->CLASS = get_uint16_t(buff);
  buff += 2;
  max_size -= 2;

  if(max_size < 4)
    return -1;
  resource->TTL = get_uint32_t(buff);
  buff += 4;
  max_size -= 4;

  if(max_size < 2)
    return -1;
  resource->RDLENGTH = get_uint16_t(buff);
  buff += 2;
  max_size -= 2;

  int i;
  if(resource->TYPE != TYPE_PTR) {
    for (i = 0; i < resource->RDLENGTH; ++i) {
      if(max_size == 0)
        return -1;
      resource->RDATA[i] = *buff;
      buff++;
      max_size--;
    }
  }
  else {
    get_NAME_from_net(resource->RDATA,buff, max_size, full_msg);
    buff += resource->RDLENGTH;
  }
  return buff - c;
}
コード例 #2
0
ファイル: header.c プロジェクト: Pikacz/SIK2015
int header_from_network(dns_header_t * header, char * buff, int max_size) {
  if (max_size < 12)
    return -1;
  int i;
  for(i = 0; i < 6; ++i) {
    (header->h)[i] = get_uint16_t(buff);
    buff += 2;
  }
  (header->h)[0] = (header->h)[0];
  return 12;
}
コード例 #3
0
ファイル: question.c プロジェクト: Pikacz/SIK2015
int question_from_network(dns_question_t * question, char * buff, int max_size,
                          char * full_msg){
  char * tmp = buff;
  question->qname_length = get_NAME_from_net(question->QNAME, buff, max_size,
                                             full_msg);
  if (question->qname_length < 0)
    return -1;
  max_size -= question->qname_length;
  buff += question->qname_length;

  if(max_size < 2)
    return -1;
  question->QTYPE = get_uint16_t(buff);
  buff += 2;
  max_size -= 2;

  if(max_size < 2)
    return -1;
  question->QCLASS = get_uint16_t(buff);
  buff += 2;
  max_size -= 2;
  return buff - tmp;
}
コード例 #4
0
ファイル: SocketLib.c プロジェクト: madhavPdesai/ahir
void pack_value(char* payload,int wlength,int offset, char* port_value)
{
  char* ptr = payload + (offset*wlength/8);
  char* ss = NULL;

  switch(wlength)
    {
    case 8:
      *((uint8_t*)ptr) = get_uint8_t(port_value,&ss);
      break;
    case 16:
      *((uint16_t*)ptr) = get_uint16_t(port_value,&ss);
      break;
    case 32:
      *((uint32_t*)ptr) = get_uint32_t(port_value,&ss);
      break;
    case 64:
      *((uint64_t*)ptr) = get_uint64_t(port_value,&ss);
      break;
    default:
      fprintf(stderr,"Error: unsupported data width %d\n", wlength);
      return;
    }
}