Mercurial > prosody-modules
comparison mod_websocket/mod_websocket.lua @ 856:7eb54ed58856
mod_websocket: Add CORS support
| author | Florian Zeitz <florob@babelmonkeys.de> |
|---|---|
| date | Wed, 31 Oct 2012 20:07:23 +0100 |
| parents | 4d27552ac443 |
| children | 1393af36ec9c |
comparison
equal
deleted
inserted
replaced
| 855:1983d4d51e1a | 856:7eb54ed58856 |
|---|---|
| 30 | 30 |
| 31 local c2s_timeout = module:get_option_number("c2s_timeout"); | 31 local c2s_timeout = module:get_option_number("c2s_timeout"); |
| 32 local stream_close_timeout = module:get_option_number("c2s_close_timeout", 5); | 32 local stream_close_timeout = module:get_option_number("c2s_close_timeout", 5); |
| 33 local opt_keepalives = module:get_option_boolean("tcp_keepalives", false); | 33 local opt_keepalives = module:get_option_boolean("tcp_keepalives", false); |
| 34 local self_closing_stream = module:get_option_boolean("websocket_self_closing_stream", true); | 34 local self_closing_stream = module:get_option_boolean("websocket_self_closing_stream", true); |
| 35 | |
| 36 local cross_domain = module:get_option("cross_domain_websocket"); | |
| 37 if cross_domain then | |
| 38 if cross_domain == true then | |
| 39 cross_domain = "*"; | |
| 40 elseif type(cross_domain) == "table" then | |
| 41 cross_domain = table.concat(cross_domain, ", "); | |
| 42 end | |
| 43 if type(cross_domain) ~= "string" then | |
| 44 cross_domain = nil; | |
| 45 end | |
| 46 end | |
| 35 | 47 |
| 36 local sessions = module:shared("sessions"); | 48 local sessions = module:shared("sessions"); |
| 37 local core_process_stanza = prosody.core_process_stanza; | 49 local core_process_stanza = prosody.core_process_stanza; |
| 38 | 50 |
| 39 local stream_callbacks = { default_ns = "jabber:client", handlestanza = core_process_stanza }; | 51 local stream_callbacks = { default_ns = "jabber:client", handlestanza = core_process_stanza }; |
| 461 response.status = "101 Switching Protocols"; | 473 response.status = "101 Switching Protocols"; |
| 462 response.headers.Upgrade = "websocket"; | 474 response.headers.Upgrade = "websocket"; |
| 463 response.headers.Connection = "Upgrade"; | 475 response.headers.Connection = "Upgrade"; |
| 464 response.headers.Sec_WebSocket_Accept = base64(sha1(request.headers.sec_websocket_key .. "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")); | 476 response.headers.Sec_WebSocket_Accept = base64(sha1(request.headers.sec_websocket_key .. "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")); |
| 465 response.headers.Sec_WebSocket_Protocol = "xmpp"; | 477 response.headers.Sec_WebSocket_Protocol = "xmpp"; |
| 478 response.headers.Access_Control_Allow_Origin = cross_domain; | |
| 466 | 479 |
| 467 return ""; | 480 return ""; |
| 468 end | 481 end |
| 469 | 482 |
| 470 function module.add_host(module) | 483 function module.add_host(module) |
