Git Product home page Git Product logo

Comments (8)

lemunozm avatar lemunozm commented on August 10, 2024 4

Thanks for the detailing the error. You are right, it's a problem to the whole wss indendently of the text/binary modes.

I was looking into it and after making the TCP connection, it sends a HTTP request (used for plain WS) instead of a TLS hello (used for WSS). So it tries to connect a normal socket to the tipical WSS port 443 and the server refused the connection.

It's a bug, and I think it is not fast fordward to resolve, because seems that tungstenite do not add the TLS layer automatically for you when connect with wss schema and use the non-blocking handshake mode. It's a pity because for blocking mode tungstenite adds this TLS layer automatically, but message-io works uses only the non-blocking mode.

I hope to fix it in the future, but I cannot promise in a near future. For now, I will remove it as a feature of message-io

So sorry the inconvenience :( and thanks to notify the error

from message-io.

lemunozm avatar lemunozm commented on August 10, 2024 1

I'm currently in maintenance mode on this repo. By now, I'm not developing new features. Sorry!
Nevertheless, if anyone wants/can do it I'm open to it.

from message-io.

lemunozm avatar lemunozm commented on August 10, 2024

Hi @temclaugh,

It seems a bug, I will investigate it.

Thanks for notifying!

from message-io.

lemunozm avatar lemunozm commented on August 10, 2024

I look more deeply into the use case. The problem is that message-io uses WebSocket in binary mode and the echo.websocket.org expected in text mode. At this moment there is no way to configure it to use the text mode. This configuration property would depend on #54

Sorry for the inconvenience, I will notify it in the README.

from message-io.

temclaugh avatar temclaugh commented on August 10, 2024

Hi @lemunozm, thanks for looking into this!

I’m wondering if it’s possible that this is related to TLS specifically? ws connections seem to work fine on the same host where wss does not. Example:

use message_io::network::{NetEvent, Transport, RemoteAddr};
use message_io::node::{self, NodeEvent};

fn main() {
    connect("wss://echo.websocket.org".to_string());
    connect("ws://echo.websocket.org".to_string());
}

fn connect(url: String) {
    let (handler, listener) = node::split::<()>();
    handler.network().connect(Transport::Ws, RemoteAddr::Str(url.clone())).unwrap();
    listener.for_each(move |event| match event {
        NodeEvent::Network(NetEvent::Connected(e, success)) => {
            if success {
                println!("{} successfully connected", url);
                handler.network().send(e, b"foo");
            } else {
                println!("{} failed to connect", url);
                handler.stop();
            }
        }
        NodeEvent::Network(NetEvent::Message(_, x)) => {
            println!("{} received message: {}", url, String::from_utf8_lossy(x));
            handler.stop();
        }
        _ => (),
    });
}

Output:

wss://echo.websocket.org failed to connect
ws://echo.websocket.org successfully connected
ws://echo.websocket.org received message: foo

It looks like something might be going wrong during the handshake.
Or, if I'm understanding this incorrectly, is the issue that text mode is causing the handshake to fail, and that would be fixed in binary mode?
Just as a point of reference, I'm able to communicate with echo.websocket.org using websocat with all combinations of ws, wss --binary and --text

from message-io.

markusmoenig avatar markusmoenig commented on August 10, 2024

Is this something which will still be addressed ?

from message-io.

TechnoPorg avatar TechnoPorg commented on August 10, 2024

Tungstenite has the client_tls() method, which automatically adds a TLS layer if needed. Could that be used to solve the issue?

from message-io.

lemunozm avatar lemunozm commented on August 10, 2024

Maybe that can be used to implement the adapter with TLS support πŸ‘πŸ»

from message-io.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.