Method: SPF::Server#process

Defined in:
lib/spf/eval.rb

#process(request) ⇒ Object



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
# File 'lib/spf/eval.rb', line 92

def process(request)
  request.state(:authority_explanation,       nil)
  request.state(:dns_interactive_terms_count, 0)
  request.state(:void_dns_lookups_count,      0)

  result = nil

  begin
    record = self.select_record(request)
    request.record = record
    record.eval(self, request)
  rescue SPF::Result => r
    result = r
  rescue SPF::DNSError => e
    result = self.result_class(:temperror).new([self, request, e.message])
  rescue SPF::NoAcceptableRecordError => e
    result = self.result_class(:none     ).new([self, request, e.message])
  rescue SPF::RedundantAcceptableRecordsError, SPF::SyntaxError, SPF::ProcessingLimitExceededError => e
    result = self.result_class(:permerror).new([self, request, e.message])
  end
  # Propagate other, unknown errors.
  # This should not happen, but if it does, it helps exposing the bug!

  return result
end