Uploaded image for project: 'MINA'
  1. MINA
  2. DIRMINA-719

Serial Filter Chain Broken For Outbound Data

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.0.0-M4, 2.0.0-M6
    • 2.0.0-RC1
    • Transport
    • None
    • Linux & Windows, serial-transport only

    Description

      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:

      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);
         }
      ...
      }
      

      And is hooked in the IoConnector set up:

         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);
      ...
      }
      

      Attachments

        Activity

          People

            vrm Julien Vermillard
            bgage boB Gage
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: