private void HandleSnpLinkConnectionAllocation(SignallingMessage message)
        {
            var snpps = (SubnetworkPointPool[])message.Payload;

            OnUpdateState($"[RECEIVED_SNPP] {snpps[0]}---{snpps[1]}");

            if (_clientOutSnpps.ContainsKey(message.DestinationClientAddress))
            {
                OnUpdateState("[DESTINATION_CLIENT_LOCATED]");

                var snppOut = snpps[1];
                var linkOut = FindLinkByBegin(snppOut);
                var snpOut  = GenerateSnp(linkOut, message.DemandedCapacity);
                var pairOut = new SubnetworkPointPortPair(snpOut, snppOut.Id);

                _recentSnpPortPairs.Add(message.SessionId, pairOut);

                message.Payload = pairOut;
                SendSnpLinkConnectionAllocation(message);
            }
            else
            {
                SendSnpNegotiation(message);
            }
        }
Пример #2
0
        private void SendDirectoryAddressRequestResponse(SignallingMessage message)
        {
            var clientNames = (string[])message.Payload;

            NetworkAddress[] clientAddresses = null;
            try {
                var clientAddressA = _clientAddressDictionary[clientNames[0]];
                var clientAddressZ = _clientAddressDictionary[clientNames[1]];
                clientAddresses = new[] { clientAddressA, clientAddressZ };
                OnUpdateState($"[FOUND] {clientNames[1]}");
            }
            catch (KeyNotFoundException) {
                OnUpdateState($"[NOT_FOUND] {clientNames[1]}");
            }


            var directioryResponse = message;

            directioryResponse.Operation                      = OperationType.DirectoryAddressRequest;
            directioryResponse.Payload                        = clientAddresses;
            directioryResponse.DestinationAddress             = message.SourceAddress;
            directioryResponse.DestinationControlPlaneElement =
                ControlPlaneElementType.NCC;

            SendMessage(directioryResponse);
            EndSession(message.SessionId);
        }
Пример #3
0
        private void SendDirectorySnppRequestResponse(SignallingMessage message)
        {
            var clientNames = (string[])message.Payload;

            SubnetworkPointPool[] snpp = null;
            try {
                var snmpA = _snppDictionary[clientNames[0]];
                var snmpZ = _snppDictionary[clientNames[1]];

                snpp = new[] { snmpA, snmpZ };
                OnUpdateState($"[FOUND] {clientNames[1]}");
            }
            catch (KeyNotFoundException e) {
                OnUpdateState($"[NOT_FOUND] {clientNames[1]}");
            }

            var directioryResponse = message;

            directioryResponse.Operation                      = OperationType.DirectorySnppRequest;
            directioryResponse.Payload                        = snpp;
            directioryResponse.DestinationAddress             = message.SourceAddress;
            directioryResponse.DestinationControlPlaneElement =
                ControlPlaneElementType.NCC;

            SendMessage(directioryResponse);
            EndSession(message.SessionId);
        }
 private void SendCallTeardownResponse(SignallingMessage message)
 {
     message.Operation                      = OperationType.CallTeardownResponse;
     message.DestinationAddress             = message.SourceAddress;
     message.DestinationControlPlaneElement = ControlPlaneElementType.NCC;
     SendMessage(message);
 }
Пример #5
0
 private void HandleConnectionRequestFromCC(SignallingMessage message)
 {
     if (message.Payload == null)
     {
         SendConnectionRequestResponse(message, null);
     }
     else
     {
         if (message.Payload is SubnetworkPoint)
         {
             ProcessNextSnppPair(message);
         }
         else if (message.Payload is SubnetworkPointPool[])
         {
             var snpps = (SubnetworkPointPool[])message.Payload;
             if (snpps[0].NodeAddress.Equals(LocalAddress))
             {
                 SendLinkConnectionRequest(message);
             }
             else
             {
                 SendRouteTableQuery(message);
             }
         }
     }
 }
Пример #6
0
        public override void ReceiveMessage(SignallingMessage message)
        {
            base.ReceiveMessage(message);

            switch (message.Operation)
            {
            case OperationType.ConnectionRequest:
                if (message.SourceControlPlaneElement.Equals(ControlPlaneElementType.NCC))
                {
                    HandleConnectionRequestFromNCC(message);
                }
                else if (message.SourceControlPlaneElement.Equals(ControlPlaneElementType.CC))
                {
                    HandleConnectionRequestFromCC(message);
                }
                break;

            case OperationType.PeerCoordination:
                HandlePeerCoordination(message);
                break;

            case OperationType.RouteTableQuery:
                HandleRouteTableQuery(message);
                break;

            case OperationType.LinkConnectionAllocation:
                HandleLinkConnectionAllocation(message);
                break;
            }
        }
        private void HandleSnpNegotiationResponse(SignallingMessage message)
        {
            var payload = (object[])message.Payload;

            var snpps       = (SubnetworkPointPool[])payload[0];
            var nextPairOut = (SubnetworkPointPortPair)payload[1];
            var pairOut     = new SubnetworkPointPortPair(nextPairOut.SubnetworkPoint, snpps[0].Id);

            if (_clientInSnpps.ContainsKey(message.SourceClientAddress))
            {
                OnUpdateState("[SOURCE_CLIENT_LOCATED]");
                var snppIn = _clientInSnpps[message.SourceClientAddress];
                var linkIn = FindLinkByEnd(snppIn);
                var snpIn  = GenerateSnp(linkIn, message.DemandedCapacity);
                var pairIn = new SubnetworkPointPortPair(snpIn, snppIn.Id);
                InsertRow(new [] { pairIn, pairOut });

                message.Payload = pairIn;
            }
            else
            {
                _recentSnpPortPairs.Add(message.SessionId, pairOut);

                message.Payload = pairOut;
            }


            SendSnpLinkConnectionAllocation(message);
        }
Пример #8
0
 private void HandlePolicyRequest(SignallingMessage message)
 {
     if ((bool)message.Payload)
     {
         SendDirectorySnppRequest(message);
     }
 }
        private void SendSnpLinkConnectionAllocation(SignallingMessage message)
        {
            message.DestinationAddress             = LocalAddress;
            message.DestinationControlPlaneElement = ControlPlaneElementType.CC;
            message.Operation = OperationType.LinkConnectionAllocation;

            SendMessage(message);
        }
Пример #10
0
        private void HandleDirectoryNameRequest(SignallingMessage message)
        {
            var clientName = (string[])message.Payload;

            _nameDictionary.Add(message.SessionId, clientName);

            SendCallAccept(message);
        }
Пример #11
0
        private void HandleCallRequest(SignallingMessage message)
        {
            var clientNames = (string[])message.Payload;

            _nameDictionary.Add(message.SessionId, clientNames);

            SendPolicyRequest(message);
        }
Пример #12
0
        private void HandleCallCoordination(SignallingMessage message)
        {
            var networkAddress = (NetworkAddress[])message.Payload;

            _networkAddressDictionary.Add(message.SessionId, networkAddress);

            SendDirectoryNameRequest(message);
        }
        protected void SendMessage(SignallingMessage message)
        {
            message.SourceAddress             = LocalAddress;
            message.SourceControlPlaneElement = ControlPlaneElementType;

            OnUpdateState("[OUT] " + message);
            MessageToSend?.Invoke(this, message);
        }
Пример #14
0
        private void HandleDirectorySnppRequest(SignallingMessage message)
        {
            var snpp = (SubnetworkPointPool[])message.Payload;

            _snppDictionary.Add(message.SessionId, snpp);


            SendDirectoryAddressRequest(message);
        }
Пример #15
0
        private void HandleNetworkTopology(SignallingMessage message)
        {
            var link = (Link)message.Payload;

            if (UpdateLinkList(link))
            {
                OnUpdateState($"[TOPOLOGY_UPDATE] {link}");
            }
        }
        private void SendSnpNegotiationResponse(SignallingMessage message, SubnetworkPointPortPair subnetworkPointPortPair)
        {
            message.Payload = new object[]
            { (SubnetworkPointPool[])message.Payload, subnetworkPointPortPair };
            message.DestinationAddress             = message.SourceAddress;
            message.DestinationControlPlaneElement = ControlPlaneElementType.LRM;

            SendMessage(message);
        }
Пример #17
0
        private void SendLocalTopology(SignallingMessage message)
        {
            message.Operation                      = OperationType.LocalTopology;
            message.DestinationAddress             = LocalAddress.GetParentsAddress();
            message.DestinationControlPlaneElement =
                ControlPlaneElementType.RC;

            SendMessage(message);
            EndSession(message.SessionId);
        }
Пример #18
0
        private void SendPolicyRequest(SignallingMessage message)
        {
            var policyRequest = message;

            policyRequest.Operation                      = OperationType.PolicyRequest;
            policyRequest.DestinationAddress             = NameServer.Address;
            policyRequest.DestinationControlPlaneElement = ControlPlaneElementType.Policy;

            SendMessage(policyRequest);
        }
Пример #19
0
        private void SendPeerCoordination(SignallingMessage message)
        {
            var peerCoordination = message;

            peerCoordination.Operation                      = OperationType.PeerCoordination;
            peerCoordination.DestinationAddress             = OtherDomainAddress();
            peerCoordination.DestinationControlPlaneElement = ControlPlaneElementType.CC;

            SendMessage(peerCoordination);
        }
Пример #20
0
        private void SendNetworkTopology(SignallingMessage message)
        {
            message.Operation                      = OperationType.NetworkTopology;
            message.DestinationAddress             = GetOtherDomainAddress(LocalAddress);
            message.DestinationControlPlaneElement =
                ControlPlaneElementType.RC;

            SendMessage(message);
            EndSession(message.SessionId);
        }
Пример #21
0
        private void SendLinkConnectionRequest(SignallingMessage message)
        {
            var linkConnectionRequest = message;

            linkConnectionRequest.Operation                      = OperationType.LinkConnectionAllocation;
            linkConnectionRequest.DestinationAddress             = LocalAddress;
            linkConnectionRequest.DestinationControlPlaneElement = ControlPlaneElementType.LRM;

            SendMessage(linkConnectionRequest);
        }
Пример #22
0
        private void SendRouteTableQueryResponse(SignallingMessage message)
        {
            message.Operation                      = OperationType.RouteTableQuery;
            message.DestinationAddress             = message.SourceAddress;
            message.DestinationControlPlaneElement =
                ControlPlaneElementType.CC;

            SendMessage(message);
            EndSession(message.SessionId);
        }
        private void SendSnpNegotiation(SignallingMessage message)
        {
            var snpps = (SubnetworkPointPool[])message.Payload;

            message.Operation                      = OperationType.SNPNegotiation;
            message.DestinationAddress             = snpps[1].NodeAddress;
            message.DestinationControlPlaneElement = ControlPlaneElementType.LRM;

            SendMessage(message);
        }
        public virtual void ReceiveMessage(SignallingMessage message)
        {
            OnUpdateState("[IN]  " + message);
            var sessionId = message.SessionId;

            if (!IsCurrentlyHandled(sessionId))
            {
                StartSession(sessionId);
            }
        }
Пример #25
0
        private void SendRouteTableQuery(SignallingMessage message)
        {
            var routeTableQuery = message;

            routeTableQuery.Operation                      = OperationType.RouteTableQuery;
            routeTableQuery.DestinationAddress             = LocalAddress;
            routeTableQuery.DestinationControlPlaneElement = ControlPlaneElementType.RC;

            SendMessage(routeTableQuery);
        }
        private void SendLocalTopology(Link link)
        {
            var message = new SignallingMessage {
                Operation                      = OperationType.LocalTopology,
                DestinationAddress             = LocalAddress.GetParentsAddress(),
                DestinationControlPlaneElement = ControlPlaneElementType.RC,
                Payload = link
            };

            SendMessage(message);
        }
Пример #27
0
        public override void ReceiveMessage(SignallingMessage message)
        {
            base.ReceiveMessage(message);

            switch (message.Operation)
            {
            case OperationType.CallRequest:
                HandleCallRequest(message);
                break;

            case OperationType.PolicyRequest:
                HandlePolicyRequest(message);
                break;

            case OperationType.DirectorySnppRequest:
                HandleDirectorySnppRequest(message);
                break;

            case OperationType.DirectoryAddressRequest:
                HandleDirectoryAddressRequest(message);
                break;

            case OperationType.CallCoordination:
                HandleCallCoordination(message);
                break;

            case OperationType.DirectoryNameRequest:
                HandleDirectoryNameRequest(message);
                break;

            case OperationType.CallAccept:
                HandleCallAccept(message);
                break;

            case OperationType.CallCoordinationResponse:
                HandleCallCoordinationResponse(message);
                break;

            case OperationType.ConnectionRequest:
                HandleConnectionRequest(message);
                break;

            case OperationType.ConnectionConfirmationToNCC:
                break;

            case OperationType.CallTeardown:
                HandleCallTeardown(message);
                break;

            case OperationType.CallTeardownResponse:
                HandleCallTeardownResponse(message);
                break;
            }
        }
Пример #28
0
        private void SendDirectorySnppRequest(SignallingMessage message)
        {
            var directioryRequest = message;

            directioryRequest.Operation                      = OperationType.DirectorySnppRequest;
            directioryRequest.Payload                        = _nameDictionary[message.SessionId];
            directioryRequest.DestinationAddress             = NameServer.Address;
            directioryRequest.DestinationControlPlaneElement = ControlPlaneElementType.Directory;

            SendMessage(directioryRequest);
        }
Пример #29
0
        private void SendDirectoryNameRequest(SignallingMessage message)
        {
            var directioryRequest = message;

            directioryRequest.Operation                      = OperationType.DirectoryNameRequest;
            directioryRequest.Payload                        = (NetworkAddress[])message.Payload;
            directioryRequest.DestinationAddress             = NameServer.Address;
            directioryRequest.DestinationControlPlaneElement = ControlPlaneElementType.Directory;

            SendMessage(directioryRequest);
        }
Пример #30
0
        private void SendCallCoordinationResponse(SignallingMessage message)
        {
            var callConfirmation = message;

            callConfirmation.Operation                      = OperationType.CallCoordinationResponse;
            callConfirmation.DestinationAddress             = OtherDomainAddress();
            callConfirmation.DestinationControlPlaneElement =
                ControlPlaneElementType.NCC;

            SendMessage(callConfirmation);
        }