Apache Mina SSL-прокси (вроде)

Мне нужно реализовать http-прокси с поддержкой SSL. SSL работает нормально, и мне нужно проанализировать поступающее сообщение, чтобы оно было HTTP-запросом или другим.

Как я думал, что это может сработать:

1. in messageReceived I should check I will check if first "maximum-length
  of HTTP request method name length" amout of bytes converted to string
  (new String(byte[]) starts with any of HTTP method name (e.g. GET,POST..)

2a) If so, let's tread this session as HTTP request, grap whole request and
  send it to another HTTP server, wait for response, return the response and
  close the connection.

2b) Otherwise, this is binary tcp connection with data, I want to keep this
  connection alive and play with incoming data/send data to it.

Проблема в том, что при обратном вызове messageReceived() я получаю иногда полные, иногда неполные данные HTTP-запроса, и он вызывается несколько раз. Например, когда я запускаю HTTP-запрос к порту, он вызывается, например, один раз только с первой строкой http + заголовками, затем он вызывается с данными POST.

Я настроил прослушивание TCP с помощью mina следующим образом:

IoAcceptor acceptor = new NioSocketAcceptor();
int port = 5555; //whatever

DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
// ssl support
SslFilter sslFilter = new SslFilter(MySslContextFactory.getInstance(true));
chain.addFirst("sslFilter", sslFilter);             

// handling
acceptor.setHandler( new TCPHandler() );

// listening at 0.0.0.0:5555
acceptor.bind( new InetSocketAddress(port) );

Фрагмент TCPHandler.java messageReceived выглядит следующим образом:

@Override
public void messageReceived( IoSession session, Object message ) throws Exception
    IoBuffer msgBuffer = (IoBuffer)message;
    byte[] msgBytes = msgBuffer.array();
    msgBytes = Arrays.copyOfRange(msgBytes, 0, msgBuffer.limit());
}

Я не уверен, как / когда проверить, что я прочитал ВСЕ ДАННЫЕ HTTP-запроса. Это часто происходит в пакетах данных (при проверке переменной msgBytes)

0 ответов

Другие вопросы по тегам