MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / tlsHandleEvent

Function tlsHandleEvent

src/tls.cpp:823–974  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

821}
822
823void tlsHandleEvent(tls_connection *conn, int mask) {
824 int ret, conn_error;
825 serverAssert(conn->el == serverTL->el);
826
827 TLSCONN_DEBUG("tlsEventHandler(): fd=%d, state=%d, mask=%d, r=%d, w=%d, flags=%d",
828 fd, conn->c.state, mask, conn->c.read_handler != NULL, conn->c.write_handler != NULL,
829 conn->flags);
830
831 ERR_clear_error();
832
833 switch (conn->c.state) {
834 case CONN_STATE_CONNECTING:
835 conn_error = connGetSocketError((connection *) conn);
836 if (conn_error) {
837 conn->c.last_errno = conn_error;
838 conn->c.state = CONN_STATE_ERROR;
839 } else {
840 if (!(conn->flags & TLS_CONN_FLAG_FD_SET)) {
841 SSL_set_fd(conn->ssl, conn->c.fd);
842 conn->flags |= TLS_CONN_FLAG_FD_SET;
843 }
844 ret = SSL_connect(conn->ssl);
845 if (ret <= 0) {
846 WantIOType want = WANT_INVALID;
847 if (!handleSSLReturnCode(conn, ret, &want)) {
848 registerSSLEvent(conn, want);
849
850 /* Avoid hitting UpdateSSLEvent, which knows nothing
851 * of what SSL_connect() wants and instead looks at our
852 * R/W handlers.
853 */
854 return;
855 }
856
857 /* If not handled, it's an error */
858 conn->c.state = CONN_STATE_ERROR;
859 } else {
860 conn->c.state = CONN_STATE_CONNECTED;
861 }
862 }
863
864 {
865 AeLocker locker;
866 locker.arm(nullptr);
867 if (!callHandler((connection *) conn, conn->c.conn_handler)) return;
868 }
869 conn->c.conn_handler = NULL;
870 break;
871 case CONN_STATE_ACCEPTING:
872 ret = SSL_accept(conn->ssl);
873 if (ret <= 0) {
874 WantIOType want = WANT_INVALID;
875 if (!handleSSLReturnCode(conn, ret, &want)) {
876 /* Avoid hitting UpdateSSLEvent, which knows nothing
877 * of what SSL_connect() wants and instead looks at our
878 * R/W handlers.
879 */
880 registerSSLEvent(conn, want);

Callers 2

tlsEventHandlerFunction · 0.85
tlsProcessPendingDataFunction · 0.85

Calls 10

connGetSocketErrorFunction · 0.85
handleSSLReturnCodeFunction · 0.85
registerSSLEventFunction · 0.85
callHandlerFunction · 0.85
listAddNodeTailFunction · 0.85
listDelNodeFunction · 0.85
updateSSLEventFunction · 0.85
armMethod · 0.80

Tested by

no test coverage detected