rack.handler.grizzly.rb Maven / Gradle / Ivy
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright 2007-2008 Sun Microsystems, Inc. All rights reserved.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common Development
# and Distribution License("CDDL") (collectively, the "License"). You
# may not use this file except in compliance with the License. You can obtain
# a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
# or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific
# language governing permissions and limitations under the License.
#
# When distributing the software, include this License Header Notice in each
# file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
# Sun designates this particular file as subject to the "Classpath" exception
# as provided by Sun in the GPL Version 2 section of the License file that
# accompanied this code. If applicable, add the following below the License
# Header, with the fields enclosed by brackets [] replaced by your own
# identifying information: "Portions Copyrighted [year]
# [name of copyright owner]"
#
# Contributor(s):
#
# If you wish your version of this file to be governed by only the CDDL or
# only the GPL Version 2, indicate your decision by adding "[Contributor]
# elects to include this software in this distribution under the [CDDL or GPL
# Version 2] license." If you don't indicate a single choice of license, a
# recipient has the option to distribute your version of this file under
# either the CDDL, the GPL Version 2 or to extend the choice of license to
# its licensees as provided above. However, if you add GPL Version 2 code
# and therefore, elected the GPL Version 2 license, then the option applies
# only if the new code is made subject to such option by the copyright
# holder.
#
require 'jruby/rack'
module Rack
module Handler
class Grizzly
def initialize(rack_app)
@rack_app = rack_app
end
def call(grizzly_env)
env = env_hash
add_input_errors_scheme(grizzly_env, env)
add_grizzly_request_attributes(grizzly_env, env)
add_variables(grizzly_env, env)
add_headers(grizzly_env, env)
JRuby::Rack::Response.new(@rack_app.call(env))
end
def env_hash
{ "rack.version" => Rack::VERSION, "rack.multithread" => true,
"rack.multiprocess" => false, "rack.run_once" => false }
end
def add_input_errors_scheme(grizzly_env, env)
env['rack.input'] = grizzly_env.to_io
env['rack.errors'] = JRuby::Rack::GrizzlyLog.new
env['rack.url_scheme'] = grizzly_env.getScheme
end
def add_grizzly_request_attributes(grizzly_env, env)
grizzly_env.attribute_names.each do |k|
env[k] = grizzly_env.getAttribute(k)
end
end
def add_variables(grizzly_env, env)
request_uri = grizzly_env.request_uri
path_translated = request_uri.sub(/#{$root}/, '')
path_info = $root != "/" ? path_translated : request_uri
env["REQUEST_METHOD"] ||= grizzly_env.method || "GET"
env["SCRIPT_NAME"] ||= ''
env["REQUEST_URI"] ||= request_uri || ""
env["PATH_INFO"] ||= path_info
env['PATH_TRANSLATED']||= path_translated
env["QUERY_STRING"] ||= grizzly_env.query_string || ""
env["SERVER_NAME"] ||= grizzly_env.server_name || ""
env["REMOTE_HOST"] ||= grizzly_env.remote_host || ""
env["REMOTE_ADDR"] ||= grizzly_env.remote_addr || ""
env["REMOTE_USER"] ||= grizzly_env.remote_user || ""
env["SERVER_PORT"] ||= grizzly_env.server_port.to_s
end
def add_headers(grizzly_env, env)
env["CONTENT_TYPE"] ||= grizzly_env.content_type
env.delete("CONTENT_TYPE") unless env["CONTENT_TYPE"]
env["CONTENT_LENGTH"] ||= grizzly_env.content_length
env["CONTENT_LENGTH"] = env["CONTENT_LENGTH"].to_s
env.delete("CONTENT_LENGTH") unless env["CONTENT_LENGTH"] && env["CONTENT_LENGTH"].to_i >= 0
grizzly_env.header_names.each do |h|
next if h =~ /^Content-(Type|Length)$/i
env["HTTP_#{h.upcase.gsub(/-/, '_')}"] ||= grizzly_env.getHeader(h)
end
end
end
end
end © 2015 - 2025 Weber Informatics LLC | Privacy Policy