internal void sendFibs(Dictionary <string, List <FIB> > dictionary, int using1, int using2, int using3, int requestId, int rate, bool routed) { if (dictionary != null) { foreach (string nodeName in dictionary.Keys) { consoleWriter("[CC(mine) -> CC(in node)] SetFIBS( requestId=" + requestId + " ) "); CCtoCCSignallingMessage fibsMsg = new CCtoCCSignallingMessage(); fibsMsg.State = CCtoCCSignallingMessage.CC_UP_FIB_CHANGE; fibsMsg.Fib_table = dictionary[nodeName]; String dataOut = JSON.Serialize(JSON.FromValue(fibsMsg)); socketHandler[nodeName].Write(dataOut); } } if (routed) { return; } if (iAmDomain) { if (dictionary != null) { consoleWriter("[CC -> NCC] ConnectionConfirmed( " + requestId + " ) "); CCtoNCCSingallingMessage finishMsg = new CCtoNCCSingallingMessage(); finishMsg.State = CCtoNCCSingallingMessage.CC_CONFIRM; finishMsg.Rate = rate; finishMsg.Vc11 = using1; finishMsg.Vc12 = using2; finishMsg.Vc13 = using3; finishMsg.NodeTo = dictionary.Keys.First(); foreach (String connectedNode in rcHandler.wholeTopologyNodesAndConnectedNodesWithPorts[dictionary.Keys.Last()].Keys) { if (connectedNode.StartsWith("192")) { finishMsg.NodeFrom = connectedNode; } } finishMsg.RequestID = requestId; String dataToSend = JSON.Serialize(JSON.FromValue(finishMsg)); nccWriter.Write(dataToSend); } else { consoleWriter("[CC -> NCC] ConnectionRejected( " + requestId + " ) "); CCtoNCCSingallingMessage finishMsg = new CCtoNCCSingallingMessage(); finishMsg.State = CCtoNCCSingallingMessage.CC_REJECT; finishMsg.Rate = rate; finishMsg.Vc11 = using1; finishMsg.Vc12 = using2; finishMsg.Vc13 = using3; finishMsg.RequestID = requestId; String dataToSend = JSON.Serialize(JSON.FromValue(finishMsg)); nccWriter.Write(dataToSend); } } }
public void writeFIB(List <FIB> fibs) { CCtoCCSignallingMessage msg = new CCtoCCSignallingMessage(); msg.Fib_table = fibs; msg.State = CCtoCCSignallingMessage.CC_UP_FIB_CHANGE; String send_object = JSON.Serialize(JSON.FromValue(msg)); writer.Write(send_object); }
internal void sendFIBRealeaseForSubnetwork(String rcName, int requestIdToRealese) { consoleWriter("[CC(mine) -> CC(lower)] CallRelease( " + requestIdToRealese + " ) "); String ccName = rcName.Replace("RC", "CC");; CCtoCCSignallingMessage setFIBmsg = new CCtoCCSignallingMessage(); setFIBmsg.State = CCtoCCSignallingMessage.REALEASE_TOP_BOTTOM; setFIBmsg.RequestId = requestIdToRealese; String dataToSend = JSON.Serialize(JSON.FromValue(setFIBmsg)); socketHandler[ccName].Write(dataToSend); }
public void sendRealeseFibs(Dictionary <string, List <FIB> > dictionary, int requestId) { foreach (string nodeName in dictionary.Keys) { consoleWriter("[CC(mine) -> CC(in node)] CallRelease( " + requestId + " ) "); CCtoCCSignallingMessage fibsMsg = new CCtoCCSignallingMessage(); fibsMsg.State = CCtoCCSignallingMessage.REALEASE_TOP_BOTTOM; fibsMsg.Fib_table = dictionary[nodeName]; String dataOut = JSON.Serialize(JSON.FromValue(fibsMsg)); socketHandler[nodeName].Write(dataOut); } }
public static void sendDeletedCC(string from, int port, string to) { string toSend = port.ToString() + " " + to; NetNode.log(DateTime.Now.ToLongTimeString() + " [node -> CC] info about deletion: " + toSend, ConsoleColor.Yellow); CCtoCCSignallingMessage protocol = new CCtoCCSignallingMessage(); protocol.State = CCtoCCSignallingMessage.RE_ROUTE_QUERY; String send_object = JMessage.Serialize(JMessage.FromValue(protocol)); writer.Write(send_object); }
public void sendFIBSettingRequestForSubnetwork(String nodeFrom, String nodeTo, String rcName, int rate) { consoleWriter("[CC(mine) -> CC(lower)] ConnectionRequest( " + nodeFrom + " , " + nodeTo + " ) (" + rate + "x VC-3 , requestId=" + rcHandler.requestId + " ) "); String ccName = rcName.Replace("RC", "CC");; CCtoCCSignallingMessage setFIBmsg = new CCtoCCSignallingMessage(); setFIBmsg.State = CCtoCCSignallingMessage.FIB_SETTING_TOP_BOTTOM; setFIBmsg.NodeFrom = nodeFrom; setFIBmsg.NodeTo = nodeTo; setFIBmsg.Rate = rate; setFIBmsg.RequestId = rcHandler.requestId; String dataToSend = JSON.Serialize(JSON.FromValue(setFIBmsg)); socketHandler[ccName].Write(dataToSend); }
public static void sendConfirmation(int port, int no_vc3, bool flag) { CCtoCCSignallingMessage protocol = new CCtoCCSignallingMessage(); if (flag == true) { protocol.State = CCtoCCSignallingMessage.CC_LOW_CONFIRM; NetNode.log(DateTime.Now.ToLongTimeString() + " [node -> CC] CONFIRM", ConsoleColor.Green); } else { protocol.State = CCtoCCSignallingMessage.CC_LOW_REJECT; NetNode.log(DateTime.Now.ToLongTimeString() + " [node -> CC] REJECT", ConsoleColor.Red); } String send_object = JMessage.Serialize(JMessage.FromValue(protocol)); writer.Write(send_object); }
internal void sendRequestToSubnetworkCCToBuildPath(string rcName, string nodeFrom, string nodeTo, int rate, int requestId) { consoleWriter("[CC(upper) -> CC(mine)] Prepare weights( " + nodeFrom + " , " + nodeTo + " ) (" + rate + "x VC-3 , requestId=" + requestId + " ) "); CCtoCCSignallingMessage ccRequest = new CCtoCCSignallingMessage(); ccRequest.State = CCtoCCSignallingMessage.CC_BUILD_PATH_REQUEST; ccRequest.NodeFrom = nodeFrom; ccRequest.NodeTo = nodeTo; ccRequest.Rate = rate; ccRequest.RequestId = requestId; if (rcHandler.vc1Forbidden) { ccRequest.Vc1 = 0; } else { ccRequest.Vc1 = 1; } if (rcHandler.vc2Forbidden) { ccRequest.Vc2 = 0; } else { ccRequest.Vc2 = 1; } if (rcHandler.vc3Forbidden) { ccRequest.Vc3 = 0; } else { ccRequest.Vc3 = 1; } String dataToSend = JSON.Serialize(JSON.FromValue(ccRequest)); socketHandler["CC_" + rcName.Substring(rcName.IndexOf("_") + 1)].Write(dataToSend); }
private void ccConnect() { BinaryReader reader = new BinaryReader(CCClient.GetStream()); ccWriter = new BinaryWriter(CCClient.GetStream()); CCtoCCSignallingMessage initMsg = new CCtoCCSignallingMessage(); initMsg.Identifier = identifier; initMsg.State = CCtoCCSignallingMessage.CC_MIDDLE_INIT; String send_object = JSON.Serialize(JSON.FromValue(initMsg)); ccWriter.Write(send_object); Boolean noError = true; while (noError) { try { string received_data = reader.ReadString(); JSON received_object = JSON.Deserialize(received_data); if (received_object.Type != typeof(CCtoCCSignallingMessage)) { noError = false; } CCtoCCSignallingMessage msg = received_object.Value.ToObject <CCtoCCSignallingMessage>(); switch (msg.State) { case CCtoCCSignallingMessage.CC_BUILD_PATH_REQUEST: rcHandler.initConnectionRequestFromCC(msg.NodeFrom, msg.NodeTo, msg.Rate, msg.RequestId, msg.Vc1, msg.Vc2, msg.Vc3, false); consoleWriter("[CC(upper) -> CC(mine)] Prepare weights( " + msg.NodeFrom + " , " + msg.NodeTo + " ) (" + msg.Rate + "x VC-3 , requestId=" + msg.RequestId + " )"); consoleWriter("[CC(mine) -> RC(mine)] RouteQuery( " + msg.NodeFrom + " , " + msg.NodeTo + " ) (" + msg.Rate + "x VC-3 , requestId=" + msg.RequestId + " ) "); break; case CCtoCCSignallingMessage.FIB_SETTING_TOP_BOTTOM: rcHandler.startProperWeigthComputingTopBottom(new Dictionary <string, Dictionary <string, int> >(), new Dictionary <string, string>(), msg.Rate, "", msg.NodeFrom, msg.NodeTo); consoleWriter("[CC(upper) -> CC(mine)] ConnectionRequest( " + msg.NodeFrom + " , " + msg.NodeTo + " ) (" + msg.Rate + "x VC-3 , requestId=" + msg.RequestId + " ) \n"); consoleWriter("[CC(mine) -> RC(mine)] RouteQuery( " + msg.NodeFrom + " , " + msg.NodeTo + " ) (" + msg.Rate + "x VC-3 , requestId=" + msg.RequestId + " ) "); break; case CCtoCCSignallingMessage.REALEASE_TOP_BOTTOM: rcHandler.releaseConnection(msg.RequestId); consoleWriter("[CC(upper) -> CC(mine)] CallRelease( " + msg.RequestId + " ) "); break; } } catch (IOException ex) { Environment.Exit(1); } } }
private void handleThread(Object obj) { TcpClient client = (TcpClient)obj; BinaryReader reader = new BinaryReader(client.GetStream()); writer = new BinaryWriter(client.GetStream()); Boolean noError = true; while (noError) { try { string received_data = reader.ReadString(); JSON received_object = JSON.Deserialize(received_data); if (received_object.Type == typeof(RCtoLRMSignallingMessage)) { RCtoLRMSignallingMessage lrmMsg = received_object.Value.ToObject <RCtoLRMSignallingMessage>(); switch (lrmMsg.State) { case RCtoLRMSignallingMessage.LRM_INIT: identifier = lrmMsg.NodeName; rc.initLRMNode(identifier); socketHandler.Add(identifier, writer); break; case RCtoLRMSignallingMessage.LRM_TOPOLOGY_ADD: rc.addTopologyElementFromLRM(identifier, lrmMsg.ConnectedNode, lrmMsg.ConnectedNodePort); break; case RCtoLRMSignallingMessage.LRM_TOPOLOGY_DELETE: rc.deleteTopologyElementFromLRM(lrmMsg.ConnectedNode); break; case RCtoLRMSignallingMessage.LRM_TOPOLOGY_ALLOCATED: rc.allocatedTopologyConnection(identifier, lrmMsg.ConnectedNode, lrmMsg.AllocatedSlot); break; case RCtoLRMSignallingMessage.LRM_TOPOLOGY_DEALLOCATED: rc.deallocatedTopologyConnection(identifier, lrmMsg.ConnectedNode, lrmMsg.AllocatedSlot); break; } } else if (received_object.Type == typeof(RCtoRCSignallingMessage)) { RCtoRCSignallingMessage rcMsg = received_object.Value.ToObject <RCtoRCSignallingMessage>(); if (!socketHandler.ContainsKey(rcMsg.Identifier)) { socketHandler.Add(rcMsg.Identifier, writer); } switch (rcMsg.State) { case RCtoRCSignallingMessage.RC_FROM_SUBNETWORK_INIT: if (!socketHandler.ContainsKey(rcMsg.Identifier)) { socketHandler.Add(rcMsg.Identifier, writer); } break; case RCtoRCSignallingMessage.COUNTED_ALL_PATHS_CONFIRM: if (!rc.iAmDomain) { rc.lowerRcSendedConnectionsAction(rcMsg.NodeConnectionsAndWeights, rcMsg.AssociatedNodesInSubnetwork, rcMsg.RateToCountWeights, rcMsg.Identifier); } else { rc.startProperWeigthComputingTopBottom(rcMsg.NodeConnectionsAndWeights, rcMsg.AssociatedNodesInSubnetwork, rcMsg.RateToCountWeights, rcMsg.Identifier, rc.requestNodeFrom, rc.requestNodeTo); } break; case RCtoRCSignallingMessage.COUNTED_ALL_PATHS_REFUSE: rc.lowerRcSendedRejectAction(rcMsg.RateToCountWeights, rcMsg.Identifier); break; } } else if (received_object.Type == typeof(CCtoCCSignallingMessage)) { CCtoCCSignallingMessage ccMsg = received_object.Value.ToObject <CCtoCCSignallingMessage>(); switch (ccMsg.State) { case CCtoCCSignallingMessage.CC_MIDDLE_INIT: if (!socketHandler.ContainsKey(ccMsg.Identifier)) { socketHandler.Add(ccMsg.Identifier, writer); } break; case CCtoCCSignallingMessage.RE_ROUTE_QUERY: cc.reRouteInit(); break; } } } catch (IOException ex) { } } }
private void Listen() { TcpClient clienttmp = new TcpClient("127.0.0.1", this.port); reader = new BinaryReader(clienttmp.GetStream()); writer = new BinaryWriter(clienttmp.GetStream()); try { while (true) { string received_data = reader.ReadString(); JSON received_object = JSON.Deserialize(received_data); CCtoCCSignallingMessage received_Protocol = received_object.Value.ToObject <CCtoCCSignallingMessage>(); if (received_Protocol.State == CCtoCCSignallingMessage.CC_UP_FIB_CHANGE) { //insert FIB NetNode.log(DateTime.Now.ToLongTimeString() + " [CC -> node] insertFib", ConsoleColor.Yellow); List <FIB> rec = received_Protocol.Fib_table; //TODO allocate resources foreach (var row in rec) { if (LRM.allocateResource(row.iport, row.in_cont)) { NetNode.log(DateTime.Now.ToLongTimeString() + " [CC -> node] allocate: " + row.iport + " " + row.in_cont, ConsoleColor.Yellow); if (LRM.allocateResource(row.oport, row.out_cont)) { NetNode.log(DateTime.Now.ToLongTimeString() + " [CC -> node] allocate: " + row.oport + " " + row.out_cont, ConsoleColor.Yellow); sendTopologyAllocated(row.iport, row.in_cont); sendTopologyAllocated(row.oport, row.out_cont); SwitchingField.addToSwitch(row); SwitchingField.addToSwitch(new FIB(row.oport, row.out_cont, row.iport, row.in_cont)); sendConfirmation(row.iport, row.in_cont, true); } else { LRM.deallocateResource(row.iport, row.in_cont); sendConfirmation(row.iport, row.in_cont, false); } } else { sendConfirmation(row.iport, row.in_cont, false); } } } else if (received_Protocol.State == CCtoCCSignallingMessage.REALEASE_TOP_BOTTOM) { foreach (var fib in received_Protocol.Fib_table) { NetNode.log(DateTime.Now.ToLongTimeString() + " [CC -> LRM]" + " deallocate" + fib.toString(), ConsoleColor.Green); if (LRM.deallocateResource(fib.iport, fib.in_cont)) { sendTopologyDeallocated(fib.iport, fib.in_cont); } if (LRM.deallocateResource(fib.oport, fib.out_cont)) { sendTopologyDeallocated(fib.oport, fib.out_cont); } SwitchingField.clearFib(fib); SwitchingField.clearFib(new FIB(fib.oport, fib.out_cont, fib.iport, fib.in_cont)); } } else { NetNode.log("undefined protocol", ConsoleColor.Red); } } } catch (Exception e) { NetNode.log("\nError sending signal: " + e.Message, ConsoleColor.Red); Thread.Sleep(2000); Environment.Exit(1); } }