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