Style fixes
This commit is contained in:
committed by
Ondřej Surý
parent
be287351f6
commit
e6e02d534a
@@ -105,10 +105,11 @@ typedef struct isc__netievent_stop {
|
||||
isc__netievent_type type;
|
||||
} isc__netievent_stop_t;
|
||||
|
||||
/* We have to split it because we can read and write on a socket simultaneously */
|
||||
/* We have to split it because we can read and write on a socket simultaneously
|
||||
* */
|
||||
typedef union {
|
||||
isc_nm_recv_cb_t recv;
|
||||
isc_nm_accept_cb_t accept;
|
||||
isc_nm_recv_cb_t recv;
|
||||
isc_nm_accept_cb_t accept;
|
||||
} isc__nm_readcb_t;
|
||||
|
||||
typedef union {
|
||||
@@ -133,16 +134,16 @@ typedef union {
|
||||
#define VALID_UVREQ(t) ISC_MAGIC_VALID(t, UVREQ_MAGIC)
|
||||
|
||||
typedef struct isc__nm_uvreq {
|
||||
int magic;
|
||||
isc_nm_t * mgr;
|
||||
uv_buf_t uvbuf; /* translated isc_region_t, to be sent or
|
||||
* received */
|
||||
isc_sockaddr_t local; /* local address */
|
||||
isc_sockaddr_t peer; /* peer address */
|
||||
isc__nm_cb_t cb; /* callback */
|
||||
void * cbarg;
|
||||
isc_nmhandle_t * handle;
|
||||
ck_stack_entry_t ilink;
|
||||
int magic;
|
||||
isc_nm_t * mgr;
|
||||
uv_buf_t uvbuf; /* translated isc_region_t, to be sent or
|
||||
* received */
|
||||
isc_sockaddr_t local; /* local address */
|
||||
isc_sockaddr_t peer; /* peer address */
|
||||
isc__nm_cb_t cb; /* callback */
|
||||
void * cbarg;
|
||||
isc_nmhandle_t * handle;
|
||||
ck_stack_entry_t ilink;
|
||||
union {
|
||||
uv_req_t req;
|
||||
uv_getaddrinfo_t getaddrinfo;
|
||||
@@ -253,17 +254,17 @@ typedef enum isc_nmsocket_type {
|
||||
#define NMSOCK_MAGIC ISC_MAGIC('N', 'M', 'S', 'K')
|
||||
#define VALID_NMSOCK(t) ISC_MAGIC_VALID(t, NMSOCK_MAGIC)
|
||||
struct isc_nmsocket {
|
||||
int magic;
|
||||
isc_nmsocket_type type;
|
||||
isc_refcount_t refs;
|
||||
isc_nm_t * mgr;
|
||||
isc_nmsocket_t * parent;
|
||||
isc_nmsocket_t * children;
|
||||
int nchildren;
|
||||
atomic_int_fast32_t rchildren;
|
||||
int tid;
|
||||
isc_nmiface_t * iface;
|
||||
isc_nmhandle_t tcphandle;
|
||||
int magic;
|
||||
isc_nmsocket_type type;
|
||||
isc_refcount_t refs;
|
||||
isc_nm_t * mgr;
|
||||
isc_nmsocket_t * parent;
|
||||
isc_nmsocket_t * children;
|
||||
int nchildren;
|
||||
atomic_int_fast32_t rchildren;
|
||||
int tid;
|
||||
isc_nmiface_t * iface;
|
||||
isc_nmhandle_t tcphandle;
|
||||
/*
|
||||
* 'spare' handles for that can be reused to avoid allocations,
|
||||
* for UDP.
|
||||
@@ -281,10 +282,10 @@ struct isc_nmsocket {
|
||||
uv_tcp_t tcp;
|
||||
} uv_handle;
|
||||
|
||||
isc__nm_readcb_t rcb;
|
||||
void * rcbarg;
|
||||
isc__nm_writecb_t wcb;
|
||||
void * wcbarg;
|
||||
isc__nm_readcb_t rcb;
|
||||
void * rcbarg;
|
||||
isc__nm_writecb_t wcb;
|
||||
void * wcbarg;
|
||||
};
|
||||
|
||||
/* Return thread id of current thread, or ISC_NETMGR_TID_UNKNOWN */
|
||||
@@ -317,7 +318,9 @@ void
|
||||
isc__nm_uvreq_put(isc__nm_uvreq_t **req, isc_nmsocket_t *socket);
|
||||
|
||||
void
|
||||
isc__nmsocket_init(isc_nmsocket_t *socket, isc_nm_t *mgr, isc_nmsocket_type type);
|
||||
isc__nmsocket_init(isc_nmsocket_t *socket,
|
||||
isc_nm_t *mgr,
|
||||
isc_nmsocket_type type);
|
||||
|
||||
/*
|
||||
* Send for UDP handle
|
||||
@@ -333,7 +336,8 @@ isc__nm_udp_send(isc_nmhandle_t *handle,
|
||||
void
|
||||
isc__nm_handle_udplisten(isc__networker_t *worker, isc__netievent_t *ievent0);
|
||||
void
|
||||
isc__nm_handle_udpstoplisten(isc__networker_t *worker, isc__netievent_t *ievent0);
|
||||
isc__nm_handle_udpstoplisten(isc__networker_t *worker,
|
||||
isc__netievent_t *ievent0);
|
||||
void
|
||||
isc__nm_handle_udpsend(isc__networker_t *worker, isc__netievent_t *ievent0);
|
||||
|
||||
@@ -351,7 +355,7 @@ isc__nm_tcp_send(isc_nmhandle_t *handle,
|
||||
/*
|
||||
* Async callbacks for TCP
|
||||
*/
|
||||
|
||||
|
||||
void
|
||||
isc__nm_handle_tcpconnect(isc__networker_t *worker, isc__netievent_t *ievent0);
|
||||
void
|
||||
@@ -362,8 +366,8 @@ void
|
||||
isc__nm_handle_startread(isc__networker_t *worker, isc__netievent_t *ievent0);
|
||||
|
||||
/* static void
|
||||
handle_stopread(isc__networker_t *worker, isc__netievent_t *ievent0);
|
||||
*/
|
||||
* handle_stopread(isc__networker_t *worker, isc__netievent_t *ievent0);
|
||||
*/
|
||||
|
||||
|
||||
isc_result_t
|
||||
|
||||
@@ -80,21 +80,19 @@ isc_nm_start(isc_mem_t *mctx, int workers) {
|
||||
char name[32];
|
||||
|
||||
mgr = isc_mem_get(mctx, sizeof(*mgr));
|
||||
mgr->mctx = NULL;
|
||||
*mgr = (isc_nm_t) { .nworkers = workers};
|
||||
isc_mem_attach(mctx, &mgr->mctx);
|
||||
isc_mutex_init(&mgr->lock);
|
||||
isc_condition_init(&mgr->wkstatecond);
|
||||
isc_refcount_init(&mgr->refs, 1);
|
||||
mgr->nworkers = workers;
|
||||
mgr->workers_running = 0;
|
||||
mgr->workers_paused = 0;
|
||||
|
||||
|
||||
mgr->workers = isc_mem_get(mctx, workers * sizeof(isc__networker_t));
|
||||
for (i = 0; i < workers; i++) {
|
||||
isc__networker_t *worker = &mgr->workers[i];
|
||||
worker->mgr = mgr;
|
||||
worker->id = i;
|
||||
mgr->workers[i] = (isc__networker_t) {
|
||||
.mgr = mgr,
|
||||
.id = i,
|
||||
.loop.data = &mgr->workers[i]
|
||||
};
|
||||
|
||||
r = uv_loop_init(&worker->loop);
|
||||
RUNTIME_CHECK(r == 0);
|
||||
@@ -106,16 +104,10 @@ isc_nm_start(isc_mem_t *mctx, int workers) {
|
||||
isc_mutex_init(&worker->lock);
|
||||
isc_condition_init(&worker->cond);
|
||||
|
||||
worker->paused = false;
|
||||
worker->finished = false;
|
||||
worker->loop.data = &mgr->workers[i];
|
||||
worker->mpool_bufs = NULL;
|
||||
isc_mempool_create(mgr->mctx, 65536, &worker->mpool_bufs);
|
||||
struct ck_fifo_mpmc_entry *stub =
|
||||
isc_mem_get(mgr->mctx, sizeof(*stub));
|
||||
ck_fifo_mpmc_init(&worker->ievents, stub);
|
||||
worker->pktcount = 0;
|
||||
worker->udprecvbuf_inuse = false;
|
||||
|
||||
result = isc_thread_create(nm_thread, &mgr->workers[i],
|
||||
&worker->thread);
|
||||
@@ -143,7 +135,8 @@ isc_nm_shutdown(isc_nm_t **mgr0) {
|
||||
LOCK(&mgr->workers[i].lock);
|
||||
mgr->workers[i].finished = true;
|
||||
UNLOCK(&mgr->workers[i].lock);
|
||||
isc__netievent_t *ievent = isc__nm_get_ievent(mgr, netievent_stop);
|
||||
isc__netievent_t *ievent = isc__nm_get_ievent(mgr,
|
||||
netievent_stop);
|
||||
isc__nm_enqueue_ievent(&mgr->workers[i], ievent);
|
||||
}
|
||||
while (mgr->workers_running > 0) {
|
||||
@@ -269,17 +262,17 @@ async_cb(uv_async_t *handle) {
|
||||
case netievent_tcplisten:
|
||||
isc__nm_handle_tcplisten(worker, ievent);
|
||||
break;
|
||||
case netievent_tcpstartread:
|
||||
isc__nm_handle_startread(worker, ievent);
|
||||
break;
|
||||
/* case netievent_tcpstopread:
|
||||
handle_stopread(worker, ievent);
|
||||
break; */
|
||||
case netievent_tcpstartread:
|
||||
isc__nm_handle_startread(worker, ievent);
|
||||
break;
|
||||
/* case netievent_tcpstopread:
|
||||
* handle_stopread(worker, ievent);
|
||||
* break; */
|
||||
case netievent_tcpsend:
|
||||
isc__nm_handle_tcpsend(worker, ievent);
|
||||
break;
|
||||
|
||||
|
||||
isc__nm_handle_tcpsend(worker, ievent);
|
||||
break;
|
||||
|
||||
|
||||
/* case netievent_tcpstoplisten:
|
||||
* handle_tcpstoplisten(worker, ievent);
|
||||
* break; */
|
||||
@@ -349,7 +342,9 @@ isc_nmsocket_detach(isc_nmsocket_t **socketp) {
|
||||
}
|
||||
|
||||
void
|
||||
isc__nmsocket_init(isc_nmsocket_t *socket, isc_nm_t *mgr, isc_nmsocket_type type) {
|
||||
isc__nmsocket_init(isc_nmsocket_t *socket,
|
||||
isc_nm_t *mgr,
|
||||
isc_nmsocket_type type) {
|
||||
*socket = (isc_nmsocket_t) {
|
||||
.type = type,
|
||||
.fd = -1
|
||||
@@ -459,7 +454,8 @@ isc_nmhandle_attach(isc_nmhandle_t *handle, isc_nmhandle_t **handlep) {
|
||||
|
||||
bool
|
||||
isc_nmhandle_is_stream(isc_nmhandle_t *handle) {
|
||||
return handle->socket->type == isc_nm_tcpsocket || handle->socket->type == isc_nm_tcpdnssocket;
|
||||
return(handle->socket->type == isc_nm_tcpsocket ||
|
||||
handle->socket->type == isc_nm_tcpdnssocket);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -576,7 +572,8 @@ isc__nm_uvreq_put(isc__nm_uvreq_t **req0, isc_nmsocket_t *socket) {
|
||||
*/
|
||||
mgr = req->mgr;
|
||||
req->mgr = NULL;
|
||||
if (! (socket != NULL && ck_stack_trypush_mpmc(&socket->inactivereqs, &req->ilink))) {
|
||||
if (!(socket != NULL &&
|
||||
ck_stack_trypush_mpmc(&socket->inactivereqs, &req->ilink))) {
|
||||
isc_mem_put(mgr->mctx, req, sizeof(isc__nm_uvreq_t));
|
||||
}
|
||||
isc_nm_detach(&mgr);
|
||||
@@ -590,7 +587,8 @@ isc_result_t
|
||||
isc_nm_send(isc_nmhandle_t *handle,
|
||||
isc_region_t *region,
|
||||
isc_nm_send_cb_t cb,
|
||||
void *cbarg) {
|
||||
void *cbarg)
|
||||
{
|
||||
switch (handle->socket->type) {
|
||||
case isc_nm_udpsocket:
|
||||
case isc_nm_udplistener:
|
||||
@@ -604,4 +602,3 @@ isc_nm_send(isc_nmhandle_t *handle,
|
||||
}
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
|
||||
|
||||
@@ -43,8 +43,7 @@ static int
|
||||
tcp_connect_direct(isc_nmsocket_t *socket, isc__nm_uvreq_t *req);
|
||||
|
||||
static isc_result_t
|
||||
tcp_send_direct(isc_nmsocket_t *socket,
|
||||
isc__nm_uvreq_t *req);
|
||||
tcp_send_direct(isc_nmsocket_t *socket, isc__nm_uvreq_t *req);
|
||||
static void
|
||||
tcp_connect_cb(uv_connect_t *uvreq, int status);
|
||||
|
||||
@@ -52,7 +51,7 @@ static void
|
||||
tcp_connection_cb(uv_stream_t *server, int status);
|
||||
|
||||
static void
|
||||
read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf);
|
||||
read_cb(uv_stream_t*stream, ssize_t nread, const uv_buf_t*buf);
|
||||
|
||||
|
||||
|
||||
@@ -131,7 +130,8 @@ tcp_connect_direct(isc_nmsocket_t *socket, isc__nm_uvreq_t *req)
|
||||
}
|
||||
|
||||
void
|
||||
isc__nm_handle_tcpconnect(isc__networker_t *worker, isc__netievent_t *ievent0) {
|
||||
isc__nm_handle_tcpconnect(isc__networker_t *worker,
|
||||
isc__netievent_t *ievent0) {
|
||||
int r;
|
||||
isc__netievent_tcpconnect_t *ievent =
|
||||
(isc__netievent_tcpconnect_t *) ievent0;
|
||||
@@ -173,7 +173,7 @@ isc_nm_tcp_listen(isc_nm_t *mgr,
|
||||
isc_nm_accept_cb_t cb,
|
||||
size_t extrahandlesize,
|
||||
void *cbarg,
|
||||
isc_nmsocket_t ** rv)
|
||||
isc_nmsocket_t **rv)
|
||||
{
|
||||
isc__netievent_tcplisten_t *ievent;
|
||||
INSIST(VALID_NM(mgr));
|
||||
@@ -193,7 +193,7 @@ isc_nm_tcp_listen(isc_nm_t *mgr,
|
||||
ievent = isc__nm_get_ievent(mgr, netievent_tcplisten);
|
||||
ievent->socket = nsocket;
|
||||
isc__nm_enqueue_ievent(&mgr->workers[nsocket->tid],
|
||||
(isc__netievent_t*) ievent);
|
||||
(isc__netievent_t*) ievent);
|
||||
*rv = nsocket;
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
@@ -207,7 +207,7 @@ isc__nm_handle_tcplisten(isc__networker_t *worker, isc__netievent_t *ievent0) {
|
||||
|
||||
REQUIRE(isc__nm_tid() >= 0);
|
||||
REQUIRE(socket->type == isc_nm_tcplistener);
|
||||
// REQUIRE(worker->id == ievent->req->mgr->workers[isc__nm_tid()].id);
|
||||
/* REQUIRE(worker->id == ievent->req->mgr->workers[isc__nm_tid()].id); */
|
||||
|
||||
r = uv_tcp_init(&worker->loop, &socket->uv_handle.tcp);
|
||||
if (r != 0) {
|
||||
@@ -224,21 +224,23 @@ isc__nm_handle_tcplisten(isc__networker_t *worker, isc__netievent_t *ievent0) {
|
||||
|
||||
|
||||
isc_result_t
|
||||
isc_nm_read(isc_nmhandle_t *handle, isc_nm_recv_cb_t cb, void* cbarg) {
|
||||
isc_nm_read(isc_nmhandle_t *handle, isc_nm_recv_cb_t cb, void*cbarg) {
|
||||
INSIST(VALID_NMHANDLE(handle));
|
||||
isc_nmsocket_t *socket = handle->socket;
|
||||
INSIST(VALID_NMSOCK(socket));
|
||||
socket->rcb.recv = cb;
|
||||
socket->rcbarg = cbarg; /* THat's obviously broken... */
|
||||
if (socket->tid == isc__nm_tid()) {
|
||||
uv_read_start(&socket->uv_handle.stream, isc__nm_alloc_cb, read_cb);
|
||||
uv_read_start(&socket->uv_handle.stream,
|
||||
isc__nm_alloc_cb,
|
||||
read_cb);
|
||||
} else {
|
||||
isc__netievent_startread_t *ievent =
|
||||
isc__nm_get_ievent(socket->mgr, netievent_tcpstartread);
|
||||
isc__nm_get_ievent(socket->mgr,
|
||||
netievent_tcpstartread);
|
||||
ievent->socket = socket;
|
||||
isc__nm_enqueue_ievent(&socket->mgr->workers[socket->tid],
|
||||
(isc__netievent_t*) ievent);
|
||||
|
||||
(isc__netievent_t*) ievent);
|
||||
}
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
@@ -248,14 +250,14 @@ isc__nm_handle_startread(isc__networker_t *worker, isc__netievent_t *ievent0) {
|
||||
isc__netievent_startread_t *ievent =
|
||||
(isc__netievent_startread_t *) ievent0;
|
||||
REQUIRE(worker->id == isc__nm_tid());
|
||||
|
||||
|
||||
isc_nmsocket_t *socket = ievent->socket;
|
||||
|
||||
uv_read_start(&socket->uv_handle.stream, isc__nm_alloc_cb, read_cb);
|
||||
}
|
||||
|
||||
static void
|
||||
read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) {
|
||||
read_cb(uv_stream_t*stream, ssize_t nread, const uv_buf_t*buf) {
|
||||
isc_nmsocket_t *socket = uv_handle_get_data((uv_handle_t*) stream);
|
||||
INSIST(buf != NULL);
|
||||
if (nread < 0) {
|
||||
@@ -263,7 +265,7 @@ read_cb(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) {
|
||||
/* XXXWPK TODO clean up handles! */
|
||||
return;
|
||||
}
|
||||
isc_region_t region = { .base = (unsigned char *) buf->base,
|
||||
isc_region_t region = { .base = (unsigned char *) buf->base,
|
||||
.length = nread };
|
||||
|
||||
INSIST(VALID_NMSOCK(socket));
|
||||
@@ -299,8 +301,10 @@ tcp_connection_cb(uv_stream_t *server, int status) {
|
||||
isc_sockaddr_t peer;
|
||||
struct sockaddr_storage ss;
|
||||
int l = sizeof(ss);
|
||||
uv_tcp_getpeername(&csocket->uv_handle.tcp, (struct sockaddr*) &ss, &l);
|
||||
isc_result_t result = isc_sockaddr_fromsockaddr(&peer, (struct sockaddr*) &ss);
|
||||
uv_tcp_getpeername(&csocket->uv_handle.tcp, (struct sockaddr*) &ss,
|
||||
&l);
|
||||
isc_result_t result =
|
||||
isc_sockaddr_fromsockaddr(&peer, (struct sockaddr*) &ss);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
isc_nmhandle_t *handle = isc__nm_get_handle(csocket, &peer);
|
||||
ssocket->rcb.accept(handle, ISC_R_SUCCESS, ssocket->rcbarg);
|
||||
@@ -320,7 +324,7 @@ isc__nm_tcp_send(isc_nmhandle_t *handle,
|
||||
isc__nm_uvreq_t *uvreq;
|
||||
|
||||
INSIST(socket->type == isc_nm_tcpsocket);
|
||||
|
||||
|
||||
uvreq = isc__nm_uvreq_get(socket->mgr, socket);
|
||||
uvreq->uvbuf.base = (char *) region->base;
|
||||
uvreq->uvbuf.len = region->length;
|
||||
@@ -342,7 +346,7 @@ isc__nm_tcp_send(isc_nmhandle_t *handle,
|
||||
ievent->handle.socket = socket;
|
||||
ievent->req = uvreq;
|
||||
isc__nm_enqueue_ievent(&socket->mgr->workers[socket->tid],
|
||||
(isc__netievent_t*) ievent);
|
||||
(isc__netievent_t*) ievent);
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
return (ISC_R_UNEXPECTED);
|
||||
@@ -376,18 +380,17 @@ tcp_send_cb(uv_write_t *req, int status) {
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
tcp_send_direct(isc_nmsocket_t *socket,
|
||||
isc__nm_uvreq_t *req)
|
||||
tcp_send_direct(isc_nmsocket_t *socket, isc__nm_uvreq_t *req)
|
||||
{
|
||||
int rv;
|
||||
INSIST(socket->tid == isc__nm_tid());
|
||||
INSIST(socket->type == isc_nm_tcpsocket);
|
||||
|
||||
rv = uv_write(&req->uv_req.write,
|
||||
&socket->uv_handle.stream,
|
||||
&req->uvbuf,
|
||||
1,
|
||||
tcp_send_cb);
|
||||
rv = uv_write(&req->uv_req.write,
|
||||
&socket->uv_handle.stream,
|
||||
&req->uvbuf,
|
||||
1,
|
||||
tcp_send_cb);
|
||||
if (rv == 0) {
|
||||
return (ISC_R_SUCCESS);
|
||||
} else {
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
|
||||
static void
|
||||
dnslisten_readcb(void *arg, isc_nmhandle_t* handle, isc_region_t *region);
|
||||
dnslisten_readcb(void *arg, isc_nmhandle_t*handle, isc_region_t *region);
|
||||
|
||||
|
||||
/*
|
||||
@@ -48,8 +48,10 @@ dnslisten_acceptcb(isc_nmhandle_t *handle, isc_result_t result, void *cbarg) {
|
||||
INSIST(dnslistensocket->type == isc_nm_tcpdnslistener);
|
||||
|
||||
/* We need to create a 'wrapper' dnssocket for this connection */
|
||||
isc_nmsocket_t *dnssocket = isc_mem_get(handle->socket->mgr->mctx, sizeof(*dnssocket));
|
||||
isc__nmsocket_init(dnssocket, handle->socket->mgr, isc_nm_tcpdnssocket);
|
||||
isc_nmsocket_t *dnssocket = isc_mem_get(handle->socket->mgr->mctx,
|
||||
sizeof(*dnssocket));
|
||||
isc__nmsocket_init(dnssocket, handle->socket->mgr,
|
||||
isc_nm_tcpdnssocket);
|
||||
/* We need to copy read callbacks from parent socket */
|
||||
dnssocket->rcb.recv = dnslistensocket->rcb.recv;
|
||||
dnssocket->rcbarg = dnslistensocket->rcbarg;
|
||||
@@ -63,14 +65,17 @@ dnslisten_acceptcb(isc_nmhandle_t *handle, isc_result_t result, void *cbarg) {
|
||||
* a complete DNS packet and, if so - call the callback
|
||||
*/
|
||||
static void
|
||||
dnslisten_readcb(void *arg, isc_nmhandle_t* handle, isc_region_t *region) {
|
||||
dnslisten_readcb(void *arg, isc_nmhandle_t*handle, isc_region_t *region) {
|
||||
/* A 'wrapper' handle */
|
||||
(void)handle;
|
||||
isc_nmsocket_t *dnssocket = (isc_nmsocket_t*) arg;
|
||||
/* XXXWPK for the love of all that is holy fix it, that's so wrong */
|
||||
INSIST(((region->base[0] << 8) + (region->base[1]) == (int) region->length - 2));
|
||||
isc_nmhandle_t *dnshandle = isc__nm_get_handle(dnssocket, &handle->peer);
|
||||
isc_region_t r2 = {.base = region->base+2, .length = region->length-2};
|
||||
INSIST(((region->base[0] << 8) + (region->base[1]) ==
|
||||
(int) region->length - 2));
|
||||
isc_nmhandle_t *dnshandle =
|
||||
isc__nm_get_handle(dnssocket, &handle->peer);
|
||||
isc_region_t r2 =
|
||||
{.base = region->base + 2, .length = region->length - 2};
|
||||
dnssocket->rcb.recv(dnssocket->rcbarg, dnshandle, &r2);
|
||||
}
|
||||
|
||||
@@ -90,16 +95,17 @@ isc_nm_tcp_dnslisten(isc_nm_t *mgr,
|
||||
isc_result_t result;
|
||||
|
||||
/* A 'wrapper' socket object with parent set to true TCP socket */
|
||||
isc_nmsocket_t *dnslistensocket = isc_mem_get(mgr->mctx, sizeof(*dnslistensocket));
|
||||
isc_nmsocket_t *dnslistensocket =
|
||||
isc_mem_get(mgr->mctx, sizeof(*dnslistensocket));
|
||||
isc__nmsocket_init(dnslistensocket, mgr, isc_nm_tcpdnslistener);
|
||||
dnslistensocket->iface = iface;
|
||||
dnslistensocket->rcb.recv = cb;
|
||||
dnslistensocket->rcbarg = cbarg;
|
||||
dnslistensocket->extrahandlesize = extrahandlesize;
|
||||
|
||||
|
||||
/* We set dnslistensocket->parent to a true listening socket */
|
||||
result = isc_nm_tcp_listen(mgr,
|
||||
iface,
|
||||
iface,
|
||||
dnslisten_acceptcb,
|
||||
extrahandlesize,
|
||||
dnslistensocket,
|
||||
@@ -109,16 +115,16 @@ isc_nm_tcp_dnslisten(isc_nm_t *mgr,
|
||||
}
|
||||
|
||||
typedef struct tcpsend {
|
||||
isc_nmhandle_t *handle;
|
||||
isc_region_t region;
|
||||
isc_nmhandle_t *orighandle;
|
||||
isc_nm_send_cb_t cb;
|
||||
void* cbarg;
|
||||
isc_nmhandle_t * handle;
|
||||
isc_region_t region;
|
||||
isc_nmhandle_t * orighandle;
|
||||
isc_nm_send_cb_t cb;
|
||||
void* cbarg;
|
||||
} tcpsend_t;
|
||||
|
||||
static void
|
||||
tcpdnssend_cb(isc_nmhandle_t *handle, isc_result_t result, void *cbarg) {
|
||||
tcpsend_t* ts = (tcpsend_t*) cbarg;
|
||||
tcpsend_t*ts = (tcpsend_t*) cbarg;
|
||||
(void) handle;
|
||||
ts->cb(ts->orighandle, result, ts->cbarg);
|
||||
}
|
||||
@@ -134,15 +140,17 @@ isc__nm_tcpdns_send(isc_nmhandle_t *handle,
|
||||
isc_nmsocket_t *socket = handle->socket;
|
||||
|
||||
INSIST(socket->type == isc_nm_tcpdnssocket);
|
||||
tcpsend_t * t = malloc(sizeof(*t));
|
||||
tcpsend_t *t = malloc(sizeof(*t));
|
||||
*t = (tcpsend_t) {};
|
||||
t->handle = &handle->socket->parent->tcphandle;
|
||||
t->cb = cb;
|
||||
t->cbarg = cbarg;
|
||||
t->region = (isc_region_t) { .base = malloc(region->length+2), .length=region->length+2 };
|
||||
memmove(t->region.base+2, region->base, region->length);
|
||||
t->region.base[0] = (uint8_t) (region->length>>8);
|
||||
t->region.base[1] = (uint8_t) (region->length&0xff);
|
||||
t->region =
|
||||
(isc_region_t) { .base = malloc(region->length + 2),
|
||||
.length = region->length + 2 };
|
||||
memmove(t->region.base + 2, region->base, region->length);
|
||||
t->region.base[0] = (uint8_t) (region->length >> 8);
|
||||
t->region.base[1] = (uint8_t) (region->length & 0xff);
|
||||
isc_nmhandle_attach(handle, &t->orighandle);
|
||||
return (isc__nm_tcp_send(t->handle, &t->region, tcpdnssend_cb, t));
|
||||
}
|
||||
|
||||
@@ -104,7 +104,8 @@ isc_nm_udp_listen(isc_nm_t *mgr,
|
||||
INSIST(res == 0);
|
||||
ievent = isc__nm_get_ievent(mgr, netievent_udplisten);
|
||||
ievent->socket = csocket;
|
||||
isc__nm_enqueue_ievent(&mgr->workers[i], (isc__netievent_t*) ievent);
|
||||
isc__nm_enqueue_ievent(&mgr->workers[i],
|
||||
(isc__netievent_t*) ievent);
|
||||
}
|
||||
*rv = nsocket;
|
||||
return (ISC_R_SUCCESS);
|
||||
@@ -121,10 +122,11 @@ isc_nm_udp_stoplistening(isc_nmsocket_t *socket) {
|
||||
|
||||
for (i = 0; i < socket->nchildren; i++) {
|
||||
isc__netievent_udpstoplisten_t *ievent;
|
||||
ievent = isc__nm_get_ievent(socket->mgr, netievent_udpstoplisten);
|
||||
ievent = isc__nm_get_ievent(socket->mgr,
|
||||
netievent_udpstoplisten);
|
||||
ievent->socket = &socket->children[i];
|
||||
isc__nm_enqueue_ievent(&socket->mgr->workers[i],
|
||||
(isc__netievent_t*) ievent);
|
||||
(isc__netievent_t*) ievent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,7 +151,8 @@ isc__nm_handle_udplisten(isc__networker_t *worker, isc__netievent_t *ievent0) {
|
||||
uv_udp_bind(&socket->uv_handle.udp,
|
||||
&socket->parent->iface->addr.type.sa,
|
||||
0);
|
||||
uv_udp_recv_start(&socket->uv_handle.udp, isc__nm_alloc_cb, udp_recv_cb);
|
||||
uv_udp_recv_start(&socket->uv_handle.udp, isc__nm_alloc_cb,
|
||||
udp_recv_cb);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -161,7 +164,8 @@ udp_close_cb(uv_handle_t *handle) {
|
||||
* handle 'udpstoplisten' async call - stop listening on a socket.
|
||||
*/
|
||||
void
|
||||
isc__nm_handle_udpstoplisten(isc__networker_t *worker, isc__netievent_t *ievent0) {
|
||||
isc__nm_handle_udpstoplisten(isc__networker_t *worker,
|
||||
isc__netievent_t *ievent0) {
|
||||
(void) worker;
|
||||
ck_stack_entry_t *sentry;
|
||||
isc__netievent_udplisten_t *ievent =
|
||||
@@ -292,7 +296,7 @@ isc__nm_udp_send(isc_nmhandle_t *handle,
|
||||
ievent->handle.peer = *peer;
|
||||
ievent->req = uvreq;
|
||||
isc__nm_enqueue_ievent(&socket->mgr->workers[rsocket->tid],
|
||||
(isc__netievent_t*) ievent);
|
||||
(isc__netievent_t*) ievent);
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
return (ISC_R_UNEXPECTED);
|
||||
@@ -336,8 +340,8 @@ udp_send_cb(uv_udp_send_t *req, int status) {
|
||||
*/
|
||||
static isc_result_t
|
||||
udp_send_direct(isc_nmsocket_t *socket,
|
||||
isc__nm_uvreq_t *req,
|
||||
isc_sockaddr_t *peer)
|
||||
isc__nm_uvreq_t *req,
|
||||
isc_sockaddr_t *peer)
|
||||
{
|
||||
int rv;
|
||||
INSIST(socket->tid == isc__nm_tid());
|
||||
|
||||
Reference in New Issue
Block a user