Net-WDNS
view release on metacpan or search on metacpan
void
reverse_name(sv_name)
SV *sv_name
PREINIT:
uint8_t *name;
STRLEN name_len;
size_t sz;
wdns_res res;
const char *rstr;
char rev[WDNS_MAXLEN_NAME];
PPCODE:
name = (void *)SvPV(sv_name, name_len);
res = wdns_len_uname(name, name + name_len, &sz);
if (res != wdns_res_success) {
rstr = wdns_res_to_str(res);
croak("problem determining name length (err %d: %s)", (int)res, rstr);
}
res = wdns_reverse_name(name, sz, rev);
if (res != wdns_res_success) {
rstr = wdns_res_to_str(res);
croak("problem reversing name (err %d: %s)", (int)res, rstr);
void
left_chop(sv_name)
SV *sv_name
PREINIT:
STRLEN name_len;
wdns_name_t chop;
wdns_name_t name;
size_t sz;
wdns_res res;
const char *rstr;
PPCODE:
name.data = (void *)SvPV(sv_name, name_len);
name.len = name_len;
res = wdns_len_uname(name.data, name.data + name.len, &sz);
if (res != wdns_res_success) {
rstr = wdns_res_to_str(res);
croak("problem determining name length (err %d: %s)", (int)res, rstr);
}
res = wdns_left_chop(&name, &chop);
if (res != wdns_res_success) {
rstr = wdns_res_to_str(res);
RETVAL
void
domain_to_str(src_sv)
SV *src_sv
PREINIT:
const uint8_t *src;
STRLEN src_len;
char tgt[WDNS_PRESLEN_NAME];
STRLEN tgt_len;
PPCODE:
src = (void *)SvPV(src_sv, src_len);
tgt_len = wdns_domain_to_str(src, src_len, tgt);
// tgt_len is number of bytes read from source, not length of result
if (tgt_len != 0)
mXPUSHs(newSVpv(tgt, 0));
void
wdns_rrset_array_to_str(a, sec)
wdns_rrset_array_t *a
unsigned sec
PREINIT:
char *str;
PPCODE:
str = wdns_rrset_array_to_str(a, sec);
mXPUSHs(newSVpv(str, 0));
Safefree(str);
void
wdns_rrset_to_str(rrset, sec)
wdns_rrset_t *rrset
unsigned sec
PREINIT:
char *str;
PPCODE:
str = wdns_rrset_to_str(rrset, sec);
mXPUSHs(newSVpv(str, 0));
Safefree(str);
void
rr_to_str(rr, sec)
wdns_rr_t *rr
unsigned sec
PREINIT:
char *str;
PPCODE:
str = wdns_rr_to_str(rr, sec);
mXPUSHs(newSVpv(str, 0));
Safefree(str);
void
rdata_to_str(sv_rdata, rrtype, rrclass)
SV *sv_rdata
uint16_t rrtype
uint16_t rrclass
PREINIT:
STRLEN rdlen;
char *src_str;
char *tgt_str;
PPCODE:
src_str = SvPV(sv_rdata, rdlen);
tgt_str = wdns_rdata_to_str(src_str, (uint16_t)rdlen, rrtype, rrclass);
mXPUSHs(newSVpv(tgt_str, 0));
Safefree(tgt_str);
void
str_to_rdata(str, rrtype, rrclass)
const char *str
uint16_t rrtype
uint16_t rrclass
PREINIT:
uint8_t *rd;
size_t rdlen;
wdns_res res;
const char *rstr;
PPCODE:
res = wdns_str_to_rdata(str, rrtype, rrclass, &rd, &rdlen);
if (res != wdns_res_success) {
rstr = wdns_res_to_str(res);
croak("problem converting str to rdata (err %d: %s)", (int)res, rstr);
}
mXPUSHs(newSVpvn(rd, rdlen));
Safefree(rd);
uint16_t
str_to_rrtype(src)
OUTPUT:
RETVAL
void
str_to_name(src)
char *src
PREINIT:
wdns_name_t name;
wdns_res res;
const char *rstr;
PPCODE:
res = wdns_str_to_name(src, &name);
if (res != wdns_res_success) {
rstr = wdns_res_to_str(res);
croak("problem converting str to name (err %d: %s)", (int)res, rstr);
}
mXPUSHs(newSVpvn(name.data, name.len));
void
str_to_name_case(src)
char *src
PREINIT:
wdns_name_t name;
wdns_res res;
const char *rstr;
PPCODE:
res = wdns_str_to_name_case(src, &name);
if (res != wdns_res_success) {
rstr = wdns_res_to_str(res);
croak("problem converting str to name case (err %d: %s)",
(int)res, rstr);
}
mXPUSHs(newSVpvn(name.data, name.len));
void
message_to_str(m)
wdns_message_t *m
PREINIT:
char *str;
PPCODE:
str = wdns_message_to_str(m);
mXPUSHs(newSVpv(str, 0));
Safefree(str);
void
wdns_clear_message(m)
wdns_message_t *m
wdns_message_t *
parse_message_raw(pkt)
PREINIT:
wdns_rrset_array_t *a;
wdns_rrset_t *dns_rrset;
wdns_rdata_t *dns_rdata;
int j, k;
AV *section;
AV *rrset;
AV *rdata;
SV *rd;
SV *rs;
PPCODE:
if (i >= 4)
croak("section out of range (0-3)");
a = &m->sections[i];
section = newAV();
mXPUSHs(newRV_noinc((SV *)section));
av_extend(section, a->n_rrsets);
for (j = 0; j < a->n_rrsets; ++j) {
rrset = newAV();
rs = newRV_noinc((SV *)rrset);
av_push(section, rs);
( run in 2.828 seconds using v1.01-cache-2.11-cpan-71847e10f99 )