@@ -1114,15 +1114,15 @@ context_general(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
1114
1114
getdns_return_t ret ;
1115
1115
void * userarg = 0 ;
1116
1116
getdns_transaction_t tid = 0 ;
1117
- char * callback = 0 ;
1117
+ PyObject * callback = 0 ;
1118
1118
struct getdns_dict * resp ;
1119
1119
PyObject * callback_func ;
1120
1120
1121
1121
if ((context = PyCapsule_GetPointer (self -> py_context , "context" )) == NULL ) {
1122
1122
PyErr_SetString (getdns_error , GETDNS_RETURN_BAD_CONTEXT_TEXT );
1123
1123
return NULL ;
1124
1124
}
1125
- if (!PyArg_ParseTupleAndKeywords (args , keywds , "sH|OsLs " , kwlist ,
1125
+ if (!PyArg_ParseTupleAndKeywords (args , keywds , "sH|OsLO " , kwlist ,
1126
1126
& name , & request_type ,
1127
1127
& extensions_obj , & userarg , & tid , & callback )) {
1128
1128
PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
@@ -1154,13 +1154,21 @@ context_general(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
1154
1154
}
1155
1155
if (userarg )
1156
1156
strncpy (blob -> userarg , userarg , BUFSIZ - 1 );
1157
- if ((callback_func = get_callback ("__main__" , callback )) == (PyObject * )NULL ) {
1158
- PyObject * err_type , * err_value , * err_traceback ;
1159
- PyErr_Fetch (& err_type , & err_value , & err_traceback );
1160
- PyErr_Restore (err_type , err_value , err_traceback );
1157
+ if (PyString_Check (callback )) {
1158
+ if ((callback_func = get_callback ("__main__" , PyString_AsString (callback ))) == (PyObject * )NULL ) {
1159
+ PyObject * err_type , * err_value , * err_traceback ;
1160
+ PyErr_Fetch (& err_type , & err_value , & err_traceback );
1161
+ PyErr_Restore (err_type , err_value , err_traceback );
1162
+ return NULL ;
1163
+ }
1164
+ blob -> callback_func = callback_func ;
1165
+ } else if (PyCallable_Check (callback )) {
1166
+ blob -> callback_func = callback ;
1167
+ } else {
1168
+ PyErr_SetString (getdns_error , "Invalid callback value" );
1161
1169
return NULL ;
1162
1170
}
1163
- blob -> callback_func = callback_func ;
1171
+
1164
1172
if ((ret = getdns_general (context , name , request_type ,
1165
1173
extensions_dict , (void * )blob , & tid , callback_shim )) !=
1166
1174
GETDNS_RETURN_GOOD ) {
@@ -1202,14 +1210,14 @@ context_address(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
1202
1210
struct getdns_dict * extensions_dict = 0 ;
1203
1211
char * userarg = 0 ;
1204
1212
getdns_transaction_t tid ;
1205
- char * callback = 0 ;
1213
+ PyObject * callback = 0 ;
1206
1214
struct getdns_dict * resp ;
1207
1215
1208
1216
if ((context = PyCapsule_GetPointer (self -> py_context , "context" )) == NULL ) {
1209
1217
PyErr_SetString (getdns_error , GETDNS_RETURN_BAD_CONTEXT_TEXT );
1210
1218
return NULL ;
1211
1219
}
1212
- if (!PyArg_ParseTupleAndKeywords (args , keywds , "s|OsLs " , kwlist ,
1220
+ if (!PyArg_ParseTupleAndKeywords (args , keywds , "s|OsLO " , kwlist ,
1213
1221
& name ,
1214
1222
& extensions_obj , & userarg , & tid , & callback )) {
1215
1223
PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
@@ -1244,13 +1252,21 @@ context_address(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
1244
1252
} else {
1245
1253
blob -> userarg [0 ] = 0 ;
1246
1254
}
1247
- if ((callback_func = get_callback ("__main__" , callback )) == (PyObject * )NULL ) {
1248
- PyObject * err_type , * err_value , * err_traceback ;
1249
- PyErr_Fetch (& err_type , & err_value , & err_traceback );
1250
- PyErr_Restore (err_type , err_value , err_traceback );
1255
+ if (PyString_Check (callback )) {
1256
+ if ((callback_func = get_callback ("__main__" , PyString_AsString (callback ))) == (PyObject * )NULL ) {
1257
+ PyObject * err_type , * err_value , * err_traceback ;
1258
+ PyErr_Fetch (& err_type , & err_value , & err_traceback );
1259
+ PyErr_Restore (err_type , err_value , err_traceback );
1260
+ return NULL ;
1261
+ }
1262
+ blob -> callback_func = callback_func ;
1263
+ } else if (PyCallable_Check (callback )) {
1264
+ blob -> callback_func = callback ;
1265
+ } else {
1266
+ PyErr_SetString (getdns_error , "Invalid callback value" );
1251
1267
return NULL ;
1252
1268
}
1253
- blob -> callback_func = callback_func ;
1269
+
1254
1270
if ((ret = getdns_address (context , name , extensions_dict , (void * )blob , & tid , callback_shim )) !=
1255
1271
GETDNS_RETURN_GOOD ) {
1256
1272
PyErr_SetString (getdns_error , getdns_get_errorstr_by_id (ret ));
@@ -1287,7 +1303,7 @@ context_hostname(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
1287
1303
struct getdns_dict * extensions_dict = 0 ;
1288
1304
void * userarg = 0 ;
1289
1305
getdns_transaction_t tid ;
1290
- char * callback = 0 ;
1306
+ PyObject * callback = 0 ;
1291
1307
struct getdns_dict * resp ;
1292
1308
getdns_context * context ;
1293
1309
struct getdns_dict * addr_dict ;
@@ -1298,7 +1314,7 @@ context_hostname(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
1298
1314
PyErr_SetString (getdns_error , GETDNS_RETURN_BAD_CONTEXT_TEXT );
1299
1315
return NULL ;
1300
1316
}
1301
- if (!PyArg_ParseTupleAndKeywords (args , keywds , "O|OsLs " , kwlist ,
1317
+ if (!PyArg_ParseTupleAndKeywords (args , keywds , "O|OsLO " , kwlist ,
1302
1318
& address ,
1303
1319
& extensions_obj , & userarg , & tid , & callback )) {
1304
1320
PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
@@ -1339,13 +1355,21 @@ context_hostname(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
1339
1355
} else {
1340
1356
blob -> userarg [0 ] = 0 ;
1341
1357
}
1342
- if ((callback_func = get_callback ("__main__" , callback )) == (PyObject * )NULL ) {
1343
- PyObject * err_type , * err_value , * err_traceback ;
1344
- PyErr_Fetch (& err_type , & err_value , & err_traceback );
1345
- PyErr_Restore (err_type , err_value , err_traceback );
1358
+ if (PyString_Check (callback )) {
1359
+ if ((callback_func = get_callback ("__main__" , PyString_AsString (callback ))) == (PyObject * )NULL ) {
1360
+ PyObject * err_type , * err_value , * err_traceback ;
1361
+ PyErr_Fetch (& err_type , & err_value , & err_traceback );
1362
+ PyErr_Restore (err_type , err_value , err_traceback );
1363
+ return NULL ;
1364
+ }
1365
+ blob -> callback_func = callback_func ;
1366
+ } else if (PyCallable_Check (callback )) {
1367
+ blob -> callback_func = callback ;
1368
+ } else {
1369
+ PyErr_SetString (getdns_error , "Invalid callback value" );
1346
1370
return NULL ;
1347
1371
}
1348
- blob -> callback_func = callback_func ;
1372
+
1349
1373
if ((ret = getdns_hostname (context , addr_dict , extensions_dict , (void * )blob , & tid , callback_shim )) !=
1350
1374
GETDNS_RETURN_GOOD ) {
1351
1375
PyErr_SetString (getdns_error , getdns_get_errorstr_by_id (ret ));
@@ -1383,7 +1407,7 @@ context_service(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
1383
1407
getdns_return_t ret ;
1384
1408
void * userarg ;
1385
1409
getdns_transaction_t tid ;
1386
- char * callback = 0 ;
1410
+ PyObject * callback = 0 ;
1387
1411
struct getdns_dict * resp ;
1388
1412
getdns_context * context ;
1389
1413
PyObject * callback_func ;
@@ -1392,7 +1416,7 @@ context_service(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
1392
1416
PyErr_SetString (getdns_error , GETDNS_RETURN_BAD_CONTEXT_TEXT );
1393
1417
return NULL ;
1394
1418
}
1395
- if (!PyArg_ParseTupleAndKeywords (args , keywds , "s|OsLs " , kwlist ,
1419
+ if (!PyArg_ParseTupleAndKeywords (args , keywds , "s|OsLO " , kwlist ,
1396
1420
& name ,
1397
1421
& extensions_obj , & userarg , & tid , & callback )) {
1398
1422
PyErr_SetString (getdns_error , GETDNS_RETURN_INVALID_PARAMETER_TEXT );
@@ -1427,13 +1451,21 @@ context_service(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
1427
1451
} else {
1428
1452
blob -> userarg [0 ] = 0 ;
1429
1453
}
1430
- if ((callback_func = get_callback ("__main__" , callback )) == (PyObject * )NULL ) {
1431
- PyObject * err_type , * err_value , * err_traceback ;
1432
- PyErr_Fetch (& err_type , & err_value , & err_traceback );
1433
- PyErr_Restore (err_type , err_value , err_traceback );
1454
+ if (PyString_Check (callback )) {
1455
+ if ((callback_func = get_callback ("__main__" , PyString_AsString (callback ))) == (PyObject * )NULL ) {
1456
+ PyObject * err_type , * err_value , * err_traceback ;
1457
+ PyErr_Fetch (& err_type , & err_value , & err_traceback );
1458
+ PyErr_Restore (err_type , err_value , err_traceback );
1459
+ return NULL ;
1460
+ }
1461
+ blob -> callback_func = callback_func ;
1462
+ } else if (PyCallable_Check (callback )) {
1463
+ blob -> callback_func = callback ;
1464
+ } else {
1465
+ PyErr_SetString (getdns_error , "Invalid callback value" );
1434
1466
return NULL ;
1435
1467
}
1436
- blob -> callback_func = callback_func ;
1468
+
1437
1469
if ((ret = getdns_service (context , name , extensions_dict , (void * )blob , & tid , callback_shim )) !=
1438
1470
GETDNS_RETURN_GOOD ) {
1439
1471
PyErr_SetString (getdns_error , getdns_get_errorstr_by_id (ret ));
0 commit comments