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; }
/// <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); }
/// <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); } } }
/// <summary> /// Starts the listener. /// </summary> public void Start() { _client = new UdpClient(_port); _started = true; _pwt = new PacketWireTransfer(_client, null); }
public ConnectionData(PacketWireTransfer pwt, uint connectionId, uint peerConnnectionId) { Pwt = pwt; ConnectionId = connectionId; PeerConnectionId = peerConnnectionId; }