package se.sics.gvod.bootstrap.msgs;
import io.netty.buffer.ByteBuf;
import java.util.List;
import java.util.Map;
import java.util.Set;
import se.sics.gvod.common.VodDescriptor;
import se.sics.gvod.common.msgs.MessageDecodingException;
import se.sics.gvod.common.msgs.DirectMsgNettyFactory;
import se.sics.gvod.net.util.UserTypesDecoderFactory;
public class BootstrapMsgFactory {
public static class GetPeersRequest extends DirectMsgNettyFactory.Request {
private GetPeersRequest() {
}
public static BootstrapMsg.GetPeersRequest fromBuffer(ByteBuf buffer)
throws MessageDecodingException {
return (BootstrapMsg.GetPeersRequest)
new BootstrapMsgFactory.GetPeersRequest().decode(buffer);
}
@Override
protected BootstrapMsg.GetPeersRequest process(ByteBuf buffer) throws MessageDecodingException {
int overlay = buffer.readInt();
int utility = buffer.readInt();
return new BootstrapMsg.GetPeersRequest(vodSrc, vodDest,
overlay, utility);
}
}
public static class GetPeersResponse extends DirectMsgNettyFactory.Response {
private GetPeersResponse() {
}
public static BootstrapMsg.GetPeersResponse fromBuffer(ByteBuf buffer)
throws MessageDecodingException {
return (BootstrapMsg.GetPeersResponse)
new BootstrapMsgFactory.GetPeersResponse().decode(buffer);
}
@Override
protected BootstrapMsg.GetPeersResponse process(ByteBuf buffer) throws MessageDecodingException {
int overlay = buffer.readInt();
List<VodDescriptor> entries =
UserTypesDecoderFactory.readListVodNodeDescriptors(buffer);
return new BootstrapMsg.GetPeersResponse(vodSrc, vodDest,
timeoutId, overlay, entries);
}
}
public static class Heartbeat extends DirectMsgNettyFactory.Oneway {
private Heartbeat() {
}
public static BootstrapMsg.Heartbeat fromBuffer(ByteBuf buffer)
throws MessageDecodingException {
return (BootstrapMsg.Heartbeat) new BootstrapMsgFactory.Heartbeat().decode(buffer);
}
@Override
protected BootstrapMsg.Heartbeat process(ByteBuf buffer) throws MessageDecodingException {
boolean helper = UserTypesDecoderFactory.readBoolean(buffer);
short mtu = buffer.readShort();
Set<Integer> seeders = UserTypesDecoderFactory.readSetInts(buffer);
Map<Integer,Integer> downloaders = UserTypesDecoderFactory.readMapIntInts(buffer);
return new BootstrapMsg.Heartbeat(vodSrc, vodDest, helper, mtu, seeders, downloaders);
}
}
public static class AddOverlayReq extends DirectMsgNettyFactory.Request {
private AddOverlayReq() {
}
public static BootstrapMsg.AddOverlayReq fromBuffer(ByteBuf buffer)
throws MessageDecodingException {
return
(BootstrapMsg.AddOverlayReq) new BootstrapMsgFactory.AddOverlayReq().decode(
buffer);
}
@Override
protected BootstrapMsg.AddOverlayReq process(ByteBuf buffer) throws MessageDecodingException {
String overlayName = UserTypesDecoderFactory.readStringLength256(buffer);
int overlayId = buffer.readInt();
String description = UserTypesDecoderFactory.readStringLength256(buffer);
byte[] torrentData = UserTypesDecoderFactory.readBytesLength65536(buffer);
String imageUrl = UserTypesDecoderFactory.readStringLength256(buffer);
int part = UserTypesDecoderFactory.readUnsignedIntAsOneByte(buffer);
int numParts = UserTypesDecoderFactory.readUnsignedIntAsOneByte(buffer);
return new BootstrapMsg.AddOverlayReq(vodSrc, vodDest, overlayName,
overlayId, description, torrentData, imageUrl, part, numParts);
}
}
public static class AddOverlayResp extends DirectMsgNettyFactory.Response {
private AddOverlayResp() {
}
public static BootstrapMsg.AddOverlayResp fromBuffer(ByteBuf buffer)
throws MessageDecodingException {
return
(BootstrapMsg.AddOverlayResp) new BootstrapMsgFactory.AddOverlayResp().decode(
buffer);
}
@Override
protected BootstrapMsg.AddOverlayResp process(ByteBuf buffer) throws MessageDecodingException {
int overlayId = buffer.readInt();
boolean success = UserTypesDecoderFactory.readBoolean(buffer);
boolean finished = UserTypesDecoderFactory.readBoolean(buffer);
return new BootstrapMsg.AddOverlayResp(vodSrc, vodDest, overlayId,
success, finished, timeoutId);
}
}
public static class HelperHeartbeat extends DirectMsgNettyFactory.Oneway {
private HelperHeartbeat() {
}
public static BootstrapMsg.HelperHeartbeat fromBuffer(ByteBuf buffer)
throws MessageDecodingException {
return (BootstrapMsg.HelperHeartbeat) new BootstrapMsgFactory.HelperHeartbeat().decode(buffer);
}
@Override
protected BootstrapMsg.HelperHeartbeat process(ByteBuf buffer) throws MessageDecodingException {
boolean space = UserTypesDecoderFactory.readBoolean(buffer);
return new BootstrapMsg.HelperHeartbeat(vodSrc, vodDest, space);
}
}
public static class HelperDownload extends DirectMsgNettyFactory.Oneway {
private HelperDownload() {
}
public static BootstrapMsg.HelperDownload fromBuffer(ByteBuf buffer)
throws MessageDecodingException {
return (BootstrapMsg.HelperDownload)
new BootstrapMsgFactory.HelperDownload().decode(buffer);
}
@Override
protected BootstrapMsg.HelperDownload process(ByteBuf buffer)
throws MessageDecodingException {
String url = UserTypesDecoderFactory.readStringLength256(buffer);
return new BootstrapMsg.HelperDownload(vodSrc, vodDest, url);
}
}
// public static class HelperDownloadResponse extends DirectMsgNettyFactory.Response {
//
// private HelperDownloadResponse() {
// }
//
// public static BootstrapMsg.HelperDownloadResponse fromBuffer(ByteBuf buffer)
// throws MessageDecodingException {
// return
// (BootstrapMsg.HelperDownloadResponse)
// new BootstrapMsgFactory.HelperDownloadResponse().decode(buffer);
// }
//
// @Override
// protected BootstrapMsg.HelperDownloadResponse process(ByteBuf buffer)
// throws MessageDecodingException {
// boolean success = UserTypesDecoderFactory.readBoolean(buffer);
// return new BootstrapMsg.HelperDownloadResponse(vodSrc, vodDest, success, timeoutId);
// }
// }
};