respondd: add documentation for some protocol related functions (#194)
This commit is contained in:
parent
00c6b723c9
commit
50874ee142
|
@ -352,6 +352,16 @@ static struct json_object * eval_providers(struct provider_list *providers) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find all providers for the type and return the (eventually cached) result
|
||||||
|
*
|
||||||
|
* Either the request can be answered from cache or eval_providers() is called
|
||||||
|
* to get fresh results.
|
||||||
|
*
|
||||||
|
* @type: String containing the query type
|
||||||
|
*
|
||||||
|
* Returns: Result for the query as json object
|
||||||
|
*/
|
||||||
static struct json_object * single_request(char *type) {
|
static struct json_object * single_request(char *type) {
|
||||||
ENTRY key = {
|
ENTRY key = {
|
||||||
.key = type,
|
.key = type,
|
||||||
|
@ -379,6 +389,13 @@ static struct json_object * single_request(char *type) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls single_request() for each query type and merges the results
|
||||||
|
*
|
||||||
|
* @types: String with space seperated list of types. E.g. "type1 type2"
|
||||||
|
*
|
||||||
|
* Returns: The json structure is { "type1": {...}, "type2": {...} }
|
||||||
|
*/
|
||||||
static struct json_object * multi_request(char *types) {
|
static struct json_object * multi_request(char *types) {
|
||||||
struct json_object *ret = json_object_new_object();
|
struct json_object *ret = json_object_new_object();
|
||||||
char *type, *saveptr;
|
char *type, *saveptr;
|
||||||
|
@ -392,6 +409,17 @@ static struct json_object * multi_request(char *types) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls multi_request() or single_request() depending on the request type
|
||||||
|
*
|
||||||
|
* @request: Request string. Two patterns are possible:
|
||||||
|
* - "type" (single request)
|
||||||
|
* - "GET type1 type2 ..." (multi request)
|
||||||
|
* @compress: Responses to multi requests should be compressed afterwards by
|
||||||
|
* the calling function, this will be saved in *compress.
|
||||||
|
*
|
||||||
|
* Returns: The uncompressed json result ready to be (compressed and) sent
|
||||||
|
*/
|
||||||
static struct json_object * handle_request(char *request, bool *compress) {
|
static struct json_object * handle_request(char *request, bool *compress) {
|
||||||
if (!*request)
|
if (!*request)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -406,6 +434,14 @@ static struct json_object * handle_request(char *request, bool *compress) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Eventually compress and send response the response on the udp socket
|
||||||
|
*
|
||||||
|
* @sock: Socket filedescriptor of the udp socket
|
||||||
|
* @result: Result json object to be send
|
||||||
|
* @compress: True, if the answer should be compressed before sending
|
||||||
|
* @addr: Ipv6 destination address for the answer
|
||||||
|
*/
|
||||||
void send_response(int sock, struct json_object *result, bool compress,
|
void send_response(int sock, struct json_object *result, bool compress,
|
||||||
struct sockaddr_in6 *addr) {
|
struct sockaddr_in6 *addr) {
|
||||||
const char *output = NULL;
|
const char *output = NULL;
|
||||||
|
@ -437,6 +473,14 @@ void send_response(int sock, struct json_object *result, bool compress,
|
||||||
json_object_put(result);
|
json_object_put(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the request task and the send response
|
||||||
|
*
|
||||||
|
* Calls handle_request() and if successful send_response() afterwards.
|
||||||
|
*
|
||||||
|
* @task: The task object (including the request query and the response address)
|
||||||
|
* for the task.
|
||||||
|
*/
|
||||||
void serve_request(struct request_task *task, int sock) {
|
void serve_request(struct request_task *task, int sock) {
|
||||||
bool compress;
|
bool compress;
|
||||||
struct json_object *result = handle_request(task->request, &compress);
|
struct json_object *result = handle_request(task->request, &compress);
|
||||||
|
|
Loading…
Reference in New Issue