00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef INC_SPF_RESPONSE
00017 #define INC_SPF_RESPONSE
00018
00078 typedef
00079 enum SPF_result_enum {
00080 SPF_RESULT_INVALID = 0,
00081 SPF_RESULT_NEUTRAL,
00082 SPF_RESULT_PASS,
00083 SPF_RESULT_FAIL,
00084 SPF_RESULT_SOFTFAIL,
00085
00086 SPF_RESULT_NONE,
00087 SPF_RESULT_TEMPERROR,
00088 SPF_RESULT_PERMERROR
00089 } SPF_result_t;
00090
00099 typedef
00100 enum SPF_reason_enum {
00101 SPF_REASON_NONE = 0
00102 , SPF_REASON_FAILURE
00103 , SPF_REASON_LOCALHOST
00104 , SPF_REASON_LOCAL_POLICY
00105 , SPF_REASON_MECH
00106 , SPF_REASON_DEFAULT
00107 , SPF_REASON_2MX
00108 } SPF_reason_t;
00109
00118 typedef
00119 enum SPF_errcode_t {
00120 SPF_E_SUCCESS = 0
00121 , SPF_E_NO_MEMORY
00122 , SPF_E_NOT_SPF
00123 , SPF_E_SYNTAX
00124 , SPF_E_MOD_W_PREF
00125 , SPF_E_INVALID_CHAR
00126 , SPF_E_UNKNOWN_MECH
00127 , SPF_E_INVALID_OPT
00128 , SPF_E_INVALID_CIDR
00129 , SPF_E_MISSING_OPT
00130 , SPF_E_INTERNAL_ERROR
00131 , SPF_E_INVALID_ESC
00132 , SPF_E_INVALID_VAR
00133 , SPF_E_BIG_SUBDOM
00134 , SPF_E_INVALID_DELIM
00135 , SPF_E_BIG_STRING
00136 , SPF_E_BIG_MECH
00137 , SPF_E_BIG_MOD
00138 , SPF_E_BIG_DNS
00139 , SPF_E_INVALID_IP4
00140 , SPF_E_INVALID_IP6
00141 , SPF_E_INVALID_PREFIX
00142 , SPF_E_RESULT_UNKNOWN
00143 , SPF_E_UNINIT_VAR
00144 , SPF_E_MOD_NOT_FOUND
00145 , SPF_E_NOT_CONFIG
00146 , SPF_E_DNS_ERROR
00147 , SPF_E_BAD_HOST_IP
00148 , SPF_E_BAD_HOST_TLD
00149 , SPF_E_MECH_AFTER_ALL
00151 , SPF_E_INCLUDE_RETURNED_NONE
00152 , SPF_E_RECURSIVE
00153 , SPF_E_MULTIPLE_RECORDS
00154 } SPF_errcode_t;
00155
00156 typedef
00157 struct SPF_error_struct
00158 {
00159 SPF_errcode_t code;
00160 char *message;
00161 char is_error;
00162 } SPF_error_t;
00163
00164 typedef struct SPF_response_struct SPF_response_t;
00165
00166 #include "spf.h"
00167 #include "spf_request.h"
00168
00169 struct SPF_response_struct {
00170
00171 SPF_request_t *spf_request;
00172 SPF_record_t *spf_record_exp;
00173
00174
00175 SPF_result_t result;
00176 SPF_reason_t reason;
00177 SPF_errcode_t err;
00178
00179 char *received_spf;
00180 char *received_spf_value;
00181 char *header_comment;
00182 char *smtp_comment;
00183 char *explanation;
00184
00185
00186 SPF_error_t *errors;
00187 unsigned short errors_size;
00188 unsigned short errors_length;
00189 unsigned short num_errors;
00191
00192 int num_dns_mech;
00193 };
00194
00195
00196 SPF_response_t *SPF_response_new(SPF_request_t *spf_request);
00197 void SPF_response_free(SPF_response_t *rp);
00198 SPF_response_t *SPF_response_combine(SPF_response_t *main,
00199 SPF_response_t *r2mx);
00200
00201
00202 SPF_result_t SPF_response_result(SPF_response_t *rp);
00203 SPF_reason_t SPF_response_reason(SPF_response_t *rp);
00204 SPF_errcode_t SPF_response_errcode(SPF_response_t *rp);
00205 const char *SPF_response_get_received_spf(SPF_response_t *rp);
00206 const char *SPF_response_get_received_spf_value(SPF_response_t*rp);
00207 const char *SPF_response_get_header_comment(SPF_response_t *rp);
00208 const char *SPF_response_get_smtp_comment(SPF_response_t *rp);
00209 const char *SPF_response_get_explanation(SPF_response_t *rp);
00210
00212 int SPF_response_messages(SPF_response_t *rp);
00214 int SPF_response_errors(SPF_response_t *rp);
00216 int SPF_response_warnings(SPF_response_t *rp);
00218 SPF_error_t *SPF_response_message(SPF_response_t *rp, int idx);
00219
00220 SPF_errcode_t SPF_error_code(SPF_error_t *err);
00221 const char * SPF_error_message(SPF_error_t *err);
00222 char SPF_error_errorp(SPF_error_t *err);
00223
00226 SPF_errcode_t SPF_response_add_error_ptr(SPF_response_t *rp,
00227 SPF_errcode_t code,
00228 const char *text, const char *tptr,
00229 const char *format, ...);
00230 SPF_errcode_t SPF_response_add_error_idx(SPF_response_t *rp,
00231 SPF_errcode_t code,
00232 const char *text, int idx,
00233 const char *format, ...);
00234 SPF_errcode_t SPF_response_add_error(SPF_response_t *rp,
00235 SPF_errcode_t code,
00236 const char *format, ...);
00237 SPF_errcode_t SPF_response_add_warn_ptr(SPF_response_t *rp,
00238 SPF_errcode_t code,
00239 const char *text, const char *tptr,
00240 const char *format, ...);
00241 SPF_errcode_t SPF_response_add_warn_idx(SPF_response_t *rp,
00242 SPF_errcode_t code,
00243 const char *text, int idx,
00244 const char *format, ...);
00245 SPF_errcode_t SPF_response_add_warn(SPF_response_t *rp,
00246 SPF_errcode_t code,
00247 const char *format, ...);
00248
00249 #endif