HttpHandlers+WebSockets.swift 954 B

12345678910111213141516171819202122232425262728293031
  1. //
  2. // HttpHandlers+WebSockets.swift
  3. // Swifter
  4. //
  5. // Copyright © 2014-2016 Damian Kołakowski. All rights reserved.
  6. //
  7. import Foundation
  8. extension HttpHandlers {
  9. public class func websocket(message:(String) -> ()) -> (HttpRequest -> HttpResponse) {
  10. func closure(r: HttpRequest) -> HttpResponse {
  11. guard r.headers["upgrade"] == "websocket" else {
  12. return .BadRequest
  13. }
  14. guard r.headers["connection"] == "Upgrade" else {
  15. return .BadRequest
  16. }
  17. guard let secWebSocketKey = r.headers["sec-websocket-key"] else {
  18. return .BadRequest
  19. }
  20. let upgradeHeaders = [ "Upgrade": "weboscket", "Connection": "Upgrade",
  21. "Sec-WebSocket-Accept": secWebSocketKey.SHA1()
  22. ]
  23. return HttpResponse.RAW(101, "Switching Protocols", upgradeHeaders, nil)
  24. }
  25. return closure
  26. }
  27. }