Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Strip trailing whitespace and untabify connection.rb.
  • Loading branch information
michaelklishin authored and macournoyer committed Aug 2, 2008
1 parent d7704d7 commit 6923078
Showing 1 changed file with 24 additions and 24 deletions.
48 changes: 24 additions & 24 deletions lib/thin/connection.rb
Expand Up @@ -10,29 +10,29 @@ class Connection < EventMachine::Connection
CHUNKED_REGEXP = /\bchunked\b/i.freeze

include Logging

# Rack application (adapter) served by this connection.
attr_accessor :app

# Backend to the server
attr_accessor :backend

# Current request served by the connection
attr_accessor :request

# Next response sent through the connection
attr_accessor :response

# Calling the application in a threaded allowing
# concurrent processing of requests.
attr_writer :threaded

# Get the connection ready to process a request.
def post_init
@request = Request.new
@response = Response.new
end

# Called when data is received from the client.
def receive_data(data)
trace { data }
Expand All @@ -42,7 +42,7 @@ def receive_data(data)
log_error e
close_connection
end

# Called when all data was received and the request
# is ready to be processed.
def process
Expand All @@ -54,40 +54,40 @@ def process
post_process(pre_process)
end
end

def pre_process
# Add client info to the request env
@request.remote_address = remote_address

# Process the request calling the Rack adapter
@app.call(@request.env)
rescue Exception
handle_error
terminate_request
nil # Signal to post_process that the request could not be processed
end

def post_process(result)
return unless result

# Set the Content-Length header if possible
set_content_length(result) if need_content_length?(result)

@response.status, @response.headers, @response.body = result

log "!! Rack application returned nil body. Probably you wanted it to be an empty string?" if @response.body.nil?
# Make the response persistent if requested by the client
@response.persistent! if @request.persistent?

# Send the response
@response.each do |chunk|
trace { chunk }
send_data chunk
end

# If no more request on that same connection, we close it.
close_connection_after_writing unless persistent?

rescue Exception
handle_error
ensure
Expand All @@ -108,18 +108,18 @@ def handle_error
def terminate_request
@request.close rescue nil
@response.close rescue nil

# Prepare the connection for another request if the client
# supports HTTP pipelining (persistent connection).
post_init if persistent?
end

# Called when the connection is unbinded from the socket
# and can no longer be used to process requests.
def unbind
@backend.connection_finished(self)
end

# Allows this connection to be persistent.
def can_persist!
@can_persist = true
Expand All @@ -135,29 +135,29 @@ def can_persist?
def persistent?
@can_persist && @response.persistent?
end

# +true+ if <tt>app.call</tt> will be called inside a thread.
# You can set all requests as threaded setting <tt>Connection#threaded=true</tt>
# or on a per-request case returning +true+ in <tt>app.deferred?</tt>.
def threaded?
@threaded || (@app.respond_to?(:deferred?) && @app.deferred?(@request.env))
end

# IP Address of the remote client.
def remote_address
@request.forwarded_for || socket_address
rescue Exception
log_error
nil
end

protected

# Returns IP address of peer as a string.
def socket_address
Socket.unpack_sockaddr_in(get_peername)[1]
end

private
def need_content_length?(result)
status, headers, body = result
Expand All @@ -167,7 +167,7 @@ def need_content_length?(result)
return false unless body.kind_of?(String) || body.kind_of?(Array)
true
end

def set_content_length(result)
headers, body = result[1..2]
case body
Expand Down

0 comments on commit 6923078

Please sign in to comment.