Skip to content

Commit

Permalink
Better behaved lws external poll code.
Browse files Browse the repository at this point in the history
  • Loading branch information
ralight committed Jan 11, 2021
1 parent 5e6b34f commit 09a870c
Showing 1 changed file with 27 additions and 4 deletions.
31 changes: 27 additions & 4 deletions src/websockets.c
Original file line number Diff line number Diff line change
Expand Up @@ -605,24 +605,47 @@ static int callback_http(
break;

case LWS_CALLBACK_ADD_POLL_FD:
case LWS_CALLBACK_DEL_POLL_FD:
case LWS_CALLBACK_CHANGE_MODE_POLL_FD:
HASH_FIND(hh_sock, db.contexts_by_sock, &pollargs->fd, sizeof(pollargs->fd), mosq);
if(mosq){
if(pollargs->events & POLLOUT){
if(pollargs->events & LWS_POLLOUT){
mux__add_out(mosq);
mosq->ws_want_write = true;
}else{
mux__remove_out(mosq);
}
}else{
if(reason == LWS_CALLBACK_ADD_POLL_FD && (pollargs->events & POLLIN)){
if(pollargs->events & POLLIN){
/* Assume this is a new listener */
listeners__add_websockets(lws_get_context(wsi), pollargs->fd);
}
}
break;

case LWS_CALLBACK_DEL_POLL_FD:
HASH_FIND(hh_sock, db.contexts_by_sock, &pollargs->fd, sizeof(pollargs->fd), mosq);
if(mosq){
mux__delete(mosq);
}else{
return 1;
}
break;

case LWS_CALLBACK_CHANGE_MODE_POLL_FD:
HASH_FIND(hh_sock, db.contexts_by_sock, &pollargs->fd, sizeof(pollargs->fd), mosq);
if(mosq){
if(pollargs->events & LWS_POLLHUP){
return 1;
}else if(pollargs->events & LWS_POLLOUT){
mux__add_out(mosq);
mosq->ws_want_write = true;
}else{
mux__remove_out(mosq);
}
}else{
return 1;
}
break;

#ifdef WITH_TLS
case LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION:
if(!len || (SSL_get_verify_result((SSL*)in) != X509_V_OK)){
Expand Down

0 comments on commit 09a870c

Please sign in to comment.