Class: Net::AJP13::Server

Inherits:
Object
  • Object
show all
Includes:
Mutex_m, Constants
Defined in:
lib/net/ajp13/server.rb

Overview

Provides a skeleton to implement an AJP 1.3 server.

Defined Under Namespace

Classes: BodyInput, ProcessRequestNotImplementedError

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Server

host

Host to bind. If ommited or nil, the server will accept requests from any hosts.

serivce

Port number to bind. It can be a service name registered in /etc/services (or NIS).



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/net/ajp13/server.rb', line 48

def initialize(*args) #:args: [host,] service = DEFAULT_PORT
  @host = nil
  @service = DEFAULT_PORT

  case args.length
  when 2
    @host = args[0] if args[0]
    @service = args[1] if args[1]
    @open_socket = lambda{ TCPServer.new(@host, @service) }
  when 1
    @service = args[0] if args[0]
    @open_socket = lambda{ TCPServer.new(@service) }
  when 0
    @open_socket = lambda{ TCPServer.new(@service) }
  else
    raise ArgumentError, "wrong number of arguments (#{args.length} for 0..2)"
  end
end

Instance Attribute Details

#hostObject (readonly)

The instance accepts only requests from #host. If host is nil, it accepts requests from any hosts.

See Also

TCPServer.new, bind(2)



70
71
72
# File 'lib/net/ajp13/server.rb', line 70

def host
  @host
end

#loggerObject

:nodoc:



76
77
78
# File 'lib/net/ajp13/server.rb', line 76

def logger
  @logger
end

#serviceObject (readonly)

The port number to bind.



73
74
75
# File 'lib/net/ajp13/server.rb', line 73

def service
  @service
end

Instance Method Details

#process_request(request) ⇒ Object

You must override this method. The default implementation simply raises a ProcessRequestNotImplementedError.

request

The Net::AJP13::Request object that represents an accepted AJP request.

The return value must be a Net::AJP13::Response object.



130
131
132
# File 'lib/net/ajp13/server.rb', line 130

def process_request(request)
  raise ProcessRequestNotImplementedError, "Must be overridden."
end

#start(sock = nil) ⇒ Object

Starts the server; opens the socket, begins accepting requests, .…

sock

If not nil, the server uses sock instead of opening a new socket.



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/net/ajp13/server.rb', line 89

def start(sock = nil)
  if sock
    @sock = sock
  else
    @sock = @open_socket.call
  end

  @sock.listen(5)
  begin
    until @shutdown
      accepted = @sock.accept
	Thread.new {
 begin
   accepted.sync = false
          process(accepted)
 rescue StandardError => err
   logger.error("#{err.message} from #{err.backtrace.join("\n")}")
 rescue Object => err
   logger.fatal("#{err.message} from #{err.backtrace.join("\n")}")
 else
   logger.debug("closed")
 ensure
   accepted.close unless accepted.closed?
 end
	}
    end
  end

  logger.info("Exited normally.")
rescue Interrupt
  logger.info("Exited by Interrupt.")
ensure
  @sock.close if @sock and !@sock.closed?
end