mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-14 23:05:03 -04:00
Merge branch 'be-openssl-more-common-with-be-sock'
* be-openssl-more-common-with-be-sock: be_openssl: use bufferevent_enable() instead of bufferevent_add_event_() be_sock: drop be_sock_add() macro (useless and debug unfriendly) be: introduce bufferevent_generic_adj_existing_timeouts_() be_openssl: don't add events during bev creation (like be_sock) be: add_event: use evutil_timerisset()
This commit is contained in:
commit
29573f0db4
@ -412,6 +412,7 @@ void bufferevent_init_generic_timeout_cbs_(struct bufferevent *bev);
|
|||||||
* we delete it.) Call this from anything that changes the timeout values,
|
* we delete it.) Call this from anything that changes the timeout values,
|
||||||
* that enabled EV_READ or EV_WRITE, or that disables EV_READ or EV_WRITE. */
|
* that enabled EV_READ or EV_WRITE, or that disables EV_READ or EV_WRITE. */
|
||||||
int bufferevent_generic_adj_timeouts_(struct bufferevent *bev);
|
int bufferevent_generic_adj_timeouts_(struct bufferevent *bev);
|
||||||
|
int bufferevent_generic_adj_existing_timeouts_(struct bufferevent *bev);
|
||||||
|
|
||||||
enum bufferevent_options bufferevent_get_options_(struct bufferevent *bev);
|
enum bufferevent_options bufferevent_get_options_(struct bufferevent *bev);
|
||||||
|
|
||||||
|
@ -969,10 +969,33 @@ bufferevent_generic_adj_timeouts_(struct bufferevent *bev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
bufferevent_generic_adj_existing_timeouts_(struct bufferevent *bev)
|
||||||
|
{
|
||||||
|
int r = 0;
|
||||||
|
if (event_pending(&bev->ev_read, EV_READ, NULL)) {
|
||||||
|
if (evutil_timerisset(&bev->timeout_read)) {
|
||||||
|
if (bufferevent_add_event_(&bev->ev_read, &bev->timeout_read) < 0)
|
||||||
|
r = -1;
|
||||||
|
} else {
|
||||||
|
event_remove_timer(&bev->ev_read);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (event_pending(&bev->ev_write, EV_WRITE, NULL)) {
|
||||||
|
if (evutil_timerisset(&bev->timeout_write)) {
|
||||||
|
if (bufferevent_add_event_(&bev->ev_write, &bev->timeout_write) < 0)
|
||||||
|
r = -1;
|
||||||
|
} else {
|
||||||
|
event_remove_timer(&bev->ev_write);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
bufferevent_add_event_(struct event *ev, const struct timeval *tv)
|
bufferevent_add_event_(struct event *ev, const struct timeval *tv)
|
||||||
{
|
{
|
||||||
if (tv->tv_sec == 0 && tv->tv_usec == 0)
|
if (!evutil_timerisset(tv))
|
||||||
return event_add(ev, NULL);
|
return event_add(ev, NULL);
|
||||||
else
|
else
|
||||||
return event_add(ev, tv);
|
return event_add(ev, tv);
|
||||||
|
@ -1090,7 +1090,6 @@ set_handshake_callbacks(struct bufferevent_openssl *bev_ssl, evutil_socket_t fd)
|
|||||||
return do_handshake(bev_ssl);
|
return do_handshake(bev_ssl);
|
||||||
} else {
|
} else {
|
||||||
struct bufferevent *bev = &bev_ssl->bev.bev;
|
struct bufferevent *bev = &bev_ssl->bev.bev;
|
||||||
int r1=0, r2=0;
|
|
||||||
|
|
||||||
if (event_initialized(&bev->ev_read)) {
|
if (event_initialized(&bev->ev_read)) {
|
||||||
event_del(&bev->ev_read);
|
event_del(&bev->ev_read);
|
||||||
@ -1103,11 +1102,9 @@ set_handshake_callbacks(struct bufferevent_openssl *bev_ssl, evutil_socket_t fd)
|
|||||||
event_assign(&bev->ev_write, bev->ev_base, fd,
|
event_assign(&bev->ev_write, bev->ev_base, fd,
|
||||||
EV_WRITE|EV_PERSIST|EV_FINALIZE,
|
EV_WRITE|EV_PERSIST|EV_FINALIZE,
|
||||||
be_openssl_handshakeeventcb, bev_ssl);
|
be_openssl_handshakeeventcb, bev_ssl);
|
||||||
if (fd >= 0) {
|
if (fd >= 0)
|
||||||
r1 = bufferevent_add_event_(&bev->ev_read, &bev->timeout_read);
|
bufferevent_enable(bev, bev->enabled);
|
||||||
r2 = bufferevent_add_event_(&bev->ev_write, &bev->timeout_write);
|
return 0;
|
||||||
}
|
|
||||||
return (r1<0 || r2<0) ? -1 : 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1159,9 +1156,6 @@ be_openssl_enable(struct bufferevent *bev, short events)
|
|||||||
struct bufferevent_openssl *bev_ssl = upcast(bev);
|
struct bufferevent_openssl *bev_ssl = upcast(bev);
|
||||||
int r1 = 0, r2 = 0;
|
int r1 = 0, r2 = 0;
|
||||||
|
|
||||||
if (bev_ssl->state != BUFFEREVENT_SSL_OPEN)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (events & EV_READ)
|
if (events & EV_READ)
|
||||||
r1 = start_reading(bev_ssl);
|
r1 = start_reading(bev_ssl);
|
||||||
if (events & EV_WRITE)
|
if (events & EV_WRITE)
|
||||||
@ -1254,23 +1248,7 @@ be_openssl_adj_timeouts(struct bufferevent *bev)
|
|||||||
if (bev_ssl->underlying) {
|
if (bev_ssl->underlying) {
|
||||||
return bufferevent_generic_adj_timeouts_(bev);
|
return bufferevent_generic_adj_timeouts_(bev);
|
||||||
} else {
|
} else {
|
||||||
int r1=0, r2=0;
|
return bufferevent_generic_adj_existing_timeouts_(bev);
|
||||||
if (event_pending(&bev->ev_read, EV_READ, NULL)) {
|
|
||||||
if (evutil_timerisset(&bev->timeout_read)) {
|
|
||||||
r1 = bufferevent_add_event_(&bev->ev_read, &bev->timeout_read);
|
|
||||||
} else {
|
|
||||||
event_remove_timer(&bev->ev_read);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (event_pending(&bev->ev_write, EV_WRITE, NULL)) {
|
|
||||||
if (evutil_timerisset(&bev->timeout_write)) {
|
|
||||||
r2 = bufferevent_add_event_(&bev->ev_write, &bev->timeout_write);
|
|
||||||
} else {
|
|
||||||
event_remove_timer(&bev->ev_write);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (r1<0 || r2<0) ? -1 : 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1394,15 +1372,6 @@ bufferevent_openssl_new_impl(struct event_base *base,
|
|||||||
if (state == BUFFEREVENT_SSL_OPEN)
|
if (state == BUFFEREVENT_SSL_OPEN)
|
||||||
bufferevent_suspend_read_(underlying,
|
bufferevent_suspend_read_(underlying,
|
||||||
BEV_SUSPEND_FILT_READ);
|
BEV_SUSPEND_FILT_READ);
|
||||||
} else {
|
|
||||||
struct bufferevent *bev = &bev_ssl->bev.bev;
|
|
||||||
bev->enabled = EV_READ|EV_WRITE;
|
|
||||||
if (state != BUFFEREVENT_SSL_OPEN)
|
|
||||||
if (event_add(&bev->ev_read, NULL) < 0)
|
|
||||||
goto err;
|
|
||||||
if (event_initialized(&bev->ev_write))
|
|
||||||
if (event_add(&bev->ev_write, NULL) < 0)
|
|
||||||
goto err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return &bev_ssl->bev.bev;
|
return &bev_ssl->bev.bev;
|
||||||
|
@ -79,7 +79,6 @@
|
|||||||
static int be_socket_enable(struct bufferevent *, short);
|
static int be_socket_enable(struct bufferevent *, short);
|
||||||
static int be_socket_disable(struct bufferevent *, short);
|
static int be_socket_disable(struct bufferevent *, short);
|
||||||
static void be_socket_destruct(struct bufferevent *);
|
static void be_socket_destruct(struct bufferevent *);
|
||||||
static int be_socket_adj_timeouts(struct bufferevent *);
|
|
||||||
static int be_socket_flush(struct bufferevent *, short, enum bufferevent_flush_mode);
|
static int be_socket_flush(struct bufferevent *, short, enum bufferevent_flush_mode);
|
||||||
static int be_socket_ctrl(struct bufferevent *, enum bufferevent_ctrl_op, union bufferevent_ctrl_data *);
|
static int be_socket_ctrl(struct bufferevent *, enum bufferevent_ctrl_op, union bufferevent_ctrl_data *);
|
||||||
|
|
||||||
@ -92,14 +91,11 @@ const struct bufferevent_ops bufferevent_ops_socket = {
|
|||||||
be_socket_disable,
|
be_socket_disable,
|
||||||
NULL, /* unlink */
|
NULL, /* unlink */
|
||||||
be_socket_destruct,
|
be_socket_destruct,
|
||||||
be_socket_adj_timeouts,
|
bufferevent_generic_adj_existing_timeouts_,
|
||||||
be_socket_flush,
|
be_socket_flush,
|
||||||
be_socket_ctrl,
|
be_socket_ctrl,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define be_socket_add(ev, t) \
|
|
||||||
bufferevent_add_event_((ev), (t))
|
|
||||||
|
|
||||||
const struct sockaddr*
|
const struct sockaddr*
|
||||||
bufferevent_socket_get_conn_address_(struct bufferevent *bev)
|
bufferevent_socket_get_conn_address_(struct bufferevent *bev)
|
||||||
{
|
{
|
||||||
@ -140,7 +136,7 @@ bufferevent_socket_outbuf_cb(struct evbuffer *buf,
|
|||||||
!bufev_p->write_suspended) {
|
!bufev_p->write_suspended) {
|
||||||
/* Somebody added data to the buffer, and we would like to
|
/* Somebody added data to the buffer, and we would like to
|
||||||
* write, and we were not writing. So, start writing. */
|
* write, and we were not writing. So, start writing. */
|
||||||
if (be_socket_add(&bufev->ev_write, &bufev->timeout_write) == -1) {
|
if (bufferevent_add_event_(&bufev->ev_write, &bufev->timeout_write) == -1) {
|
||||||
/* Should we log this? */
|
/* Should we log this? */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -577,14 +573,12 @@ bufferevent_new(evutil_socket_t fd,
|
|||||||
static int
|
static int
|
||||||
be_socket_enable(struct bufferevent *bufev, short event)
|
be_socket_enable(struct bufferevent *bufev, short event)
|
||||||
{
|
{
|
||||||
if (event & EV_READ) {
|
if (event & EV_READ &&
|
||||||
if (be_socket_add(&bufev->ev_read,&bufev->timeout_read) == -1)
|
bufferevent_add_event_(&bufev->ev_read, &bufev->timeout_read) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
if (event & EV_WRITE &&
|
||||||
if (event & EV_WRITE) {
|
bufferevent_add_event_(&bufev->ev_write, &bufev->timeout_write) == -1)
|
||||||
if (be_socket_add(&bufev->ev_write,&bufev->timeout_write) == -1)
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -619,29 +613,6 @@ be_socket_destruct(struct bufferevent *bufev)
|
|||||||
EVUTIL_CLOSESOCKET(fd);
|
EVUTIL_CLOSESOCKET(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
be_socket_adj_timeouts(struct bufferevent *bufev)
|
|
||||||
{
|
|
||||||
int r = 0;
|
|
||||||
if (event_pending(&bufev->ev_read, EV_READ, NULL)) {
|
|
||||||
if (evutil_timerisset(&bufev->timeout_read)) {
|
|
||||||
if (be_socket_add(&bufev->ev_read, &bufev->timeout_read) < 0)
|
|
||||||
r = -1;
|
|
||||||
} else {
|
|
||||||
event_remove_timer(&bufev->ev_read);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (event_pending(&bufev->ev_write, EV_WRITE, NULL)) {
|
|
||||||
if (evutil_timerisset(&bufev->timeout_write)) {
|
|
||||||
if (be_socket_add(&bufev->ev_write, &bufev->timeout_write) < 0)
|
|
||||||
r = -1;
|
|
||||||
} else {
|
|
||||||
event_remove_timer(&bufev->ev_write);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
be_socket_flush(struct bufferevent *bev, short iotype,
|
be_socket_flush(struct bufferevent *bev, short iotype,
|
||||||
enum bufferevent_flush_mode mode)
|
enum bufferevent_flush_mode mode)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user