libspf2 1.2.11
spf_internal.h
Go to the documentation of this file.
1/*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of either:
4 *
5 * a) The GNU Lesser General Public License as published by the Free
6 * Software Foundation; either version 2.1, or (at your option) any
7 * later version,
8 *
9 * OR
10 *
11 * b) The two-clause BSD license.
12 *
13 * These licenses can be found with the distribution in the file LICENSES
14 */
15
16
17
18
19#ifndef INC_SPF_INTERNAL
20#define INC_SPF_INTERNAL
21
22#ifndef TRUE
23#define TRUE 1
24#define FALSE 0
25#endif
26
27#ifndef NULL
28#define NULL ((void *)0)
29#endif
30
31#define array_elem(x) ((long int)(sizeof( x ) / sizeof( *x )))
32
33
34/*
35 * misc macros to make the code look cleaner than it really is
36 */
37
38#ifndef SPF_MAX_DNS_MECH
55#define SPF_MAX_DNS_MECH 10
56#endif
57#ifndef SPF_MAX_DNS_PTR
62#define SPF_MAX_DNS_PTR 10
63#endif
64#ifndef SPF_MAX_DNS_MX
69#define SPF_MAX_DNS_MX 10
70#endif
71
72#if 1
73#define _ALIGN_SZ 4
74static inline size_t _align_sz(size_t s)
75 { return (s + (_ALIGN_SZ - 1 - (((s - 1) & (_ALIGN_SZ - 1))))); }
76static inline char * _align_ptr(char *s)
77 { return (s + (_ALIGN_SZ - 1 - ((((size_t)s - 1) & (_ALIGN_SZ - 1))))); }
78#else
79static inline size_t _align_sz(size_t s) { return s; }
80static inline char * _align_ptr(char *s) { return s; }
81#endif
82
83#include "spf_record.h"
84
85/* FIXME: need to make these network/compiler portable */
86/* FIXME: Several of these duplicate each other. Bad. */
87static inline size_t SPF_mech_data_len( SPF_mech_t * mech )
88 { return (mech->mech_type == MECH_IP4)
89 ? sizeof( struct in_addr )
90 : (mech->mech_type == MECH_IP6)
91 ? sizeof( struct in6_addr )
92 : mech->mech_len; }
93static inline SPF_mech_t *SPF_mech_next( SPF_mech_t * mech )
94 { return (SPF_mech_t *)_align_ptr(
95 (char *)mech + sizeof(SPF_mech_t) + SPF_mech_data_len( mech )
96 ); }
97static inline SPF_data_t *SPF_mech_data( SPF_mech_t *mech )
98 { return (SPF_data_t *)( (char *)mech + sizeof(SPF_mech_t)); }
99static inline SPF_data_t *SPF_mech_end_data( SPF_mech_t *mech )
100 { return (SPF_data_t *)( (char *)SPF_mech_data(mech) +
101 SPF_mech_data_len( mech ));}
102static inline struct in_addr *SPF_mech_ip4_data( SPF_mech_t *mech )
103 { return (struct in_addr *)( (char *)mech + sizeof(SPF_mech_t)); }
104static inline struct in6_addr *SPF_mech_ip6_data( SPF_mech_t *mech )
105 { return (struct in6_addr *)( (char *)mech + sizeof(SPF_mech_t)); }
106
107static inline size_t SPF_data_len( SPF_data_t *data )
108 { return sizeof(SPF_data_t) +
109 (data->ds.parm_type == PARM_STRING ? data->ds.len : 0); }
110static inline SPF_data_t *SPF_data_next( SPF_data_t *data )
111 { return (SPF_data_t *)_align_ptr(
112 (char *)data + SPF_data_len(data)
113 ); }
114static inline char *SPF_data_str( SPF_data_t *data )
115 { return (char *)data + sizeof(SPF_data_t); }
116
117static inline size_t SPF_mod_len( SPF_mod_t *mod )
118 { return _align_sz(sizeof(SPF_mod_t) + mod->name_len) + mod->data_len; }
119static inline SPF_mod_t *SPF_mod_next( SPF_mod_t *mod )
120 { return (SPF_mod_t *)_align_ptr(
121 (char *)mod + SPF_mod_len(mod)
122 ); }
123static inline char *SPF_mod_name( SPF_mod_t *mod )
124 { return (char *)mod + sizeof(SPF_mod_t); }
125static inline SPF_data_t *SPF_mod_data( SPF_mod_t *mod )
126 { return (SPF_data_t *)_align_ptr(
127 (char *)mod + sizeof(SPF_mod_t) + mod->name_len
128 ); }
129static inline SPF_data_t *SPF_mod_end_data( SPF_mod_t *mod )
130 { return (SPF_data_t *)((char *)SPF_mod_data(mod) + mod->data_len); }
131
132static inline size_t SPF_macro_data_len( SPF_macro_t * mac )
133 { return mac->macro_len; }
134static inline SPF_data_t *SPF_macro_data( SPF_macro_t * mac )
135 { return (SPF_data_t *)( (char *)mac + sizeof(SPF_macro_t)); }
136
137
138char *SPF_sanitize( SPF_server_t *spf_server, char *str );
139
140void SPF_print_sizeof(void);
141
148SPF_errcode_t SPF_recalloc(char **bufp, size_t *buflenp, size_t buflen) __attribute__((warn_unused_result));
149
150
158#define SPF_WRAP_FUNCTION(name, proto, args) \
159 SPF_errcode_t name proto { \
160 SPF_errcode_t err = name ## _real args; \
161 SPF_debug(#name " returns %d\n", err); \
162 return err; \
163 } \
164 SPF_errcode_t name ## _real proto
165
166#endif
SPF_errcode_t
#define PARM_STRING
Definition spf_record.h:100
#define MECH_IP6
Definition spf_record.h:168
#define MECH_IP4
Definition spf_record.h:167
#define __attribute__(x)
Definition spf.h:17
char * SPF_sanitize(SPF_server_t *spf_server, char *str)
Definition spf_utils.c:57
void SPF_print_sizeof(void)
Definition spf_print.c:82
#define _ALIGN_SZ
SPF_errcode_t SPF_recalloc(char **bufp, size_t *buflenp, size_t buflen) __attribute__((warn_unused_result))
Definition spf_utils.c:191
unsigned char parm_type
Definition spf_record.h:106
unsigned char len
Definition spf_record.h:107
SPF_data_str_t ds
Definition spf_record.h:144
unsigned char mech_type
Definition spf_record.h:177
unsigned short name_len
Definition spf_record.h:189
unsigned short data_len
Definition spf_record.h:190