ExtendedLenghtReader.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace SuperWebSocket.Protocol.FramePartReader
  6. {
  7. class ExtendedLenghtReader : DataFramePartReader
  8. {
  9. public override int Process(int lastLength, WebSocketDataFrame frame, out IDataFramePartReader nextPartReader)
  10. {
  11. int required = 2;
  12. if (frame.PayloadLenght == 126)
  13. required += 2;
  14. else
  15. required += 8;
  16. if (frame.Length < required)
  17. {
  18. nextPartReader = this;
  19. return -1;
  20. }
  21. if (frame.HasMask)
  22. nextPartReader = MaskKeyReader;
  23. else
  24. {
  25. if (frame.ActualPayloadLength == 0)
  26. {
  27. nextPartReader = null;
  28. return (int)((long)frame.Length - required);
  29. }
  30. nextPartReader = PayloadDataReader;
  31. }
  32. if (frame.Length > required)
  33. return nextPartReader.Process(required, frame, out nextPartReader);
  34. return 0;
  35. }
  36. }
  37. }