lib/rubydns/server.rb in rubydns-0.1.8 vs lib/rubydns/server.rb in rubydns-0.2.0
- old
+ new
@@ -29,10 +29,11 @@
# transaction.respond!("1.2.3.4")
# end
# end
#
def initialize(&block)
+ @events = {}
@rules = []
@otherwise = nil
@logger = Logger.new($stderr)
@@ -66,10 +67,27 @@
end
@rules << [pattern, Proc.new(&block)]
end
+ # Register a named event which may be invoked later using #fire
+ # on(:start) do |server|
+ # RExec.change_user(RUN_AS)
+ # end
+ def on(event_name, &block)
+ @events[event_name] = Proc.new(&block)
+ end
+
+ # Fire the named event, which must have been registered using on.
+ def fire(event_name)
+ callback = @events[event_name]
+
+ if callback
+ callback.call(self)
+ end
+ end
+
# Specify a default block to execute if all other rules fail to match.
# This block is typially used to pass the request on to another server
# (i.e. recursive request).
#
# otherwise do |transaction|
@@ -136,11 +154,11 @@
end
end
# Process an incoming DNS message. Returns a serialized message to be
# sent back to the client.
- def receive_data(data)
+ def receive_data(data, &block)
query = Resolv::DNS::Message::decode(data)
# Setup answer
answer = Resolv::DNS::Message::new(query.id)
answer.qr = 1 # 0 = Query, 1 = Response
@@ -162,9 +180,13 @@
answer.rcode = Resolv::DNS::RCode::ServFail
end
end
- return answer.encode
+ if block_given?
+ yield answer
+ else
+ return answer
+ end
end
end
end