/* * $Id: DCapChallengeReader.java,v 1.1 2006-07-18 09:08:22 tigran Exp $ */ package org.dcache.pool.movers; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import java.util.Base64; import diskCacheV111.util.DCapProrocolChallenge; import org.dcache.net.ChallengeReader; import static org.dcache.util.ByteUnit.KiB; class DCapChallengeReader implements ChallengeReader { @Override public Object getChallenge(SocketChannel socketChannel) { DCapProrocolChallenge challenge = null; /* * verify connection * 4 byte session id * 4 bytes challange len * challenge * */ try { ByteBuffer buffer = ByteBuffer.allocate(KiB.toBytes(1)); buffer.rewind(); buffer.limit(8); socketChannel.read(buffer); buffer.rewind(); int sessionId = buffer.getInt(); int challangeLen = buffer.getInt(); buffer.rewind(); buffer.limit(challangeLen); socketChannel.read(buffer); buffer.rewind(); byte[] recivedChallengeBase64 = new byte[challangeLen]; buffer.get(recivedChallengeBase64); byte[] recivedChallengeBase = Base64.getDecoder().decode(recivedChallengeBase64); challenge = new DCapProrocolChallenge(sessionId, recivedChallengeBase); }catch(Exception e) { // e.printStackTrace(); } return challenge; } }