NoneUdpProxy.cs 1.2 KB

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