[ 
https://issues.apache.org/jira/browse/DIRMINA-719?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Julien Vermillard reassigned DIRMINA-719:
-----------------------------------------

    Assignee: Julien Vermillard

> Serial Filter Chain Broken For Outbound Data
> --------------------------------------------
>
>                 Key: DIRMINA-719
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-719
>             Project: MINA
>          Issue Type: Bug
>          Components: Transport
>    Affects Versions: 2.0.0-M4, 2.0.0-M6
>         Environment: Linux & Windows, serial-transport only
>            Reporter: boB Gage
>            Assignee: Julien Vermillard
>
> IoFilterAdapter-descended filter's messageSent() hook called only with 0-byte 
> (Mina internal indicator, I'm told) IoBuffer data, not with IoBuffer 
> containing data actually sent out the serial port.
> Filter object looks like:
> {code}
> public class CaptureLogFilter extends IoFilterAdapter {
> ...
>    @Override
>    public void messageReceived(NextFilter nextFilter, IoSession
> session, Object message) throws Exception {
>        log("RECEIVED: ", message);
>        if (nextFilter != null ) nextFilter.messageReceived(session,
> message);
>    }
>    @Override
>    public void messageSent(NextFilter nextFilter, IoSession session,
> WriteRequest writeRequest) throws Exception {
>        log("SENT: ", writeRequest.getMessage());
>        if (nextFilter != null ) nextFilter.messageSent(session,
> writeRequest);
>    }
> ...
>    private void log(String event, Object arg) {
>        if (arg != null && arg instanceof IoBuffer) {
>            byte b[] = IoBufferUtils.asBytes((IoBuffer) arg);
>            log(event + b.length + " bytes: " + ByteUtils.toHex(b));
> //            IoBuffer i = (IoBuffer)arg;
> //            log("DBG: " + event + "pos: " + i.position() + ", lim:
> "+i.limit());
> // Previous debug was added to confirm IoBufferUtils operation, the IoBuffer 
> 'arg' is confirmed empty (both position & limit are 0)
>        }
>        else log(event);
>    }
> ...
> }
> {code}
> And is hooked in the IoConnector set up:
> {code}
>    private final IoConnector buildIoConnector() {
> ...
>        if ( codecFilter == null )
>            codecFilter = new ProtocolCodecFilter(createCodecFactory());
> ...
>        DefaultIoFilterChainBuilder fc = connector.getFilterChain();
>        if ( fc.contains("logging") ) fc.remove("logging");
>        if ( fc.contains("codec") ) fc.remove("codec");
>        fc.addLast("logging", new
> CaptureLogFilter(getClass().getSimpleName()));
>        fc.addLast("codec", codecFilter);
> ...
> }
> {code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to