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);
         }
     }
 }
Esempio n. 2
0
        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);
     }
 }
Esempio n. 5
0
        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);
        }
Esempio n. 7
0
        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);
                }
            }
        }
Esempio n. 10
0
        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)
                {
                }
            }
        }
Esempio n. 11
0
        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);
            }
        }