… | |
… | |
69 | case adns_r_ptr_raw: |
69 | case adns_r_ptr_raw: |
70 | sv = newSVpv (a->rrs.str [i], 0); |
70 | sv = newSVpv (a->rrs.str [i], 0); |
71 | break; |
71 | break; |
72 | |
72 | |
73 | case adns_r_txt: |
73 | case adns_r_txt: |
74 | sv = newSVpvn (a->rrs.manyistr [i]->str, a->rrs.manyistr [i]->i); |
74 | { |
|
|
75 | AV *av = newAV (); |
|
|
76 | adns_rr_intstr *rr = a->rrs.manyistr [i]; |
|
|
77 | |
|
|
78 | while (rr->str) |
|
|
79 | { |
|
|
80 | av_push (av, newSVpvn (rr->str, rr->i)); |
|
|
81 | ++rr; |
|
|
82 | } |
|
|
83 | |
|
|
84 | sv = newRV_noinc ((SV *)av); |
|
|
85 | } |
75 | break; |
86 | break; |
76 | |
87 | |
77 | case adns_r_a: |
88 | case adns_r_a: |
78 | sv = newSVpv (inet_ntoa (a->rrs.inaddr [i]), 0); |
89 | sv = newSVpv (inet_ntoa (a->rrs.inaddr [i]), 0); |
79 | break; |
90 | break; |
… | |
… | |
84 | |
95 | |
85 | case adns_r_hinfo: |
96 | case adns_r_hinfo: |
86 | { |
97 | { |
87 | /* untested */ |
98 | /* untested */ |
88 | AV *av = newAV (); |
99 | AV *av = newAV (); |
89 | sv = newRV_noinc ((SV *)av); |
|
|
90 | adns_rr_intstrpair *rr = a->rrs.intstrpair + i; |
100 | adns_rr_intstrpair *rr = a->rrs.intstrpair + i; |
91 | |
101 | |
92 | av_push (av, newSVpvn (rr->array [0].str, rr->array [0].i)); |
102 | av_push (av, newSVpvn (rr->array [0].str, rr->array [0].i)); |
93 | av_push (av, newSVpvn (rr->array [1].str, rr->array [1].i)); |
103 | av_push (av, newSVpvn (rr->array [1].str, rr->array [1].i)); |
|
|
104 | |
|
|
105 | sv = newRV_noinc ((SV *)av); |
94 | } |
106 | } |
95 | break; |
107 | break; |
96 | |
108 | |
97 | case adns_r_rp: |
109 | case adns_r_rp: |
98 | case adns_r_rp_raw: |
110 | case adns_r_rp_raw: |
99 | { |
111 | { |
100 | /* untested */ |
112 | /* untested */ |
101 | AV *av = newAV (); |
113 | AV *av = newAV (); |
102 | sv = newRV_noinc ((SV *)av); |
|
|
103 | adns_rr_strpair *rr = a->rrs.strpair + i; |
114 | adns_rr_strpair *rr = a->rrs.strpair + i; |
104 | |
115 | |
105 | av_push (av, newSVpv (rr->array [0], 0)); |
116 | av_push (av, newSVpv (rr->array [0], 0)); |
106 | av_push (av, newSVpv (rr->array [1], 0)); |
117 | av_push (av, newSVpv (rr->array [1], 0)); |
|
|
118 | |
|
|
119 | sv = newRV_noinc ((SV *)av); |
107 | } |
120 | } |
108 | break; |
121 | break; |
109 | |
122 | |
110 | case adns_r_mx: |
123 | case adns_r_mx: |
111 | { |
124 | { |
112 | AV *av = newAV (); |
125 | AV *av = newAV (); |
113 | sv = newRV_noinc ((SV *)av); |
|
|
114 | adns_rr_inthostaddr *rr = a->rrs.inthostaddr + i; |
126 | adns_rr_inthostaddr *rr = a->rrs.inthostaddr + i; |
115 | |
127 | |
116 | av_push (av, newSViv (rr->i)); |
128 | av_push (av, newSViv (rr->i)); |
117 | av_push (av, ha2sv (&rr->ha)); |
129 | av_push (av, ha2sv (&rr->ha)); |
|
|
130 | |
|
|
131 | sv = newRV_noinc ((SV *)av); |
118 | } |
132 | } |
119 | break; |
133 | break; |
120 | |
134 | |
121 | case adns_r_mx_raw: |
135 | case adns_r_mx_raw: |
122 | { |
136 | { |
123 | AV *av = newAV (); |
137 | AV *av = newAV (); |
124 | sv = newRV_noinc ((SV *)av); |
|
|
125 | adns_rr_intstr *rr = a->rrs.intstr + i; |
138 | adns_rr_intstr *rr = a->rrs.intstr + i; |
126 | |
139 | |
127 | av_push (av, newSViv (rr->i)); |
140 | av_push (av, newSViv (rr->i)); |
128 | av_push (av, newSVpv (rr->str, 0)); |
141 | av_push (av, newSVpv (rr->str, 0)); |
|
|
142 | |
|
|
143 | sv = newRV_noinc ((SV *)av); |
129 | } |
144 | } |
130 | break; |
145 | break; |
131 | |
146 | |
132 | case adns_r_soa: |
147 | case adns_r_soa: |
133 | case adns_r_soa_raw: |
148 | case adns_r_soa_raw: |
134 | { |
149 | { |
135 | AV *av = newAV (); |
150 | AV *av = newAV (); |
136 | sv = newRV_noinc ((SV *)av); |
|
|
137 | adns_rr_soa *rr = a->rrs.soa + i; |
151 | adns_rr_soa *rr = a->rrs.soa + i; |
138 | |
152 | |
139 | av_push (av, newSVpv (rr->mname, 0)); |
153 | av_push (av, newSVpv (rr->mname, 0)); |
140 | av_push (av, newSVpv (rr->rname, 0)); |
154 | av_push (av, newSVpv (rr->rname, 0)); |
141 | av_push (av, newSVuv (rr->serial)); |
155 | av_push (av, newSVuv (rr->serial)); |
142 | av_push (av, newSVuv (rr->refresh)); |
156 | av_push (av, newSVuv (rr->refresh)); |
143 | av_push (av, newSVuv (rr->retry)); |
157 | av_push (av, newSVuv (rr->retry)); |
144 | av_push (av, newSVuv (rr->expire)); |
158 | av_push (av, newSVuv (rr->expire)); |
145 | av_push (av, newSVuv (rr->minimum)); |
159 | av_push (av, newSVuv (rr->minimum)); |
|
|
160 | |
|
|
161 | sv = newRV_noinc ((SV *)av); |
146 | } |
162 | } |
147 | break; |
163 | break; |
148 | |
164 | |
149 | case adns_r_srv_raw: |
165 | case adns_r_srv_raw: |
150 | { |
166 | { |
151 | AV *av = newAV (); |
167 | AV *av = newAV (); |
152 | sv = newRV_noinc ((SV *)av); |
|
|
153 | adns_rr_srvraw *rr = a->rrs.srvraw + i; |
168 | adns_rr_srvraw *rr = a->rrs.srvraw + i; |
154 | |
169 | |
155 | av_push (av, newSViv (rr->priority)); |
170 | av_push (av, newSViv (rr->priority)); |
156 | av_push (av, newSViv (rr->weight)); |
171 | av_push (av, newSViv (rr->weight)); |
157 | av_push (av, newSViv (rr->port)); |
172 | av_push (av, newSViv (rr->port)); |
158 | av_push (av, newSVpv (rr->host, 0)); |
173 | av_push (av, newSVpv (rr->host, 0)); |
|
|
174 | |
|
|
175 | sv = newRV_noinc ((SV *)av); |
159 | } |
176 | } |
160 | break; |
177 | break; |
161 | |
178 | |
162 | case adns_r_srv: |
179 | case adns_r_srv: |
163 | { |
180 | { |
164 | AV *av = newAV (); |
181 | AV *av = newAV (); |
165 | sv = newRV_noinc ((SV *)av); |
|
|
166 | adns_rr_srvha *rr = a->rrs.srvha + i; |
182 | adns_rr_srvha *rr = a->rrs.srvha + i; |
167 | |
183 | |
168 | av_push (av, newSViv (rr->priority)); |
184 | av_push (av, newSViv (rr->priority)); |
169 | av_push (av, newSViv (rr->weight)); |
185 | av_push (av, newSViv (rr->weight)); |
170 | av_push (av, newSViv (rr->port)); |
186 | av_push (av, newSViv (rr->port)); |
171 | av_push (av, ha2sv (&rr->ha)); |
187 | av_push (av, ha2sv (&rr->ha)); |
|
|
188 | |
|
|
189 | sv = newRV_noinc ((SV *)av); |
172 | } |
190 | } |
173 | break; |
191 | break; |
174 | |
192 | |
175 | case adns_r_unknown: |
193 | case adns_r_unknown: |
176 | sv = newSVpvn (a->rrs.byteblock [i].data, a->rrs.byteblock [i].len); |
194 | sv = newSVpvn (a->rrs.byteblock [i].data, a->rrs.byteblock [i].len); |