void WebSocketWorker::doRead() { if (!m_isRunning) return; if (!m_webSocketServer.IsRunning() || !m_socket->isOpen()) { CloseConnection(); return; } if (m_webSocketMode) { ProcessFrames(m_socket); } else { if (!ProcessHandshake(m_socket)) SendClose(kCloseProtocolError); } if (!m_webSocketMode) { LOG(VB_HTTP, LOG_WARNING, "WebSocketServer: Timed out waiting for connection upgrade"); CloseConnection(); } }
/*----------------------------------------------------------------------------- -----------------------------------------------------------------------------*/ void SSLStream::ProcessMessage() { SSL_HEADER * header = (SSL_HEADER *)message_; switch (header->type) { case MSG_CHANGE_CIPHER_SPEC: ProcessChangeCipherSpec(); break; case MSG_ALERT: ProcessAlert(); break; case MSG_HANDSHAKE: ProcessHandshake(); break; case MSG_APPLICATION_DATA: ProcessApplicationData(); break; default: { ATLTRACE("SSLStream: Unknown Message 0x%02X - %d bytes", header->type, message_size_); } break; } }
void DtlsTransport::SetRemoteFingerprint(Fingerprint fingerprint) { MS_TRACE(); MS_ASSERT(fingerprint.algorithm != FingerprintAlgorithm::NONE, "no fingerprint algorithm provided"); this->remoteFingerprint = fingerprint; // The remote fingerpring may have been set after DTLS handshake was done, // so we may need to process it now. if (this->handshakeDone && this->state != DtlsState::CONNECTED) { MS_DEBUG("handshake already done, processing it right now"); ProcessHandshake(); } }
inline bool DtlsTransport::CheckStatus(int return_code) { MS_TRACE(); int err; bool was_handshake_done = this->handshakeDone; err = SSL_get_error(this->ssl, return_code); switch (err) { case SSL_ERROR_NONE: break; case SSL_ERROR_SSL: LOG_OPENSSL_ERROR("SSL status: SSL_ERROR_SSL"); break; case SSL_ERROR_WANT_READ: break; case SSL_ERROR_WANT_WRITE: MS_DEBUG("SSL status: SSL_ERROR_WANT_WRITE"); break; case SSL_ERROR_WANT_X509_LOOKUP: MS_DEBUG("SSL status: SSL_ERROR_WANT_X509_LOOKUP"); break; case SSL_ERROR_SYSCALL: LOG_OPENSSL_ERROR("SSL status: SSL_ERROR_SYSCALL"); break; case SSL_ERROR_ZERO_RETURN: break; case SSL_ERROR_WANT_CONNECT: MS_DEBUG("SSL status: SSL_ERROR_WANT_CONNECT"); break; case SSL_ERROR_WANT_ACCEPT: MS_DEBUG("SSL status: SSL_ERROR_WANT_ACCEPT"); break; } // Check if the handshake (or re-handshake) has been done right now. if (this->handshakeDoneNow) { this->handshakeDoneNow = false; this->handshakeDone = true; // Stop the timer. this->timer->Stop(); // Process the handshake just once (ignore if DTLS renegotiation). if (!was_handshake_done) ProcessHandshake(); } // Check if the peer sent close alert or a fatal error happened. else if ((SSL_get_shutdown(this->ssl) & SSL_RECEIVED_SHUTDOWN) || err == SSL_ERROR_SSL || err == SSL_ERROR_SYSCALL) { if (this->state == DtlsState::CONNECTED) { MS_DEBUG("disconnected"); Reset(); // Set state and notify the listener. this->state = DtlsState::CLOSED; this->listener->onDtlsClosed(this); } else { MS_DEBUG("connection failed"); Reset(); // Set state and notify the listener. this->state = DtlsState::FAILED; this->listener->onDtlsFailed(this); } return false; } return true; }
void McuMessageHandler::HandlePacket() { unsigned short seq = MCU_GET_SHORT(m_rxPacket, 2); unsigned short id = MCU_GET_SHORT(m_rxPacket, 4); unsigned char len = MCU_GET_BYTE(m_rxPacket, 6); unsigned char checksum = 0; int packetsize = m_rxPacket.size(); printf("rx:"); for(int j = 0; j<packetsize; j++) { printf("%02x ",m_rxPacket[j]); } printf("\n"); if((packetsize - 8) != len) { LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::HandlePacket length not matching(%d, %d).", packetsize, len); return; } for(int i = 2; i < packetsize - 1; i ++) { checksum ^= m_rxPacket[i]; } if(checksum != m_rxPacket[1]) { LogUtility::Log(LOG_LEVEL_ERROR, "McuMessageHandler::HandlePacket checksum not matching(%02x, %02x).", checksum, m_rxPacket[1]); return; } LogUtility::Log(LOG_LEVEL_DEBUG, "McuMessageHandler::HandlePacket check pass(%04x, %d, %d).", id, len, seq); switch(id) { case MCU_PACKET_STATION_REPORT: case MCU_PACKET_LED1: case MCU_PACKET_LED2: case MCU_PACKET_LED3: case MCU_PACKET_LED4: ProcessCommonReply(len, id, seq); break; case MCU_PACKET_HANDSHAKE: if(m_handshake == false) { ProcessHandshake(len, seq); } if(m_handshake == false) { SendHandshake(); } break; case MCU_POS_STATION: ProcessPosStation(len, seq); break; case MCU_POS_DATE: ProcessPosDate(len, seq); break; case MCU_POS_TIME: ProcessPosTime(len, seq); break; case MCU_POS_GET_PASSENGER: ProcessGetPassenger(len, seq); break; case MCU_POS_GET_DEAL: ProcessGetDeal(len, seq); break; case MCU_CAN_GET_DATA: ProcessGetCanData(len, seq); break; default: LogUtility::Log(LOG_LEVEL_DEBUG, "McuMessageHandler::HandlePacket unknown message."); break; } }