ChangeRequestStunAttributeValue.cs 780 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. using Microsoft;
  2. using System;
  3. namespace STUN.Messages.StunAttributeValues;
  4. /// <summary>
  5. /// https://tools.ietf.org/html/rfc5780#section-7.2
  6. /// </summary>
  7. public class ChangeRequestStunAttributeValue : IStunAttributeValue
  8. {
  9. public bool ChangeIp { get; set; }
  10. public bool ChangePort { get; set; }
  11. public int WriteTo(Span<byte> buffer)
  12. {
  13. Requires.Range(buffer.Length >= 4, nameof(buffer));
  14. buffer[0] = buffer[1] = buffer[2] = 0;
  15. buffer[3] = (byte)(Convert.ToInt32(ChangeIp) << 2 | Convert.ToInt32(ChangePort) << 1);
  16. return 4;
  17. }
  18. public bool TryParse(ReadOnlySpan<byte> buffer)
  19. {
  20. if (buffer.Length != 4)
  21. {
  22. return false;
  23. }
  24. ChangeIp = Convert.ToBoolean(buffer[3] >> 2 & 1);
  25. ChangePort = Convert.ToBoolean(buffer[3] >> 1 & 1);
  26. return true;
  27. }
  28. }