Skip to content

Commit 2bfb7ff

Browse files
committed
report disconnection error only when a real error occurred
1 parent 5b3e07f commit 2bfb7ff

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

Source/Starscream.swift

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -841,13 +841,16 @@ public class WebSocket : NSObject, NSStreamDelegate {
841841
return
842842
}
843843
if receivedOpcode == .ConnectionClose {
844-
var code = CloseCode.Normal.rawValue
844+
var error: CloseCode?
845+
845846
if payloadLen == 1 {
846-
code = CloseCode.ProtocolError.rawValue
847+
error = .ProtocolError
847848
} else if payloadLen > 1 {
848-
code = WebSocket.readUint16(buffer, offset: offset)
849+
let code = WebSocket.readUint16(buffer, offset: offset)
849850
if code < 1000 || (code > 1003 && code < 1007) || (code > 1011 && code < 3000) {
850-
code = CloseCode.ProtocolError.rawValue
851+
error = .ProtocolError
852+
} else {
853+
error = CloseCode(rawValue: code)
851854
}
852855
offset += 2
853856
}
@@ -857,12 +860,15 @@ public class WebSocket : NSObject, NSStreamDelegate {
857860
let bytes = UnsafePointer<UInt8>((buffer+offset))
858861
let str: NSString? = NSString(data: NSData(bytes: bytes, length: len), encoding: NSUTF8StringEncoding)
859862
if str == nil {
860-
code = CloseCode.ProtocolError.rawValue
863+
error = .ProtocolError
861864
}
862865
}
863866
}
864-
doDisconnect(errorWithDetail("connection closed by server", code: code))
865-
writeError(code)
867+
868+
if let code = error?.rawValue where error != .Normal {
869+
doDisconnect(errorWithDetail("connection closed by server", code: code))
870+
writeError(code)
871+
}
866872
return
867873
}
868874
if isControlFrame && payloadLen > 125 {

0 commit comments

Comments
 (0)