added MIO_SVC_DNC_RESOLVE_FLAG_PREFER_TCP.
added an additional parameter 'prefer_tcp' to mio_svc_dnc_sendreq() and mio_svc_dnc_sendmsg()
This commit is contained in:
parent
247184282f
commit
aeba287690
@ -1027,13 +1027,13 @@ for (i = 0; i < 5; i++)
|
|||||||
MIO_DNS_RCODE_BADCOOKIE /* rcode */
|
MIO_DNS_RCODE_BADCOOKIE /* rcode */
|
||||||
};
|
};
|
||||||
|
|
||||||
mio_svc_dnc_sendreq (dnc, &qhdr, &qrs[0], &qedns, MIO_NULL, 0);
|
mio_svc_dnc_sendreq (dnc, &qhdr, &qrs[0], &qedns, 0, MIO_NULL, 0);
|
||||||
mio_svc_dnc_sendmsg (dnc, &rhdr, qrs, MIO_COUNTOF(qrs), rrs, MIO_COUNTOF(rrs), &qedns, MIO_NULL, 0);
|
mio_svc_dnc_sendmsg (dnc, &rhdr, qrs, MIO_COUNTOF(qrs), rrs, MIO_COUNTOF(rrs), &qedns, 0, MIO_NULL, 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
if (!mio_svc_dnc_resolve(dnc, "b.wild.com", MIO_DNS_RRT_A, 0, on_dnc_resolve, 0))
|
if (!mio_svc_dnc_resolve(dnc, "b.wild.com", MIO_DNS_RRT_A, MIO_SVC_DNC_RESOLVE_FLAG_PREFER_TCP, on_dnc_resolve, 0))
|
||||||
{
|
{
|
||||||
printf ("resolve attempt failure ---> a.wild.com\n");
|
printf ("resolve attempt failure ---> a.wild.com\n");
|
||||||
}
|
}
|
||||||
@ -1043,13 +1043,14 @@ if (!mio_svc_dnc_resolve(dnc, "www.microsoft.com", MIO_DNS_RRT_CNAME, 0, on_dnc_
|
|||||||
printf ("resolve attempt failure ---> www.microsoft.com\n");
|
printf ("resolve attempt failure ---> www.microsoft.com\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
//if (!mio_svc_dnc_resolve(dnc, "www.microsoft.com", MIO_DNS_RRT_A, MIO_SVC_DNC_RESOLVE_FLAG_BRIEF, on_dnc_resolve_brief, 0))
|
//if (!mio_svc_dnc_resolve(dnc, "www.microsoft.com", MIO_DNS_RRT_A, MIO_SVC_DNC_RESOLVE_FLAG_BRIEF, on_dnc_resolve_brief, 0))
|
||||||
if (!mio_svc_dnc_resolve(dnc, "code.miflux.com", MIO_DNS_RRT_A, MIO_SVC_DNC_RESOLVE_FLAG_BRIEF, on_dnc_resolve_brief, 0))
|
if (!mio_svc_dnc_resolve(dnc, "code.miflux.com", MIO_DNS_RRT_A, MIO_SVC_DNC_RESOLVE_FLAG_BRIEF | MIO_SVC_DNC_RESOLVE_FLAG_PREFER_TCP, on_dnc_resolve_brief, 0))
|
||||||
{
|
{
|
||||||
printf ("resolve attempt failure ---> code.miflux.com\n");
|
printf ("resolve attempt failure ---> code.miflux.com\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (!mio_svc_dnc_resolve(dnc, "1.1.1.1.in-addr.arpa", MIO_DNS_RRT_PTR, MIO_SVC_DNC_RESOLVE_FLAG_BRIEF, on_dnc_resolve_brief, 0))
|
if (!mio_svc_dnc_resolve(dnc, "1.1.1.1.in-addr.arpa", MIO_DNS_RRT_PTR, MIO_SVC_DNC_RESOLVE_FLAG_BRIEF, on_dnc_resolve_brief, 0))
|
||||||
{
|
{
|
||||||
printf ("resolve attempt failure ---> 1.1.1.1.in-addr.arpa\n");
|
printf ("resolve attempt failure ---> 1.1.1.1.in-addr.arpa\n");
|
||||||
|
@ -80,6 +80,7 @@ struct dnc_dns_msg_xtn_t
|
|||||||
mio_ntime_t rtmout;
|
mio_ntime_t rtmout;
|
||||||
int rmaxtries; /* maximum number of tries to receive a reply */
|
int rmaxtries; /* maximum number of tries to receive a reply */
|
||||||
int rtries; /* number of tries made so far */
|
int rtries; /* number of tries made so far */
|
||||||
|
int pending;
|
||||||
};
|
};
|
||||||
typedef struct dnc_dns_msg_xtn_t dnc_dns_msg_xtn_t;
|
typedef struct dnc_dns_msg_xtn_t dnc_dns_msg_xtn_t;
|
||||||
|
|
||||||
@ -97,6 +98,7 @@ static MIO_INLINE void chain_pending_dns_reqmsg (mio_svc_dnc_t* dnc, mio_dns_msg
|
|||||||
dnc_dns_msg_getxtn(msg)->next = dnc->pending_req;
|
dnc_dns_msg_getxtn(msg)->next = dnc->pending_req;
|
||||||
}
|
}
|
||||||
dnc->pending_req = msg;
|
dnc->pending_req = msg;
|
||||||
|
dnc_dns_msg_getxtn(msg)->pending = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MIO_INLINE void unchain_pending_dns_reqmsg (mio_svc_dnc_t* dnc, mio_dns_msg_t* msg)
|
static MIO_INLINE void unchain_pending_dns_reqmsg (mio_svc_dnc_t* dnc, mio_dns_msg_t* msg)
|
||||||
@ -105,6 +107,35 @@ static MIO_INLINE void unchain_pending_dns_reqmsg (mio_svc_dnc_t* dnc, mio_dns_m
|
|||||||
if (msgxtn->next) dnc_dns_msg_getxtn(msgxtn->next)->prev = msgxtn->prev;
|
if (msgxtn->next) dnc_dns_msg_getxtn(msgxtn->next)->prev = msgxtn->prev;
|
||||||
if (msgxtn->prev) dnc_dns_msg_getxtn(msgxtn->prev)->next = msgxtn->next;
|
if (msgxtn->prev) dnc_dns_msg_getxtn(msgxtn->prev)->next = msgxtn->next;
|
||||||
else dnc->pending_req = msgxtn->next;
|
else dnc->pending_req = msgxtn->next;
|
||||||
|
dnc_dns_msg_getxtn(msg)->pending = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static mio_dns_msg_t* make_dns_msg (mio_svc_dnc_t* dnc, mio_dns_bhdr_t* bdns, mio_dns_bqr_t* qr, mio_oow_t qr_count, mio_dns_brr_t* rr, mio_oow_t rr_count, mio_dns_bedns_t* edns, mio_svc_dnc_on_done_t on_done, mio_oow_t xtnsize)
|
||||||
|
{
|
||||||
|
mio_dns_msg_t* msg;
|
||||||
|
dnc_dns_msg_xtn_t* msgxtn;
|
||||||
|
|
||||||
|
msg = mio_dns_make_msg(dnc->mio, bdns, qr, qr_count, rr, rr_count, edns, MIO_SIZEOF(*msgxtn) + xtnsize);
|
||||||
|
if (!msg) return MIO_NULL;
|
||||||
|
|
||||||
|
if (bdns->id < 0)
|
||||||
|
{
|
||||||
|
mio_dns_pkt_t* pkt = mio_dns_msg_to_pkt(msg);
|
||||||
|
pkt->id = mio_hton16(dnc->seq);
|
||||||
|
dnc->seq++;
|
||||||
|
}
|
||||||
|
|
||||||
|
msgxtn = dnc_dns_msg_getxtn(msg);
|
||||||
|
msgxtn->dev = dnc->udp_sck;
|
||||||
|
msgxtn->rtmridx = MIO_TMRIDX_INVALID;
|
||||||
|
msgxtn->on_done = on_done;
|
||||||
|
msgxtn->wtmout = dnc->send_tmout;
|
||||||
|
msgxtn->rtmout = dnc->reply_tmout;
|
||||||
|
msgxtn->rmaxtries = dnc->reply_tmout_max_tries;
|
||||||
|
msgxtn->rtries = 0;
|
||||||
|
msgxtn->servaddr = dnc->serv_addr;
|
||||||
|
|
||||||
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void release_dns_msg (mio_svc_dnc_t* dnc, mio_dns_msg_t* msg)
|
static void release_dns_msg (mio_svc_dnc_t* dnc, mio_dns_msg_t* msg)
|
||||||
@ -312,6 +343,8 @@ static int on_tcp_write (mio_dev_sck_t* dev, mio_iolen_t wrlen, void* wrctx, con
|
|||||||
MIO_DEBUG0 (mio, "unable to schedule tcp timeout...\n");
|
MIO_DEBUG0 (mio, "unable to schedule tcp timeout...\n");
|
||||||
goto finalize;
|
goto finalize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MIO_ASSERT (mio, msgxtn->pending == 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -328,10 +361,9 @@ finalize:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void write_dns_msg_over_tcp (mio_dev_sck_t* dev, mio_dns_msg_t* msg)
|
static int write_dns_msg_over_tcp (mio_dev_sck_t* dev, mio_dns_msg_t* msg)
|
||||||
{
|
{
|
||||||
mio_t* mio = dev->mio;
|
mio_t* mio = dev->mio;
|
||||||
mio_svc_dnc_t* dnc = ((dnc_sck_xtn_t*)mio_dev_sck_getxtn(dev))->dnc;
|
|
||||||
dnc_dns_msg_xtn_t* msgxtn = dnc_dns_msg_getxtn(msg);
|
dnc_dns_msg_xtn_t* msgxtn = dnc_dns_msg_getxtn(msg);
|
||||||
mio_uint16_t pktlen;
|
mio_uint16_t pktlen;
|
||||||
mio_iovec_t iov[2];
|
mio_iovec_t iov[2];
|
||||||
@ -339,18 +371,14 @@ static void write_dns_msg_over_tcp (mio_dev_sck_t* dev, mio_dns_msg_t* msg)
|
|||||||
pktlen = mio_hton16(msg->pktlen);
|
pktlen = mio_hton16(msg->pktlen);
|
||||||
|
|
||||||
MIO_ASSERT (mio, msgxtn->rtries == 0);
|
MIO_ASSERT (mio, msgxtn->rtries == 0);
|
||||||
msgxtn->rtries = 1; /* this is the first send. however, there will be no retries over tcp */
|
msgxtn->rtries = 1;
|
||||||
|
|
||||||
/* TODO: Is it better to create 2 byte space when sending UDP and use it here instead of iov? */
|
/* TODO: Is it better to create 2 byte space when sending UDP and use it here instead of iov? */
|
||||||
iov[0].iov_ptr = &pktlen;
|
iov[0].iov_ptr = &pktlen;
|
||||||
iov[0].iov_len = MIO_SIZEOF(pktlen);
|
iov[0].iov_len = MIO_SIZEOF(pktlen);
|
||||||
iov[1].iov_ptr = mio_dns_msg_to_pkt(msg);
|
iov[1].iov_ptr = mio_dns_msg_to_pkt(msg);
|
||||||
iov[1].iov_len = msg->pktlen;
|
iov[1].iov_len = msg->pktlen;
|
||||||
if (mio_dev_sck_timedwritev(dev, iov, MIO_COUNTOF(iov), &msgxtn->rtmout, msg, MIO_NULL) <= -1)
|
return mio_dev_sck_timedwritev(dev, iov, MIO_COUNTOF(iov), &msgxtn->rtmout, msg, MIO_NULL);
|
||||||
{
|
|
||||||
if (MIO_LIKELY(msgxtn->on_done)) msgxtn->on_done (dnc, msg, mio_geterrnum(mio), MIO_NULL, 0);
|
|
||||||
release_dns_msg (dnc, msg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void on_tcp_connect (mio_dev_sck_t* dev)
|
static void on_tcp_connect (mio_dev_sck_t* dev)
|
||||||
@ -367,7 +395,14 @@ static void on_tcp_connect (mio_dev_sck_t* dev)
|
|||||||
dnc_dns_msg_xtn_t* reqmsgxtn = dnc_dns_msg_getxtn(reqmsg);
|
dnc_dns_msg_xtn_t* reqmsgxtn = dnc_dns_msg_getxtn(reqmsg);
|
||||||
mio_dns_msg_t* nextreqmsg = reqmsgxtn->next;
|
mio_dns_msg_t* nextreqmsg = reqmsgxtn->next;
|
||||||
|
|
||||||
if (reqmsgxtn->dev == dev && reqmsgxtn->rtries <= 0) write_dns_msg_over_tcp (dev, reqmsg);
|
if (reqmsgxtn->dev == dev && reqmsgxtn->rtries == 0)
|
||||||
|
{
|
||||||
|
if (write_dns_msg_over_tcp(dev, reqmsg) <= -1)
|
||||||
|
{
|
||||||
|
if (MIO_LIKELY(reqmsgxtn->on_done)) reqmsgxtn->on_done (dnc, reqmsg, mio_geterrnum(mio), MIO_NULL, 0);
|
||||||
|
release_dns_msg (dnc, reqmsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
reqmsg = nextreqmsg;
|
reqmsg = nextreqmsg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -465,13 +500,18 @@ static int switch_reqmsg_transport_to_tcp (mio_svc_dnc_t* dnc, mio_dns_msg_t* re
|
|||||||
MIO_ASSERT (mio, reqmsgxtn->rtmridx == MIO_TMRIDX_INVALID); /* ensure no timer job scheduled at this moment */
|
MIO_ASSERT (mio, reqmsgxtn->rtmridx == MIO_TMRIDX_INVALID); /* ensure no timer job scheduled at this moment */
|
||||||
reqmsgxtn->dev = dnc->tcp_sck;
|
reqmsgxtn->dev = dnc->tcp_sck;
|
||||||
reqmsgxtn->rtries = 0;
|
reqmsgxtn->rtries = 0;
|
||||||
|
if (!reqmsgxtn->pending && mio_dns_msg_to_pkt(reqmsg)->qr == 0) chain_pending_dns_reqmsg (dnc, reqmsg);
|
||||||
|
|
||||||
printf ("SWITCHED >>>>>>>>>>>>>>>>> %p %p %p %p %p\n", reqmsg, reqmsgxtn, reqmsgxtn->dev, dnc->udp_sck, dnc->tcp_sck);
|
printf ("SWITCHED >>>>>>>>>>>>>>>>> %p %p %p %p %p\n", reqmsg, reqmsgxtn, reqmsgxtn->dev, dnc->udp_sck, dnc->tcp_sck);
|
||||||
|
|
||||||
if (MIO_DEV_SCK_GET_PROGRESS(dnc->tcp_sck) & MIO_DEV_SCK_CONNECTED)
|
if (MIO_DEV_SCK_GET_PROGRESS(dnc->tcp_sck) & MIO_DEV_SCK_CONNECTED)
|
||||||
{
|
{
|
||||||
write_dns_msg_over_tcp (reqmsgxtn->dev, reqmsg);
|
if (write_dns_msg_over_tcp(reqmsgxtn->dev, reqmsg) <= -1)
|
||||||
/* the caller must not use reqmsg from now because write_dns_msg_over_tcp() may release 'reqmsg' */
|
{
|
||||||
|
/* the caller must not use reqmsg from now because it's freed here */
|
||||||
|
if (MIO_LIKELY(reqmsgxtn->on_done)) reqmsgxtn->on_done (dnc, reqmsg, mio_geterrnum(mio), MIO_NULL, 0);
|
||||||
|
release_dns_msg (dnc, reqmsg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -737,36 +777,28 @@ void mio_svc_dnc_stop (mio_svc_dnc_t* dnc)
|
|||||||
mio_freemem (mio, dnc);
|
mio_freemem (mio, dnc);
|
||||||
}
|
}
|
||||||
|
|
||||||
mio_dns_msg_t* mio_svc_dnc_sendmsg (mio_svc_dnc_t* dnc, mio_dns_bhdr_t* bdns, mio_dns_bqr_t* qr, mio_oow_t qr_count, mio_dns_brr_t* rr, mio_oow_t rr_count, mio_dns_bedns_t* edns, mio_svc_dnc_on_done_t on_done, mio_oow_t xtnsize)
|
|
||||||
|
static MIO_INLINE int send_dns_msg (mio_svc_dnc_t* dnc, mio_dns_msg_t* msg, int prefer_tcp)
|
||||||
|
{
|
||||||
|
dnc_dns_msg_xtn_t* msgxtn = dnc_dns_msg_getxtn(msg);
|
||||||
|
mio_ntime_t* tmout;
|
||||||
|
|
||||||
|
if (prefer_tcp && switch_reqmsg_transport_to_tcp(dnc, msg) >= 0) return 0;
|
||||||
|
|
||||||
|
tmout = MIO_IS_POS_NTIME(&msgxtn->wtmout)? &msgxtn->wtmout: MIO_NULL;
|
||||||
|
/* TODO: optionally, override dnc->serv_addr and use the target address passed as a parameter */
|
||||||
|
return mio_dev_sck_timedwrite(dnc->udp_sck, mio_dns_msg_to_pkt(msg), msg->pktlen, tmout, msg, &msgxtn->servaddr);
|
||||||
|
}
|
||||||
|
|
||||||
|
mio_dns_msg_t* mio_svc_dnc_sendmsg (mio_svc_dnc_t* dnc, mio_dns_bhdr_t* bdns, mio_dns_bqr_t* qr, mio_oow_t qr_count, mio_dns_brr_t* rr, mio_oow_t rr_count, mio_dns_bedns_t* edns, int prefer_tcp, mio_svc_dnc_on_done_t on_done, mio_oow_t xtnsize)
|
||||||
{
|
{
|
||||||
/* send a request or a response */
|
/* send a request or a response */
|
||||||
mio_dns_msg_t* msg;
|
mio_dns_msg_t* msg;
|
||||||
dnc_dns_msg_xtn_t* msgxtn;
|
|
||||||
mio_ntime_t* tmout;
|
|
||||||
|
|
||||||
msg = mio_dns_make_msg(dnc->mio, bdns, qr, qr_count, rr, rr_count, edns, MIO_SIZEOF(*msgxtn) + xtnsize);
|
msg = make_dns_msg(dnc, bdns, qr, qr_count, rr, rr_count, edns, on_done, xtnsize);
|
||||||
if (!msg) return MIO_NULL;
|
if (!msg) return MIO_NULL;
|
||||||
|
|
||||||
if (bdns->id < 0)
|
if (send_dns_msg(dnc, msg, prefer_tcp) <= -1) /* TODO: determine to prefer tcp or not before sending */
|
||||||
{
|
|
||||||
mio_dns_pkt_t* pkt = mio_dns_msg_to_pkt(msg);
|
|
||||||
pkt->id = mio_hton16(dnc->seq);
|
|
||||||
dnc->seq++;
|
|
||||||
}
|
|
||||||
|
|
||||||
msgxtn = dnc_dns_msg_getxtn(msg);
|
|
||||||
msgxtn->dev = dnc->udp_sck;
|
|
||||||
msgxtn->rtmridx = MIO_TMRIDX_INVALID;
|
|
||||||
msgxtn->on_done = on_done;
|
|
||||||
msgxtn->wtmout = dnc->send_tmout;
|
|
||||||
msgxtn->rtmout = dnc->reply_tmout;
|
|
||||||
msgxtn->rmaxtries = dnc->reply_tmout_max_tries;
|
|
||||||
msgxtn->rtries = 0;
|
|
||||||
msgxtn->servaddr = dnc->serv_addr;
|
|
||||||
|
|
||||||
/* TODO: optionally, override dnc->serv_addr and use the target address passed as a parameter */
|
|
||||||
tmout = MIO_IS_POS_NTIME(&msgxtn->wtmout)? &msgxtn->wtmout: MIO_NULL;
|
|
||||||
if (mio_dev_sck_timedwrite(dnc->udp_sck, mio_dns_msg_to_pkt(msg), msg->pktlen, tmout, msg, &msgxtn->servaddr) <= -1)
|
|
||||||
{
|
{
|
||||||
release_dns_msg (dnc, msg);
|
release_dns_msg (dnc, msg);
|
||||||
return MIO_NULL;
|
return MIO_NULL;
|
||||||
@ -775,7 +807,7 @@ mio_dns_msg_t* mio_svc_dnc_sendmsg (mio_svc_dnc_t* dnc, mio_dns_bhdr_t* bdns, mi
|
|||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
mio_dns_msg_t* mio_svc_dnc_sendreq (mio_svc_dnc_t* dnc, mio_dns_bhdr_t* bdns, mio_dns_bqr_t* qr, mio_dns_bedns_t* edns, mio_svc_dnc_on_done_t on_done, mio_oow_t xtnsize)
|
mio_dns_msg_t* mio_svc_dnc_sendreq (mio_svc_dnc_t* dnc, mio_dns_bhdr_t* bdns, mio_dns_bqr_t* qr, mio_dns_bedns_t* edns, int prefer_tcp, mio_svc_dnc_on_done_t on_done, mio_oow_t xtnsize)
|
||||||
{
|
{
|
||||||
/* send a request without resource records */
|
/* send a request without resource records */
|
||||||
if (bdns->rcode != MIO_DNS_RCODE_NOERROR)
|
if (bdns->rcode != MIO_DNS_RCODE_NOERROR)
|
||||||
@ -784,7 +816,7 @@ mio_dns_msg_t* mio_svc_dnc_sendreq (mio_svc_dnc_t* dnc, mio_dns_bhdr_t* bdns, mi
|
|||||||
return MIO_NULL;
|
return MIO_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mio_svc_dnc_sendmsg(dnc, bdns, qr, 1, MIO_NULL, 0, edns, on_done, xtnsize);
|
return mio_svc_dnc_sendmsg(dnc, bdns, qr, 1, MIO_NULL, 0, edns, prefer_tcp, on_done, xtnsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
@ -922,19 +954,25 @@ mio_dns_msg_t* mio_svc_dnc_resolve (mio_svc_dnc_t* dnc, const mio_bch_t* qname,
|
|||||||
|
|
||||||
mio_dns_bqr_t qr;
|
mio_dns_bqr_t qr;
|
||||||
mio_dns_msg_t* reqmsg;
|
mio_dns_msg_t* reqmsg;
|
||||||
dnc_dns_msg_resolve_xtn_t* reqmsgxtn;
|
dnc_dns_msg_resolve_xtn_t* resolxtn;
|
||||||
|
|
||||||
qr.qname = (mio_bch_t*)qname;
|
qr.qname = (mio_bch_t*)qname;
|
||||||
qr.qtype = qtype;
|
qr.qtype = qtype;
|
||||||
qr.qclass = MIO_DNS_RRC_IN;
|
qr.qclass = MIO_DNS_RRC_IN;
|
||||||
|
|
||||||
reqmsg = mio_svc_dnc_sendmsg(dnc, &qhdr, &qr, 1, MIO_NULL, 0, &qedns, on_dnc_resolve, MIO_SIZEOF(*reqmsgxtn) + xtnsize);
|
reqmsg = make_dns_msg(dnc, &qhdr, &qr, 1, MIO_NULL, 0, &qedns, on_dnc_resolve, MIO_SIZEOF(*resolxtn) + xtnsize);
|
||||||
if (reqmsg)
|
if (reqmsg)
|
||||||
{
|
{
|
||||||
reqmsgxtn = dnc_dns_msg_resolve_getxtn(reqmsg);
|
resolxtn = dnc_dns_msg_resolve_getxtn(reqmsg);
|
||||||
reqmsgxtn->on_resolve = on_resolve;
|
resolxtn->on_resolve = on_resolve;
|
||||||
reqmsgxtn->qtype = qtype;
|
resolxtn->qtype = qtype;
|
||||||
reqmsgxtn->flags = flags;
|
resolxtn->flags = flags;
|
||||||
|
|
||||||
|
if (send_dns_msg(dnc, reqmsg, ((flags & MIO_SVC_DNC_RESOLVE_FLAG_PREFER_TCP) || qtype == MIO_DNS_RRT_Q_AFXR)) <= -1)
|
||||||
|
{
|
||||||
|
release_dns_msg (dnc, reqmsg);
|
||||||
|
return MIO_NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return reqmsg;
|
return reqmsg;
|
||||||
|
@ -392,7 +392,8 @@ typedef void (*mio_svc_dnc_on_resolve_t) (
|
|||||||
|
|
||||||
enum mio_svc_dnc_resolve_flag_t
|
enum mio_svc_dnc_resolve_flag_t
|
||||||
{
|
{
|
||||||
MIO_SVC_DNC_RESOLVE_FLAG_BRIEF = (1 << 0)
|
MIO_SVC_DNC_RESOLVE_FLAG_BRIEF = (1 << 0),
|
||||||
|
MIO_SVC_DNC_RESOLVE_FLAG_PREFER_TCP = (1 << 1)
|
||||||
};
|
};
|
||||||
typedef enum mio_svc_dnc_resolve_flag_t mio_svc_dnc_resolve_flag_t;
|
typedef enum mio_svc_dnc_resolve_flag_t mio_svc_dnc_resolve_flag_t;
|
||||||
|
|
||||||
@ -462,6 +463,7 @@ MIO_EXPORT mio_dns_msg_t* mio_svc_dnc_sendmsg (
|
|||||||
mio_dns_brr_t* rr,
|
mio_dns_brr_t* rr,
|
||||||
mio_oow_t rr_count,
|
mio_oow_t rr_count,
|
||||||
mio_dns_bedns_t* edns,
|
mio_dns_bedns_t* edns,
|
||||||
|
int prefer_tcp,
|
||||||
mio_svc_dnc_on_done_t on_done,
|
mio_svc_dnc_on_done_t on_done,
|
||||||
mio_oow_t xtnsize
|
mio_oow_t xtnsize
|
||||||
);
|
);
|
||||||
@ -471,6 +473,7 @@ MIO_EXPORT mio_dns_msg_t* mio_svc_dnc_sendreq (
|
|||||||
mio_dns_bhdr_t* bdns,
|
mio_dns_bhdr_t* bdns,
|
||||||
mio_dns_bqr_t* qr,
|
mio_dns_bqr_t* qr,
|
||||||
mio_dns_bedns_t* edns,
|
mio_dns_bedns_t* edns,
|
||||||
|
int prefer_tcp,
|
||||||
mio_svc_dnc_on_done_t on_done,
|
mio_svc_dnc_on_done_t on_done,
|
||||||
mio_oow_t xtnsize
|
mio_oow_t xtnsize
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user