net: dns: Use dispatcher context in callbacks
Feed the dispatcher context to dispatcher callbacks instead of resolver or responder context. The callback can then use the proper context because the dispatcher context contains those two context. This allows dispatcher callback to utilize all the information (like interface etc) stored in dispatcher context. Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
This commit is contained in:
parent
3ed8151b00
commit
e98bf3e6d7
@ -156,13 +156,14 @@ enum dns_socket_type {
|
||||
|
||||
struct dns_resolve_context;
|
||||
struct mdns_responder_context;
|
||||
struct dns_socket_dispatcher;
|
||||
|
||||
/**
|
||||
* @typedef dns_socket_dispatcher_cb
|
||||
* @brief Callback used when the DNS socket dispatcher has found a handler for
|
||||
* this type of socket.
|
||||
*
|
||||
* @param ctx DNS resolve or mDNS responder context.
|
||||
* @param ctx struct dns_socket_dispatcher context.
|
||||
* @param sock Socket which is seeing traffic.
|
||||
* @param addr Socket address of the peer that sent the DNS packet.
|
||||
* @param addrlen Length of the socket address.
|
||||
@ -171,7 +172,7 @@ struct mdns_responder_context;
|
||||
*
|
||||
* @return 0 if ok, <0 if error
|
||||
*/
|
||||
typedef int (*dns_socket_dispatcher_cb)(void *ctx, int sock,
|
||||
typedef int (*dns_socket_dispatcher_cb)(struct dns_socket_dispatcher *ctx, int sock,
|
||||
struct sockaddr *addr, size_t addrlen,
|
||||
struct net_buf *buf, size_t data_len);
|
||||
|
||||
|
||||
@ -63,11 +63,11 @@ static int dns_dispatch(struct dns_socket_dispatcher *dispatcher,
|
||||
if (is_query) {
|
||||
if (dispatcher->type == DNS_SOCKET_RESPONDER) {
|
||||
/* Call the responder callback */
|
||||
ret = dispatcher->cb(dispatcher->ctx, sock,
|
||||
ret = dispatcher->cb(dispatcher, sock,
|
||||
addr, addrlen,
|
||||
dns_data, data_len);
|
||||
} else if (dispatcher->pair) {
|
||||
ret = dispatcher->pair->cb(dispatcher->pair->ctx, sock,
|
||||
ret = dispatcher->pair->cb(dispatcher, sock,
|
||||
addr, addrlen,
|
||||
dns_data, data_len);
|
||||
} else {
|
||||
@ -81,11 +81,11 @@ static int dns_dispatch(struct dns_socket_dispatcher *dispatcher,
|
||||
*/
|
||||
if (dispatcher->type == DNS_SOCKET_RESOLVER) {
|
||||
/* Call the resolver callback */
|
||||
ret = dispatcher->cb(dispatcher->ctx, sock,
|
||||
ret = dispatcher->cb(dispatcher, sock,
|
||||
addr, addrlen,
|
||||
dns_data, data_len);
|
||||
} else if (dispatcher->pair) {
|
||||
ret = dispatcher->pair->cb(dispatcher->pair->ctx, sock,
|
||||
ret = dispatcher->pair->cb(dispatcher, sock,
|
||||
addr, addrlen,
|
||||
dns_data, data_len);
|
||||
} else {
|
||||
|
||||
@ -583,7 +583,8 @@ static int dns_read(int sock,
|
||||
if (!strncasecmp(hostname, result->data + 1, hostname_len) &&
|
||||
(result->len - 1) >= hostname_len &&
|
||||
&(result->data + 1)[hostname_len] == lquery) {
|
||||
NET_DBG("%s query to our hostname %s.local", "mDNS",
|
||||
NET_DBG("%s %s %s to our hostname %s.local", "mDNS",
|
||||
family == AF_INET ? "IPv4" : "IPv6", "query",
|
||||
hostname);
|
||||
send_response(sock, family, src_addr, addrlen,
|
||||
result, qtype);
|
||||
@ -668,14 +669,12 @@ static void setup_ipv4_addr(struct sockaddr_in *local_addr)
|
||||
#define INTERFACE_NAME_LEN 0
|
||||
#endif
|
||||
|
||||
static int dispatcher_cb(void *my_ctx, int sock,
|
||||
static int dispatcher_cb(struct dns_socket_dispatcher *ctx, int sock,
|
||||
struct sockaddr *addr, size_t addrlen,
|
||||
struct net_buf *dns_data, size_t len)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ARG_UNUSED(my_ctx);
|
||||
|
||||
ret = dns_read(sock, dns_data, len, addr, addrlen);
|
||||
if (ret < 0 && ret != -EINVAL && ret != -ENOENT) {
|
||||
NET_DBG("%s read failed (%d)", "mDNS", ret);
|
||||
|
||||
@ -201,11 +201,11 @@ static void dns_postprocess_server(struct dns_resolve_context *ctx, int idx)
|
||||
}
|
||||
}
|
||||
|
||||
static int dispatcher_cb(void *my_ctx, int sock,
|
||||
static int dispatcher_cb(struct dns_socket_dispatcher *my_ctx, int sock,
|
||||
struct sockaddr *addr, size_t addrlen,
|
||||
struct net_buf *dns_data, size_t len)
|
||||
{
|
||||
struct dns_resolve_context *ctx = my_ctx;
|
||||
struct dns_resolve_context *ctx = my_ctx->resolve_ctx;
|
||||
struct net_buf *dns_cname = NULL;
|
||||
uint16_t query_hash = 0U;
|
||||
uint16_t dns_id = 0U;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user