- *b = cnt;
- cnt = 0;
- b = dest;
- dest++;
- src++;
- }
- *b = 0;
-}
-
-struct dns_pkt *
-unparse_dns_packet (struct dns_pkt_parsed *ppkt)
-{
- size_t size = sizeof (struct dns_pkt) - 1;
- int i;
-
- for (i = 0; i < ntohs (ppkt->s.qdcount); i++)
- size += ppkt->queries[i]->namelen + 1;
-
- for (i = 0; i < ntohs (ppkt->s.ancount); i++)
- {
- size += ppkt->answers[i]->namelen + 1;
- size += ppkt->answers[i]->data_len;
- }
- for (i = 0; i < ntohs (ppkt->s.nscount); i++)
- {
- size += ppkt->nameservers[i]->namelen + 1;
- size += ppkt->nameservers[i]->data_len;
- }
- for (i = 0; i < ntohs (ppkt->s.arcount); i++)
- {
- size += ppkt->additional[i]->namelen + 1;
- size += ppkt->additional[i]->data_len;
- }
-
- size +=
- 4 * ntohs (ppkt->s.qdcount) + 10 * (ntohs (ppkt->s.ancount) +
- ntohs (ppkt->s.arcount) +
- ntohs (ppkt->s.nscount));
-
- struct dns_pkt *pkt = GNUNET_malloc (size);
- char *pkt_c = (char *) pkt;
-
- memcpy (&pkt->s, &ppkt->s, sizeof ppkt->s);
- size_t idx = sizeof ppkt->s;
-
- for (i = 0; i < ntohs (ppkt->s.qdcount); i++)
- {
- unparse_dns_name (&pkt_c[idx], ppkt->queries[i]->name,
- ppkt->queries[i]->namelen);
- idx += ppkt->queries[i]->namelen;
- struct dns_query_line *d = (struct dns_query_line *) &pkt_c[idx];
-
- d->class = ppkt->queries[i]->qclass;
- d->type = ppkt->queries[i]->qtype;
- idx += sizeof (struct dns_query_line);
- }
-
- for (i = 0; i < ntohs (ppkt->s.ancount); i++)
- {
- unparse_dns_name (&pkt_c[idx], ppkt->answers[i]->name,
- ppkt->answers[i]->namelen);
- idx += ppkt->answers[i]->namelen;
- struct dns_record_line *r = (struct dns_record_line *) &pkt_c[idx];
-
- r->type = ppkt->answers[i]->type;
- r->class = ppkt->answers[i]->class;
- r->ttl = ppkt->answers[i]->ttl;
- r->data_len = ppkt->answers[i]->data_len;
- idx += sizeof (struct dns_record_line);
- memcpy (&r->data, ppkt->answers[i]->data, ppkt->answers[i]->data_len);
- idx += ppkt->answers[i]->data_len;