| 1370 | |
| 1371 | |
| 1372 | static inline int srv2dns_node(struct rdata *head, struct dns_node **dn) |
| 1373 | { |
| 1374 | unsigned int mem; |
| 1375 | unsigned int l; |
| 1376 | struct rdata *r; |
| 1377 | struct dns_node *n; |
| 1378 | char *p; |
| 1379 | |
| 1380 | /* calculate how much mem is required */ |
| 1381 | mem = sizeof(struct dns_node); |
| 1382 | for( r=head,l=0 ; r ; r=r->next,l++ ) |
| 1383 | mem +=sizeof(struct dns_val) + get_naptr(r)->repl_len + 1; |
| 1384 | |
| 1385 | n = (struct dns_node*)shm_malloc(mem); |
| 1386 | if (n==NULL) { |
| 1387 | LM_ERR("no more shm mem (%d)\n", mem); |
| 1388 | return -1; |
| 1389 | } |
| 1390 | |
| 1391 | n->type = DNS_NODE_SRV; |
| 1392 | n->size = mem; |
| 1393 | n->idx = 0; |
| 1394 | n->no = l; |
| 1395 | n->kids = *dn; |
| 1396 | *dn = n; |
| 1397 | |
| 1398 | n->vals = (struct dns_val*)(n+1); |
| 1399 | p = (char*)(n->vals+l); |
| 1400 | for( r=head,l=0 ; r ; r=r->next,l++ ) { |
| 1401 | n->vals[l].ival = get_naptr_proto( get_naptr(r) ); |
| 1402 | n->vals[l].sval = p; |
| 1403 | memcpy( p, get_naptr(r)->repl, get_naptr(r)->repl_len ); |
| 1404 | p += get_naptr(r)->repl_len; |
| 1405 | *(p++) = 0; |
| 1406 | } |
| 1407 | return 0; |
| 1408 | } |
| 1409 | |
| 1410 | |
| 1411 | static inline int a2dns_node(struct rdata *head, struct dns_node **dn) |
no test coverage detected