Better behaved lws external poll code.

pull/1698/head
Roger A. Light 5 years ago
parent 5e6b34f81a
commit 09a870c342

@ -605,24 +605,47 @@ static int callback_http(
break; break;
case LWS_CALLBACK_ADD_POLL_FD: 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); HASH_FIND(hh_sock, db.contexts_by_sock, &pollargs->fd, sizeof(pollargs->fd), mosq);
if(mosq){ if(mosq){
if(pollargs->events & POLLOUT){ if(pollargs->events & LWS_POLLOUT){
mux__add_out(mosq); mux__add_out(mosq);
mosq->ws_want_write = true; mosq->ws_want_write = true;
}else{ }else{
mux__remove_out(mosq); mux__remove_out(mosq);
} }
}else{ }else{
if(reason == LWS_CALLBACK_ADD_POLL_FD && (pollargs->events & POLLIN)){ if(pollargs->events & POLLIN){
/* Assume this is a new listener */ /* Assume this is a new listener */
listeners__add_websockets(lws_get_context(wsi), pollargs->fd); listeners__add_websockets(lws_get_context(wsi), pollargs->fd);
} }
} }
break; 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 #ifdef WITH_TLS
case LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION: case LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION:
if(!len || (SSL_get_verify_result((SSL*)in) != X509_V_OK)){ if(!len || (SSL_get_verify_result((SSL*)in) != X509_V_OK)){

Loading…
Cancel
Save