非ブロック モードで SocketChannels で SSLengine を使用しようとしています。
ハンドシェイクは正しく行われますが、channelsocket から http 投稿を読み取って復号化しようとすると、ヘッダーのみが復号化され、本文が消えます。
<code>
int num=0;
while(num==0){
num=socketChannel.read(peerNetData);
if(num==-1)
break;
}
if (num == -1) {
System.out.println("channel closed");
} else if (num == 0) {
System.out.println("no bytes to read");
} else {
// Process incoming data
peerNetData.flip();
SSLEngineResult res = engine.unwrap(peerNetData, peerAppData);
//return a ok status
peerNetData.flip();
peerAppData.flip();
System.out.println(new String(peerNetData.array()));
System.out.println(new String(peerAppData.array()));
</code>
暗号化されたデータを peerNetData で印刷すると、次のようになります。
?>.//POST テスト HTTP/1.1 Cache-Control: no-cache Content-Length: 20 Content-Type: application/octet-stream Host: 192.168.XX
?>.//?>.//?>.//?>.//?>.//?>.//?>.//?>.//?>.//?>.// ?>.// <--- ここに暗号化された文字
しかし、peerAppDataで復号化されたデータを印刷すると、取得しています
POST test HTTP/1.1/ Cache-Control: no-cache Content-Length: 20 Content-Type: application/octet-stream Host: 192.168.XX // そしてここに 3 つの空行。
これは SSLengine の復号化の問題ですか??
ありがとう
また、unwrap メソッドが OK ステータスを返すように追加したいと思います。