Przeglądaj źródła

Merge pull request #156 from mbarnach/Fix_RSV_Bits

Read reserved bit.
Damian Kołakowski 10 lat temu
rodzic
commit
78efa794bc
1 zmienionych plików z 10 dodań i 0 usunięć
  1. 10 0
      Sources/WebSockets.swift

+ 10 - 0
Sources/WebSockets.swift

@@ -78,6 +78,9 @@ public class WebSocketSession: Hashable, Equatable  {
     public class Frame {
         public var opcode = OpCode.Close
         public var fin = false
+        public var rsv1: UInt8 = 0
+        public var rsv2: UInt8 = 0
+        public var rsv3: UInt8 = 0
         public var payload = [UInt8]()
     }
 
@@ -147,6 +150,13 @@ public class WebSocketSession: Hashable, Equatable  {
         let frm = Frame()
         let fst = try socket.read()
         frm.fin = fst & 0x80 != 0
+        frm.rsv1 = fst & 0x40
+        frm.rsv2 = fst & 0x20
+        frm.rsv3 = fst & 0x10
+        guard frm.rsv1 == 0 && frm.rsv2 == 0 && frm.rsv3 == 0
+            else {
+            throw Error.ProtocolError("Reserved frame bit has not been negocitated.")
+        }
         let opc = fst & 0x0F
         guard let opcode = OpCode(rawValue: opc) else {
             // "If an unknown opcode is received, the receiving endpoint MUST _Fail the WebSocket Connection_."