You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

Socks5UserPasswordRequestMessage.cs 1.9 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System;
  2. namespace Shadowsocks.Protocol.Socks5
  3. {
  4. public class Socks5UserPasswordRequestMessage : Socks5Message
  5. {
  6. // 1 lUser [User] lPassword [Password]
  7. public Memory<byte> User;
  8. public Memory<byte> Password;
  9. public override int Serialize(Memory<byte> buffer)
  10. {
  11. var required = User.Length + Password.Length + 3;
  12. if (buffer.Length < required) throw Util.BufferTooSmall(required, buffer.Length, nameof(buffer));
  13. buffer.Span[0] = 1;
  14. buffer.Span[1] = (byte) User.Length;
  15. User.CopyTo(buffer.Slice(2));
  16. buffer.Span[User.Length + 2] = (byte) Password.Length;
  17. Password.CopyTo(buffer.Slice(User.Length + 3));
  18. return required;
  19. }
  20. public override (bool success, int length) TryLoad(ReadOnlyMemory<byte> buffer)
  21. {
  22. if (buffer.Length < 2) return (false, 2);
  23. if (buffer.Span[0] != 1) return (false, 0);
  24. int userLength = buffer.Span[1];
  25. if (buffer.Length < userLength + 3) return (false, userLength + 3);
  26. int passLength = buffer.Span[userLength + 2];
  27. if (buffer.Length < userLength + passLength + 3) return (false, userLength + passLength + 3);
  28. User = Util.GetArray(buffer[2..(2 + userLength)]);
  29. Password = Util.GetArray(buffer[(3 + userLength)..(3 + userLength + passLength)]);
  30. return (true, userLength + passLength + 3);
  31. }
  32. public override bool Equals(IProtocolMessage other)
  33. {
  34. if (other is null) return false;
  35. if (ReferenceEquals(this, other)) return true;
  36. if (other.GetType() != GetType()) return false;
  37. var msg = (Socks5UserPasswordRequestMessage) other;
  38. return User.SequenceEqual(msg.User) && Password.SequenceEqual(msg.Password);
  39. }
  40. }
  41. }