Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] WebSocketGeneratorRFC6455.closeOut doesn't send reason when code < 0

Thanks for the explanations, guys. I changed the code to 4000 for
errors and 1000 for successful exits, and everything is now working as
I expected.

It looks like jetty-9's WebSocketSession provides the same close() and
close(code, message) methods? While these work well enough if you're
familiar with the RFC, I think it would be nice to provide a
close(boolean isClean, String reason) method. Then, internally, this
would call either close(1000, reason) or close(UNKNOWN_ERROR, reason),
where UNKNOWN_ERROR is 4000, 4999, some other 4xxx, or a special
JETTY_UNKNOWN_ERROR close code registered with IANA in the 3000-3999
range.

Optionally, close(reason) could also be implemented as close(false, reason).

Thoughts?

On Tue, Oct 30, 2012 at 2:11 PM, Joakim Erdfelt <joakim@xxxxxxxxxxx> wrote:
>
> Quick answer, if you want a reason message, you have to specify a valid, can be sent over the wire, close status code.
>
> Detail answer,
> The WebSocket spec (RFC 6455, Section 5.5.1. Close)
> https://tools.ietf.org/html/rfc6455#section-5.5.1
>
> A Close frame MAY contain a body.
> If there is a body, the first two bytes of the body MUST be a 2-byte unsigned integer representing the status code.
> Following the 2-byte integer, the body MAY contain UTF-8 encoded data with reason.
>
> And the status codes allowed to be sent over the wire are in Section 7.4.1.
> https://tools.ietf.org/html/rfc6455#section-7.4.1
>
> Some status codes are not allowed to be sent over the network. (They essentially are internal status codes).
>
> --
> Joakim Erdfelt <joakim@xxxxxxxxxxx>
> webtide.com
> Developer advice, services and support
> from the Jetty & CometD experts
> eclipse.org/jetty - cometd.org
>
>
>
> On Tue, Oct 30, 2012 at 1:22 PM, Brandon Mintern <mintern@xxxxxxxxxxx> wrote:
>>
>> When a connection is closed with a message and closeCode <= 0, the message is not sent at all. This is because of the test in line 382 of WebSocketGeneratorRFC6455.java:
>>
>> _outbound.addFrame((byte)FLAG_FIN,WebSocketConnectionRFC6455.OP_CLOSE,bytes,0,code>0?bytes.length:0);
>>
>> Is this intended behavior? As a user, I expected that calling connection.close(-1, "reason for closure") would populate a Javascript ErrorEvent with:
>>
>> wasClean: false
>> reason: "reason for closure"
>>
>> Instead, reason is "". If this is intended behavior, I think the Javadoc needs some elaboration; it reads:
>>
>>
>> org.eclipse.jetty.websocket.WebSocket.Connection
>>
>> public void close(int closeCode, String message)
>>
>> Close the connection with specific closeCode and message.
>>
>> Parameters:
>> closeCode - The close code to send, or -1 for no close code
>> message - The message to send or null for no message
>>
>>
>> As implemented, message is never sent unless closeCode > 0.
>>
>> _______________________________________________
>> jetty-users mailing list
>> jetty-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/jetty-users
>>
>
>
> _______________________________________________
> jetty-users mailing list
> jetty-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/jetty-users
>


Back to the top