@@ -223,68 +223,6 @@ dispatch_query(PyObject *context_capsule,
223223 return NULL ;
224224 }
225225 }
226- if (request_type == GETDNS_RRTYPE_PTR ) {
227- PyObject * address = (PyObject * )name ;
228- getdns_dict * addr_dict ;
229- getdns_bindata addr_data ;
230- getdns_bindata addr_type ;
231- PyObject * str ;
232- int domain ;
233- unsigned char buf [sizeof (struct in6_addr )];
234-
235- if (!PyDict_Check (address )) {
236- PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
237- return NULL ;
238- }
239- if (PyDict_Size (address ) != 2 ) {
240- PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
241- return NULL ;
242- }
243- addr_dict = getdns_dict_create ();
244- if ((str = PyDict_GetItemString (address , "address_type" )) == NULL ) {
245- PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
246- return NULL ;
247- }
248- if (!PyString_Check (str )) {
249- PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
250- return NULL ;
251- }
252- addr_type .data = (uint8_t * )strdup (PyString_AsString (str ));
253- addr_type .size = strlen ((char * )addr_type .data );
254- if (strlen ((char * )addr_type .data ) != 4 ) {
255- PyErr_SetString (getdns_error , GETDNS_RETURN_WRONG_TYPE_REQUESTED_TEXT );
256- return NULL ;
257- }
258- if (!strncasecmp ((char * )addr_type .data , "IPv4" , 4 ))
259- domain = AF_INET ;
260- else if (!strncasecmp ((char * )addr_type .data , "IPv6" , 4 ))
261- domain = AF_INET6 ;
262- else {
263- PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
264- return NULL ;
265- }
266- getdns_dict_set_bindata (addr_dict , "address_type" , & addr_type );
267-
268- if ((str = PyDict_GetItemString (address , "address_data" )) == NULL ) {
269- PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
270- return NULL ;
271- }
272- if (!PyString_Check (str )) {
273- PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
274- return NULL ;
275- }
276- if (inet_pton (domain , PyString_AsString (str ), buf ) <= 0 ) {
277- PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
278- return NULL ;
279- }
280- addr_data .data = (uint8_t * )buf ;
281- addr_data .size = (domain == AF_INET ? 4 : 16 );
282- getdns_dict_set_bindata (addr_dict , "address_data" , & addr_data );
283- if ((query_name = reverse_address (& addr_data )) == NULL ) {
284- PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
285- return NULL ;
286- }
287- } else
288226 query_name = (char * )name ;
289227
290228 if (callback ) {
@@ -302,26 +240,83 @@ dispatch_query(PyObject *context_capsule,
302240 return NULL ;
303241 }
304242
305- if ((ret = getdns_general (context , query_name , request_type ,
306- extensions_dict , (void * )callback_data ,
307- (getdns_transaction_t * )& tid , callback_shim )) != GETDNS_RETURN_GOOD ) {
308- PyErr_SetString (getdns_error , GETDNS_RETURN_GENERIC_ERROR_TEXT );
309- event_base_free (gen_event_base );
310- return NULL ;
243+ if ((request_type == GETDNS_RRTYPE_A ) || (request_type == GETDNS_RRTYPE_AAAA )) {
244+ if ((ret = getdns_address (context , query_name , extensions_dict , (void * )callback_data ,
245+ (getdns_transaction_t * )& tid , callback_shim )) != GETDNS_RETURN_GOOD ) {
246+ PyErr_SetString (getdns_error , GETDNS_RETURN_GENERIC_ERROR_TEXT );
247+ event_base_free (gen_event_base );
248+ return NULL ;
249+ }
250+ } else if (request_type == GETDNS_RRTYPE_SRV ) {
251+ if ((ret = getdns_service (context , query_name , extensions_dict , (void * )callback_data ,
252+ (getdns_transaction_t * )& tid , callback_shim )) != GETDNS_RETURN_GOOD ) {
253+ PyErr_SetString (getdns_error , GETDNS_RETURN_GENERIC_ERROR_TEXT );
254+ event_base_free (gen_event_base );
255+ return NULL ;
256+ }
257+ } else if (request_type == GETDNS_RRTYPE_PTR ) {
258+ getdns_dict * addr_dict ;
259+ int resp ;
260+ if ((addr_dict = getdnsify_addressdict ((PyObject * )name )) == NULL ) {
261+ PyObject * err_type , * err_value , * err_traceback ;
262+ PyErr_Fetch (& err_type , & err_value , & err_traceback );
263+ PyErr_Restore (err_type , err_value , err_traceback );
264+ return NULL ;
265+ }
266+ if ((resp = getdns_hostname (context , addr_dict , extensions_dict ,
267+ (void * )callback_data , (getdns_transaction_t * )& tid ,
268+ callback_shim )) != GETDNS_RETURN_GOOD ) {
269+ PyErr_SetString (getdns_error , GETDNS_RETURN_GENERIC_ERROR_TEXT );
270+ event_base_free (gen_event_base );
271+ return NULL ;
272+ }
273+ } else {
274+ if ((ret = getdns_general (context , query_name , request_type ,
275+ extensions_dict , (void * )callback_data ,
276+ (getdns_transaction_t * )& tid , callback_shim )) != GETDNS_RETURN_GOOD ) {
277+ PyErr_SetString (getdns_error , GETDNS_RETURN_GENERIC_ERROR_TEXT );
278+ event_base_free (gen_event_base );
279+ return NULL ;
280+ }
311281 }
312282 dispatch_ret = event_base_dispatch (gen_event_base );
313283 UNUSED_PARAM (dispatch_ret );
314284
315285 event_base_free (gen_event_base );
316286 return Py_None ;
317287 }
318- if ((ret = getdns_general_sync (context , query_name , request_type ,
319- extensions_dict , & resp )) != GETDNS_RETURN_GOOD ) {
320- PyErr_SetString (getdns_error , GETDNS_RETURN_GENERIC_ERROR_TEXT );
321- return NULL ;
288+ if ((request_type == GETDNS_RRTYPE_A ) || (request_type == GETDNS_RRTYPE_AAAA )) {
289+ if ((ret = getdns_address_sync (context , query_name , extensions_dict , & resp )) != GETDNS_RETURN_GOOD ) {
290+ PyErr_SetString (getdns_error , GETDNS_RETURN_GENERIC_ERROR_TEXT );
291+ return NULL ;
292+ }
293+ } else if (request_type == GETDNS_RRTYPE_SRV ) {
294+ if ((ret = getdns_service_sync (context , query_name , extensions_dict , & resp )) != GETDNS_RETURN_GOOD ) {
295+ PyErr_SetString (getdns_error , GETDNS_RETURN_GENERIC_ERROR_TEXT );
296+ return NULL ;
297+ }
298+ } else if (request_type == GETDNS_RRTYPE_PTR ) {
299+ getdns_dict * addr_dict ;
300+ int ret ;
301+ if ((addr_dict = getdnsify_addressdict ((PyObject * )name )) == NULL ) {
302+ PyObject * err_type , * err_value , * err_traceback ;
303+ PyErr_Fetch (& err_type , & err_value , & err_traceback );
304+ PyErr_Restore (err_type , err_value , err_traceback );
305+ return NULL ;
306+ }
307+ if ((ret = getdns_hostname_sync (context , addr_dict ,
308+ extensions_dict , & resp )) != GETDNS_RETURN_GOOD ) {
309+ PyErr_SetString (getdns_error , GETDNS_RETURN_GENERIC_ERROR_TEXT );
310+ return NULL ;
311+ }
312+ } else {
313+ if ((ret = getdns_general_sync (context , query_name , request_type ,
314+ extensions_dict , & resp )) != GETDNS_RETURN_GOOD ) {
315+ PyErr_SetString (getdns_error , GETDNS_RETURN_GENERIC_ERROR_TEXT );
316+ return NULL ;
317+ }
322318 }
323319 return getFullResponse (resp );
324-
325320}
326321
327322
@@ -416,6 +411,7 @@ initgetdns(void)
416411 return ;
417412 Py_INCREF (& getdns_ContextType );
418413 PyModule_AddObject (g , "Context" , (PyObject * )& getdns_ContextType );
414+ PyModule_AddStringConstant (g , "__version__" , PYGETDNS_VERSION );
419415/*
420416 * return value constants
421417 */
0 commit comments