Net-WDNS

 view release on metacpan or  search on metacpan

WDNS.xs  view on Meta::CPAN

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);

WDNS.xs  view on Meta::CPAN

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);

WDNS.xs  view on Meta::CPAN

    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)

WDNS.xs  view on Meta::CPAN

    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)

WDNS.xs  view on Meta::CPAN

    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 )