/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.rtmp.handshake;
import java.util.Random;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
/**
* RtmpHandshake
* @author taktod
* to manage rtmpHandshake
*/
public class RtmpHandshake {
public static final int HANDSHAKE_SIZE = 1536;
private ByteBuf serverResponseBuf = null;
private byte[] peerTime = null;
private byte[] serverVersion = null;
public ByteBuf clientRequest0() {
ByteBuf out = Unpooled.buffer(1);
out.writeByte((byte)0x03); // not rtmpe
return out;
}
public ByteBuf clientRequest1() {
byte[] randomBytes = new byte[HANDSHAKE_SIZE];
Random random = new Random();
random.nextBytes(randomBytes);
ByteBuf out = Unpooled.wrappedBuffer(randomBytes);
out.setInt(0, (int)(System.currentTimeMillis() / 1000)); // epoc time.
out.setInt(4, 0); // zeros
return out;
}
public void serverResponse0(ByteBuf in) {
byte flag = in.getByte(0);
if(flag != 0x03) {
throw new RuntimeException("rtmpe is not support.");
}
}
public void serverResponse1(ByteBuf in) {
peerTime = new byte[4];
in.getBytes(0, peerTime);
serverVersion = new byte[4];
in.getBytes(4, serverVersion);
serverResponseBuf = in.copy();
}
public ByteBuf clientRequest2() {
return serverResponseBuf;
}
public void serverResponse2(ByteBuf in) {
}
}