Skip to content

Commit eed37d5

Browse files
committed
De-spaghettied query code. Async support is gone temporarily - will be back
1 parent 88ae4ff commit eed37d5

File tree

4 files changed

+80
-257
lines changed

4 files changed

+80
-257
lines changed

context.c

Lines changed: 62 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -936,10 +936,12 @@ context_general(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
936936
char *name;
937937
uint16_t request_type;
938938
PyDictObject *extensions_obj = 0;
939+
struct getdns_dict *extensions_dict = 0;
940+
getdns_return_t ret;
939941
void *userarg;
940942
getdns_transaction_t tid = 0;
941943
char *callback = 0;
942-
PyObject *resp;
944+
struct getdns_dict *resp;
943945

944946
if ((context = PyCapsule_GetPointer(self->py_context, "context")) == NULL) {
945947
PyErr_SetString(getdns_error, GETDNS_RETURN_GENERIC_ERROR_TEXT);
@@ -948,16 +950,23 @@ context_general(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
948950
if (!PyArg_ParseTupleAndKeywords(args, keywds, "sH|OsLs", kwlist,
949951
&name, &request_type,
950952
&extensions_obj, &userarg, &tid, &callback)) {
953+
PyErr_SetString(getdns_error, GETDNS_RETURN_INVALID_PARAMETER_TEXT);
951954
return NULL;
952955
}
953-
if ((resp = do_query(self->py_context, name, request_type, extensions_obj, userarg,
954-
tid, callback)) == 0) {
955-
PyObject *err_type, *err_value, *err_traceback;
956-
PyErr_Fetch(&err_type, &err_value, &err_traceback);
957-
PyErr_Restore(err_type, err_value, err_traceback);
956+
if (extensions_obj) {
957+
if ((extensions_dict = extensions_to_getdnsdict(extensions_obj)) == 0) {
958+
PyErr_SetString(getdns_error, GETDNS_RETURN_INVALID_PARAMETER_TEXT);
959+
return NULL;
960+
}
961+
}
962+
if ((ret = getdns_general_sync(context, name, request_type,
963+
extensions_dict, &resp)) != GETDNS_RETURN_GOOD) {
964+
char err_buf[256];
965+
getdns_strerror(ret, err_buf, sizeof err_buf);
966+
PyErr_SetString(getdns_error, err_buf);
958967
return NULL;
959968
}
960-
return resp;
969+
return result_create(resp);
961970
}
962971

963972

@@ -972,13 +981,15 @@ context_address(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
972981
"callback",
973982
0
974983
};
984+
getdns_return_t ret;
975985
getdns_context *context;
976986
char *name;
977-
PyDictObject *extensions_obj = 0;
987+
PyDictObject *extensions_obj;
988+
struct getdns_dict *extensions_dict = 0;
978989
void *userarg;
979990
getdns_transaction_t tid;
980991
char *callback = 0;
981-
PyObject *resp;
992+
struct getdns_dict *resp;
982993

983994
if ((context = PyCapsule_GetPointer(self->py_context, "context")) == NULL) {
984995
PyErr_SetString(getdns_error, GETDNS_RETURN_GENERIC_ERROR_TEXT);
@@ -989,14 +1000,20 @@ context_address(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
9891000
&extensions_obj, &userarg, &tid, &callback)) {
9901001
PyErr_SetString(getdns_error, GETDNS_RETURN_INVALID_PARAMETER_TEXT);
9911002
}
992-
if ((resp = do_query(self->py_context, name, GETDNS_RRTYPE_A, extensions_obj, userarg,
993-
tid, callback)) == 0) {
994-
PyObject *err_type, *err_value, *err_traceback;
995-
PyErr_Fetch(&err_type, &err_value, &err_traceback);
996-
PyErr_Restore(err_type, err_value, err_traceback);
1003+
if (extensions_obj) {
1004+
if ((extensions_dict = extensions_to_getdnsdict(extensions_obj)) == 0) {
1005+
PyErr_SetString(getdns_error, GETDNS_RETURN_INVALID_PARAMETER_TEXT);
1006+
return NULL;
1007+
}
1008+
}
1009+
1010+
if ((ret = getdns_address_sync(context, name, extensions_dict, &resp)) != GETDNS_RETURN_GOOD) {
1011+
char err_buf[256];
1012+
getdns_strerror(ret, err_buf, sizeof err_buf);
1013+
PyErr_SetString(getdns_error, err_buf);
9971014
return NULL;
9981015
}
999-
return resp;
1016+
return result_create(resp);
10001017
}
10011018

10021019

@@ -1013,11 +1030,14 @@ context_hostname(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
10131030
};
10141031
void *address;
10151032
PyDictObject *extensions_obj = 0;
1033+
struct getdns_dict *extensions_dict = 0;
10161034
void *userarg;
10171035
getdns_transaction_t tid;
10181036
char * callback = 0;
1019-
PyObject *resp;
1037+
struct getdns_dict *resp;
10201038
getdns_context *context;
1039+
struct getdns_dict *addr_dict;
1040+
getdns_return_t ret;
10211041

10221042
if ((context = PyCapsule_GetPointer(self->py_context, "context")) == NULL) {
10231043
PyErr_SetString(getdns_error, GETDNS_RETURN_GENERIC_ERROR_TEXT);
@@ -1029,14 +1049,25 @@ context_hostname(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
10291049
PyErr_SetString(getdns_error, GETDNS_RETURN_INVALID_PARAMETER_TEXT);
10301050
return NULL;
10311051
}
1032-
if ((resp = do_query(self->py_context, address, GETDNS_RRTYPE_PTR, extensions_obj, userarg,
1033-
tid, callback)) == 0) {
1052+
if (extensions_obj) {
1053+
if ((extensions_dict = extensions_to_getdnsdict(extensions_obj)) == 0) {
1054+
PyErr_SetString(getdns_error, GETDNS_RETURN_INVALID_PARAMETER_TEXT);
1055+
return NULL;
1056+
}
1057+
}
1058+
if ((addr_dict = getdnsify_addressdict((PyObject *)address)) == NULL) {
10341059
PyObject *err_type, *err_value, *err_traceback;
10351060
PyErr_Fetch(&err_type, &err_value, &err_traceback);
10361061
PyErr_Restore(err_type, err_value, err_traceback);
10371062
return NULL;
10381063
}
1039-
return resp;
1064+
if ((ret = getdns_hostname_sync(context, addr_dict, extensions_dict, &resp)) != GETDNS_RETURN_GOOD) {
1065+
char err_buf[256];
1066+
getdns_strerror(ret, err_buf, sizeof err_buf);
1067+
PyErr_SetString(getdns_error, err_buf);
1068+
return NULL;
1069+
}
1070+
return result_create(resp);
10401071
}
10411072

10421073

@@ -1053,10 +1084,12 @@ context_service(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
10531084
};
10541085
char *name;
10551086
PyDictObject *extensions_obj = 0;
1087+
struct getdns_dict *extensions_dict = 0;
1088+
getdns_return_t ret;
10561089
void *userarg;
10571090
getdns_transaction_t tid;
10581091
char *callback = 0;
1059-
PyObject *resp;
1092+
struct getdns_dict *resp;
10601093
getdns_context *context;
10611094

10621095
if ((context = PyCapsule_GetPointer(self->py_context, "context")) == NULL) {
@@ -1069,14 +1102,17 @@ context_service(getdns_ContextObject *self, PyObject *args, PyObject *keywds)
10691102
PyErr_SetString(getdns_error, GETDNS_RETURN_INVALID_PARAMETER_TEXT);
10701103
return NULL;
10711104
}
1072-
if ((resp = do_query(self->py_context, name, (uint16_t)GETDNS_RRTYPE_SRV, extensions_obj, userarg,
1073-
tid, callback)) == 0) {
1074-
PyObject *err_type, *err_value, *err_traceback;
1075-
PyErr_Fetch(&err_type, &err_value, &err_traceback);
1076-
PyErr_Restore(err_type, err_value, err_traceback);
1105+
if (extensions_obj) {
1106+
if ((extensions_dict = extensions_to_getdnsdict(extensions_obj)) == 0) {
1107+
PyErr_SetString(getdns_error, GETDNS_RETURN_INVALID_PARAMETER_TEXT);
1108+
return NULL;
1109+
}
1110+
}
1111+
if ((ret = getdns_service_sync(context, name, extensions_dict, &resp)) != GETDNS_RETURN_GOOD) {
1112+
PyErr_SetString(getdns_error, GETDNS_RETURN_GENERIC_ERROR_TEXT);
10771113
return NULL;
10781114
}
1079-
return resp;
1115+
return result_create(resp);
10801116
}
10811117

10821118

0 commit comments

Comments
 (0)