Disconnect();
m_ws->SetListener(nullptr);
} catch (...) {
- TRY_LOG_ERROR("Unexpected exception catched");
+ TRY_LOG_ERROR("Unexpected exception caught");
}
}
void Tunnel::Cancel()
{
+ LogDebug("Cancelling");
std::lock_guard<std::mutex> guard(m_mutex);
if (m_cancelled)
LogDebug(it->second);
switch (reason) {
+ case LWS_CALLBACK_PROTOCOL_INIT:
+ case LWS_CALLBACK_CLIENT_HTTP_BIND_PROTOCOL:
+ case LWS_CALLBACK_CONNECTING:
+ case LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED:
+ case LWS_CALLBACK_WSI_CREATE:
+ case LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION:
+ case LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP:
+ case LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH:
+ if (m_state != State::DISCONNECTED) {
+ LogError("Unexpected event");
+ m_state = State::FAILED;
+ return true;
+ }
+ break;
+
+ case LWS_CALLBACK_VHOST_CERT_AGING:
+ if (m_state != State::CONNECTED && m_state != State::WRITING) {
+ LogError("Unexpected event");
+ m_state = State::FAILED;
+ return true;
+ }
+ break;
+
case LWS_CALLBACK_WS_PEER_INITIATED_CLOSE: {
std::string description = "Unknown";
uint16_t code; // network order
<< " last:" << last);
if (m_state != State::CONNECTED && m_state != State::WRITING) {
- LogDebug("Unexpected data");
- break;
+ LogError("Unexpected data");
+ m_state = State::FAILED;
+ return true;
}
if (!binary) {
- LogDebug("Not binary");
- break;
+ LogError("Not binary");
+ m_state = State::FAILED;
+ return true;
}
if (first) {
if (!data) {
LogError("Empty data");
m_state = State::FAILED;
- break;
+ return true;
}
auto size = m_in.size();
m_in.resize(size + len);
m_state = State::FAILED;
return true;
}
+ // LWS_CALLBACK_EVENT_WAIT_CANCELLED may happen during successful connecting
+ if (m_state != State::DISCONNECTED) {
+ LogError("Unexpected event");
+ m_state = State::FAILED;
+ return true;
+ }
break;
}
- default: break;
+ default:
+ LogError("Unexpected event");
+ m_state = State::FAILED;
+ return true;
}
return false;
} catch (const std::exception &ex) {
- TRY_LOG_ERROR("std::exception catched: " << ex.what());
+ TRY_LOG_ERROR("std::exception caught: " << ex.what());
} catch (...) {
- TRY_LOG_ERROR("Unknown exception catched");
+ TRY_LOG_ERROR("Unknown exception caught");
}
m_state = State::FAILED;
return true;