NoneUdpProxy.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Microsoft;
  2. using STUN.Utils;
  3. using System;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. namespace STUN.Proxy
  9. {
  10. public class NoneUdpProxy : IUdpProxy
  11. {
  12. public Socket Client { get; }
  13. public NoneUdpProxy(IPEndPoint localEndPoint)
  14. {
  15. Requires.NotNull(localEndPoint, nameof(localEndPoint));
  16. Client = new Socket(localEndPoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp);
  17. Client.Bind(localEndPoint);
  18. }
  19. public ValueTask ConnectAsync(CancellationToken cancellationToken = default)
  20. {
  21. return default;
  22. }
  23. public ValueTask CloseAsync(CancellationToken cancellationToken = default)
  24. {
  25. return default;
  26. }
  27. public ValueTask<SocketReceiveMessageFromResult> ReceiveMessageFromAsync(Memory<byte> buffer, SocketFlags socketFlags, EndPoint remoteEndPoint, CancellationToken cancellationToken = default)
  28. {
  29. return Client.ReceiveMessageFromAsync(buffer, socketFlags, remoteEndPoint, cancellationToken);
  30. }
  31. public ValueTask<int> SendToAsync(ReadOnlyMemory<byte> buffer, SocketFlags socketFlags, EndPoint remoteEP, CancellationToken cancellationToken = default)
  32. {
  33. return Client.SendToAsync(buffer, socketFlags, remoteEP, cancellationToken);
  34. }
  35. public void Dispose()
  36. {
  37. Client.Dispose();
  38. GC.SuppressFinalize(this);
  39. }
  40. }
  41. }