2013-02-28 3 views
1

Я пытаюсь создать соединение Client/Server с SSLEngine в java. Я хотел бы спросить, в чем разница между SSLEngine.getHandshakeStatus() и SSLEngineResults.getHandshakeStatus().. Я нашел образец кода Nuno Santos о SSLEngine и мультиплексировании с NIO API.Разница getHandShakeStatus() в SSLEngine и SSLEngineResults в java

код я имею в виду это:

    //some code here 
        SSLEngineResult.HandshakeStatus hs = engine.getHandshakeStatus(); 
        String clientString = ""; 

        while (hs != SSLEngineResult.HandshakeStatus.FINISHED && hs != SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) 
        { 
         switch (hs) 
         { 
         case NEED_UNWRAP: 
          if (socketChannel.read(peerNetData)< 0) 
          { 
           engine.closeInbound(); 
          } 
          peerNetData.flip(); 
          SSLEngineResult res = engine.unwrap(peerNetData, peerAppData); 
          peerNetData.compact(); 
          hs = res.getHandshakeStatus(); 
          switch (res.getStatus()) 
          { 
          case OK: 
          //TODO something 
           break; 
          case BUFFER_UNDERFLOW: 
         //TODO something 
           break; 
          case BUFFER_OVERFLOW: 
          //TODO something 
           break; 
          case CLOSED: 
          //TODO something 
           engine.closeInbound(); 
           break; 
          } 
          break; 
          //more code here 

Связь с кодом я нашел это: http://onjava.com/pub/a/onjava/2004/11/03/ssl-nio.html?page=last&x-order=date

Пример кода в разделе Ресурсы

Заранее спасибо!

+0

Они должны быть одинаковыми, хотя я сомневаюсь, что вам когда-нибудь понадобится 'SSLEngine.getHandshakeStatus()'. – irreputable

ответ

0

Это не то же самое. Статус, возвращенный как SSLEngineResult.getHandshakeStatus() по телефону wrap() или unwrap(), может включать FINISHED, но вы никогда не получите это из статуса, хранящегося в SSLEngine.. Причина в том, что это переходный статус.

NB код низкого качества. Нет смысла пытаться развернуть или что-то еще после того, как вы только что прочитали конец потока.