Skip to content

Commit

Permalink
send version 2 specified server push
Browse files Browse the repository at this point in the history
  • Loading branch information
jonasschneider committed Jan 3, 2012
1 parent 4482055 commit a5ab35c
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 13 deletions.
27 changes: 15 additions & 12 deletions lib/momentum/request_stream.rb
Expand Up @@ -34,22 +34,25 @@ def process_request!

protected

def handle_push(url)
logger.debug "[#{@stream_id}] Server Push of #{url} requested"
parsed = URI.parse(url)
original_uri = @request.uri.dup
original_uri.host = parsed.host if parsed.host
original_uri.scheme = parsed.scheme if parsed.scheme
original_uri.path = parsed.path if parsed.path
resource_stream_id = @session.send_syn_stream(@stream_id, { 'host' => original_uri.host, 'scheme' => original_uri.scheme, 'path' => original_uri.path })
# TODO draft3: send :host, :scheme, :path instead of :url
# TODO: Set unidirectional flag
def handle_push(url_text)
parsed = URI.parse(url_text)
logger.debug "[#{@stream_id}] Server Push of #{url_text} requested => #{parsed}"

push_url = @request.uri.dup
push_url.host = parsed.host if parsed.host
push_url.scheme = parsed.scheme if parsed.scheme
push_url.path = parsed.path if parsed.path
resource_stream_id = @session.send_syn_stream(@stream_id, { 'url' => push_url.to_s })

logger.debug "[#{@stream_id}] Interpreting as #{push_url}"

backend_headers = @request.headers.dup
backend_headers['host'] = original_uri.host
backend_headers['scheme'] = original_uri.scheme
backend_headers['path'] = original_uri.path
backend_headers.delete 'url' # Fu, chrome
backend_headers.delete 'host'
backend_headers.delete 'scheme'
backend_headers.delete 'path'
backend_headers['url'] = push_url

push_request = Request.new(headers: backend_headers)
push_backend_reply = @backend.prepare(push_request)
Expand Down
4 changes: 3 additions & 1 deletion spec/momentum/request_stream_spec.rb
Expand Up @@ -57,7 +57,9 @@
end

it "initiates a Server Push when the push callback is called" do
session.should_receive(:send_syn_stream).with(1, {"host"=>"localhost", "scheme"=>"http", "path"=>"/test.js"}) { 3 }
# Draft 3:
# session.should_receive(:send_syn_stream).with(1, {"host"=>"localhost", "scheme"=>"http", "path"=>"/test.js"}) { 3 }
session.should_receive(:send_syn_stream).with(1, {"url"=>"http://localhost/test.js"}) { 3 }
session.should_receive(:send_headers).with(3, pushed_resource_headers)
session.should_receive(:send_data_frame).with(3, pushed_resource_body, false) # FIXME: cannot stub on the pushed stream here
session.should_receive(:send_fin).with(3)
Expand Down

0 comments on commit a5ab35c

Please sign in to comment.