Ejemplo n.º 1
0
        public bool CreateCarriers(InboundRtpProtocol rtp, RtcpProtocol rtcp)
        {
            UDPCarrier pCarrier1 = null;
            UDPCarrier pCarrier2 = null;

            for (var i = 0; i < 10; i++)
            {
                if (pCarrier1 != null)
                {
                    pCarrier1.Dispose();
                    pCarrier1 = null;
                }
                if (pCarrier2 != null)
                {
                    pCarrier2.Dispose();
                    pCarrier2 = null;
                }

                pCarrier1 = UDPCarrier.Create("0.0.0.0", 0);
                if (pCarrier1 == null)
                {
                    WARN("Unable to create UDP carrier for RTP");
                    continue;
                }

                pCarrier2 = (pCarrier1.NearPort % 2) == 0 ? UDPCarrier.Create("0.0.0.0", pCarrier1.NearPort + 1) : UDPCarrier.Create("0.0.0.0", pCarrier1.NearPort - 1);

                if (pCarrier2 == null)
                {
                    WARN("Unable to create UDP carrier for RTCP");
                    continue;
                }

                if (pCarrier1.NearPort > pCarrier2.NearPort)
                {
                    WARN("Switch carriers");
                    UDPCarrier pTemp = pCarrier1;
                    pCarrier1 = pCarrier2;
                    pCarrier2 = pTemp;
                }
                pCarrier1.Protocol         = rtp.FarEndpoint;
                rtp.FarEndpoint.IOHandler  = pCarrier1;
                pCarrier2.Protocol         = rtcp.FarEndpoint;
                rtcp.FarEndpoint.IOHandler = pCarrier2;
                return(pCarrier1.StartAccept() | pCarrier2.StartAccept());
            }

            if (pCarrier1 != null)
            {
                pCarrier1.Dispose();
                pCarrier1 = null;
            }
            if (pCarrier2 != null)
            {
                pCarrier2.Dispose();
                pCarrier2 = null;
            }

            return(false);
        }
Ejemplo n.º 2
0
        public OutboundRTMFPProtocol()
        {
            var udpProtocol = new UDPProtocol {
                NearProtocol = this
            };

            UDPCarrier.Create("", 0, this);
        }
Ejemplo n.º 3
0
        public void Start()
        {
            var udpProtocol = new UDPProtocol {
                NearProtocol = this
            };

            UDPCarrier.Create("", 0, this);
            udpProtocol.IOHandler.Socket.Connect(ServerEndPoint);
            udpProtocol.IOHandler.ReadEnabled = true;
        }
Ejemplo n.º 4
0
        bool BindAcceptor(Variant node)
        {
            //1. Get the chain
            var chain = ProtocolFactoryManager.ResolveProtocolChain(node[CONF_PROTOCOL]);

            if (chain.Count == 0)
            {
                WARN("Invalid protocol chain: {0}", node[CONF_PROTOCOL]);
            }
            //2. Is it TCP or UDP based?
            if (chain[0] == ProtocolTypes.PT_TCP)
            {
                //3. This is a tcp acceptor. Instantiate it and start accepting connections
                var pAcceptor = new TCPAcceptor(node[CONF_IP], node[CONF_PORT], node, chain);
                if (!pAcceptor.Bind())
                {
                    FATAL("Unable to fire up acceptor from this config node:{0}", node.ToString());
                    return(false);
                }
                acceptors.Add(pAcceptor);
                return(true);
            }
            else if (chain[0] == ProtocolTypes.PT_UDP)
            {
                //4. Ok, this is an UDP acceptor. Because of that, we can instantiate
                //the full stack. Get the stack first
                var pProtocol = ProtocolFactoryManager.CreateProtocolChain(chain, node);
                if (pProtocol == null)
                {
                    FATAL("Unable to instantiate protocol stack {0}", node[CONF_PROTOCOL]);
                    return(false);
                }
                //5. Create the carrier and bind it
                var pUDPCarrier = UDPCarrier.Create(node[CONF_IP], node[CONF_PORT], pProtocol);
                if (pUDPCarrier == null)
                {
                    FATAL("Unable to instantiate UDP carrier on {0}:{1}", node[CONF_IP],
                          node[CONF_PORT]);
                    pProtocol.EnqueueForDelete();
                    return(false);
                }
                pUDPCarrier.Parameters = node;
                acceptors.Add(pUDPCarrier);
                return(true);
            }
            else
            {
                FATAL("Invalid carrier type");
                return(false);
            }
        }
Ejemplo n.º 5
0
        public void Restart()
        {
            this.RegisterProtocol();
            var udpProtocol = new UDPProtocol {
                NearProtocol = this
            };

            UDPCarrier.Create("", 0, this);
            Session = DownloadSession = new DownloadSession(this);
            DownloadSession.Connect(Url);
            Status    = "正在连接";
            StartTime = DateTime.Now;
            OnPropertyChanged(nameof(TimeSpent));
        }
        public bool InitializePorts(out Socket socket, out int port, ref NATTraversalProtocol ppNATData, out Socket rtcp, out int rtcpPort, ref NATTraversalProtocol ppNATRTCP)
        {
            UDPCarrier carrier1 = null;
            UDPCarrier carrier2 = null;

            for (int i = 0; i < 10; i++)
            {
                if (carrier1 != null)
                {
                    carrier1.Dispose();
                    carrier1 = null;
                }
                if (carrier2 != null)
                {
                    carrier2.Dispose();
                    carrier2 = null;
                }

                carrier1 = UDPCarrier.Create("0.0.0.0", 0);
                if (carrier1 == null)
                {
                    WARN("Unable to create UDP carrier for RTP");
                    continue;
                }

                carrier2 = (carrier1.NearPort % 2) == 0 ? UDPCarrier.Create("0.0.0.0", carrier1.NearPort + 1) : UDPCarrier.Create("0.0.0.0", carrier1.NearPort - 1);

                if (carrier2 == null)
                {
                    WARN("Unable to create UDP carrier for RTCP");
                    continue;
                }

                if (carrier1.NearPort > carrier2.NearPort)
                {
                    WARN("Switch carriers");
                    UDPCarrier pTemp = carrier1;
                    carrier1 = carrier2;
                    carrier2 = pTemp;
                }

                Variant dummy = Variant.Get();
                socket    = carrier1.Socket;
                port      = carrier1.NearPort;
                ppNATData = (NATTraversalProtocol)ProtocolFactoryManager.CreateProtocolChain(Defines.CONF_PROTOCOL_RTP_NAT_TRAVERSAL, dummy);
                if (ppNATData == null)
                {
                    rtcp     = null;
                    rtcpPort = 0;
                    FATAL("Unable to create the protocol chain {0}", Defines.CONF_PROTOCOL_RTP_NAT_TRAVERSAL);
                    return(false);
                }
                carrier1.Protocol = ppNATData.FarEndpoint;
                ppNATData.FarEndpoint.IOHandler = carrier1;
                rtcp      = carrier2.Socket;
                rtcpPort  = carrier2.NearPort;
                ppNATRTCP = (NATTraversalProtocol)ProtocolFactoryManager.CreateProtocolChain(Defines.CONF_PROTOCOL_RTP_NAT_TRAVERSAL, dummy);
                if (ppNATRTCP == null)
                {
                    FATAL("Unable to create the protocol chain {0}", Defines.CONF_PROTOCOL_RTP_NAT_TRAVERSAL);
                    ppNATData.EnqueueForDelete();
                    return(false);
                }
                carrier2.Protocol = ppNATRTCP.FarEndpoint;
                ppNATRTCP.FarEndpoint.IOHandler = carrier2;
                return(true);
            }
            if (carrier1 != null)
            {
                carrier1.Dispose();
                carrier1 = null;
            }
            if (carrier2 != null)
            {
                carrier2.Dispose();
                carrier2 = null;
            }
            socket   = null;
            port     = 0;
            rtcp     = null;
            rtcpPort = 0;
            return(false);
        }