[ 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.