lib/vines/stream/http.rb in vines-0.1.1 vs lib/vines/stream/http.rb in vines-0.2.0

- old
+ new

@@ -15,41 +15,43 @@ router.delete(self) @parser = ::Http::Parser.new.tap do |p| body = '' p.on_body = proc {|data| body << data } p.on_message_complete = proc { - process_request(body) + process_request(Request.new(self, @parser, body)) body = '' } end end - # Return true if this session ID matches the stream's session ID. Clients - # are only allowed one session per stream so they must send the same - # session ID on each request. + # If the session ID is valid, switch this stream's session to the new + # ID and return true. Some clients, like Google Chrome, reuse one stream + # for multiple sessions. def valid_session?(sid) - @session.id == sid + if session = Sessions[sid] + @session = session + end + !!session end - def max_stanza_size - @config[:http].max_stanza_size + %w[max_stanza_size max_resources_per_account private_storage? bind root].each do |name| + define_method name do |*args| + @config[:http].send(name, *args) + end end - def max_resources_per_account - @config[:http].max_resources_per_account - end - - def process_request(body) - # proxy server ping - if body.empty? - req = Request.new(self, nil, 'text/plain') - req.reply('online') - close_connection_after_writing - else - body = Nokogiri::XML(body).root - req = Request.new(self, body['rid'], @session.content_type) - @session.request(req) + def process_request(request) + if request.path == self.bind + body = Nokogiri::XML(request.body).root + if session = Sessions[body['sid']] + session.request(request) + else + @session = Http::Session.new(self) + @session.request(request) + end @nodes.push(body) + else + request.reply_with_file(self.root) end end # Alias the Stream#write method before overriding it so we can call # it later from a Session instance.