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); }
public OutboundRTMFPProtocol() { var udpProtocol = new UDPProtocol { NearProtocol = this }; UDPCarrier.Create("", 0, this); }
public void Start() { var udpProtocol = new UDPProtocol { NearProtocol = this }; UDPCarrier.Create("", 0, this); udpProtocol.IOHandler.Socket.Connect(ServerEndPoint); udpProtocol.IOHandler.ReadEnabled = true; }
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); } }
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); }