diff --git a/lib/websocket/extensions.rb b/lib/websocket/extensions.rb index 14ca7ab..0b246d2 100644 --- a/lib/websocket/extensions.rb +++ b/lib/websocket/extensions.rb @@ -75,6 +75,7 @@ def generate_offer def activate(header) responses = Parser.parse_header(header) @sessions = [] + activated = {} responses.each_offer do |name, params| unless record = @index[name] @@ -83,6 +84,11 @@ def activate(header) ext, session = *record + if activated[name] + raise ExtensionError, %Q{Server sent multiple responses for extension "#{ name }"} + end + activated[name] = true + if reserved = reserved?(ext) raise ExtensionError, %Q{Server sent two extension responses that use the RSV#{ reserved[0] }} + %Q{bit: "#{ reserved[1] }" and "#{ ext.name }"}