[ 
https://issues.apache.org/jira/browse/DIRMINA-907?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13759666#comment-13759666
 ] 

Mark Phillips commented on DIRMINA-907:
---------------------------------------

The WebSocketEncoder.java class as submitted conflicts with its documentation.  
As commented it should encode output in WS DataFrames when the receiving client 
is known to be a WebSocket.  When the receiving client is native it should pass 
through incoming IoBuffers unchanged.  This makes sense assuming this encoder 
is part of a filter chain, presumably the last one before wire transmission.  
However the pass-through logic is not implemented in the code submitted.  If 
the message is not already a WS type an  Exception is thrown.  The comment 
logic seems correct to me, the implementation incorrect.

Additionally, WebSocketEncoder.encode() will never be called if MINA is 
configured in a way which conforms to the code's commented intention.  In my 
environment I have MINA configured this way:

IoAcceptor server = new NioSocketAcceptor();

server.getFilterChain().addLast("WSCodec", new ProtocolCodecFilter(new 
WebSocketCodecFactory()));

server.getFilterChain().addLast("TextLineCodec", new ProtocolCodecFilter(new 
TextLineCodecFactory(Charset.forName("UTF-8"))));

server.getFilterChain().addLast("threadPool", new 
ExecutorFilter(Executors.newCachedThreadPool()));

server.setHandler(new <your custom MINA IoHandler here>);

The WebSocketCodecFactory is here simply added at the end of the 
already-existing chain which has worked happily for years.  I think this 
conforms with the developers' intentions.

But, WebSocketEncoder.encode() will never be invoked, because when 
ProtocolCodecFilter.filterWrite() tests that its input 
WriteRequest.getMessage() is instanceof IoBuffer, it'll assume encoding is 
complete, hand the WriteRequest to the next filter, and return.

It's possible I've misunderstood the developers' deployment intentions?
                
> Create a WebSocket iofilter for use in Apache Mina TCP servers
> --------------------------------------------------------------
>
>                 Key: DIRMINA-907
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-907
>             Project: MINA
>          Issue Type: New Feature
>          Components: Filter, Protocol - HTTP, Transport
>            Reporter: dhruv chopra
>         Attachments: MinaCodecUsage.png, WebSocketFilter.zip
>
>
> Shephertz has created a websocket iofilter that can be added in Apache mina 
> tcp server chain. The features of this codec are
> 1) Works with binary data sent/received over websocket
> 2) Abstracts the client details from the Handler code i.e. the handler need 
> not be aware that the remote endpoint is a browser or native client.
> 3) Tested with binary data sent/received on latest chrome and firefox 
> browsers. IE 9 doesn't support websockets and we will make changes if 
> required for IE 10 when its released and if it supports websockets.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to