示例#1
0
        internal QuicConnection(ConnectionData connection)
        {
            _currentTransferRate = 0;
            _state     = ConnectionState.Open;
            _lastError = string.Empty;
            _streams   = new Dictionary <UInt64, QuicStream>();
            _pwt       = connection.PWT;

            ConnectionId     = connection.ConnectionId;
            PeerConnectionId = connection.PeerConnectionId;
            // Also creates a new number space
            PacketCreator = new PacketCreator(ConnectionId, PeerConnectionId);
            MaxData       = QuicSettings.MaxData;
            MaxStreams    = QuicSettings.MaximumStreamId;
        }
示例#2
0
        /// <summary>
        /// Connect to a remote server.
        /// </summary>
        /// <param name="ip">Ip Address</param>
        /// <param name="port">Port</param>
        /// <returns></returns>
        public QuicConnection Connect(string ip, int port)
        {
            // Establish socket connection
            _peerIp = new IPEndPoint(IPAddress.Parse(ip), port);

            // Initialize packet reader
            _pwt = new PacketWireTransfer(_client, _peerIp);

            // Start initial protocol process
            InitialPacket connectionPacket = _packetCreator.CreateInitialPacket(0, 0);

            // Send the initial packet
            _pwt.SendPacket(connectionPacket);

            // Await response for sucessfull connection creation by the server
            InitialPacket packet = (InitialPacket)_pwt.ReadPacket();

            HandleInitialFrames(packet);
            EstablishConnection(packet.SourceConnectionId, packet.SourceConnectionId);

            return(_connection);
        }
示例#3
0
        /// <summary>
        /// Starts the listener.
        /// </summary>
        public void Start()
        {
            _client  = new UdpClient(_port);
            _started = true;
            _pwt     = new PacketWireTransfer(_client, null);

            while (true)
            {
                Packet packet = _pwt.ReadPacket();
                if (packet is InitialPacket)
                {
                    QuicConnection connection = ProcessInitialPacket(packet, _pwt.LastTransferEndpoint());

                    OnClientConnected?.Invoke(connection);
                }

                if (packet is ShortHeaderPacket)
                {
                    ProcessShortHeaderPacket(packet);
                }
            }
        }
示例#4
0
 /// <summary>
 /// Starts the listener.
 /// </summary>
 public void Start()
 {
     _client  = new UdpClient(_port);
     _started = true;
     _pwt     = new PacketWireTransfer(_client, null);
 }
示例#5
0
 public ConnectionData(PacketWireTransfer pwt, uint connectionId, uint peerConnnectionId)
 {
     Pwt              = pwt;
     ConnectionId     = connectionId;
     PeerConnectionId = peerConnnectionId;
 }