case STARTED:
ByteString in = ((Received) msg).data();
provider = factory.getMessageProvider(in.toArray());
builder = new org.flowforwarding.warp.protocol.ofp.avro.OFMessage.OFMessageBuilder(in.toArray());
OFMessage inMsg = builder.value(in.toArray()).build();
if ((provider != null) && (inMsg != null)) {
if (inMsg.type().equals("OFPT_HELLO")) {
log.info ("IN: Hello");
swRef.setVersion(builder.version());
// getSender().tell(TcpMessage.write(ByteString.fromArray(builder.type("ofp_hello").set("header.xid", "0xabba").build().binary())), getSelf());
OFMessage helloMsg = builder.type("ofp_hello").build();
byte[] v = {127,127,127,127};
helloMsg.get("header").get("xid").set(v);
//getSender().tell(TcpMessage.write(ByteString.fromArray(builder.type("ofp_hello").build().binary())), getSelf());
getSender().tell(TcpMessage.write(ByteString.fromArray(helloMsg.binary())), getSelf());
this.state = State.CONNECTED;
log.info ("STATE: Connected to OF Switch version "+ builder.version());
// getSender().tell(TcpMessage.write(ByteString.fromArray(builder.type("ofp_switch_features_request").set("xid", "0xabba").build().binary())), getSelf());
getSender().tell(TcpMessage.write(ByteString.fromArray(builder.type("ofp_switch_features_request").build().binary())), getSelf());
// TODO REMOVE THIS:
provider.init();
tcpChannel = getSender();
}
}
break;
case CONNECTED:
in = ((Received) msg).data();
inMsg = builder.value(in.toArray()).build();
if (inMsg.type().equals("OFPT_FEATURES_REPLY")) {
log.info("IN: Features Reply");
byte[] DPID = inMsg.field("datapath_id");
swRef.setDpid(Convert.toLong(DPID));
log.info("INFO: Switch DPID is " + Long.toHexString(Convert.toLong(DPID)).toUpperCase());
state = State.HANDSHAKED;
ofSessionHandler.tell(new OFEventHandshaked(swRef), getSelf());
getSender().tell(TcpMessage.write(ByteString.fromArray(builder.type("ofp_get_config_request").build().binary())), getSelf());
}
break;
case HANDSHAKED:
in = ((Received) msg).data();
inMsg = builder.value(in.toArray()).build();
if (inMsg.type().equals("OFPT_GET_CONFIG_REPLY")) {
log.info("IN: Config Reply from Switch " + Long.toHexString(swRef.getDpid().longValue()));
OFMessage flowMod = builder.type("ofp_flow_mod").build();
/* OFItemRef matchInPort = itemBuilder.type("oxm_tlv_ingress_port").build();
matchInPort.set("tlv", "4");
OFItemRef tlv = itemBuilder.type("oxm_tlv").build();
tlv.add("match", matchInPort);