2
* This file is part of libESMTP, a library for submission of RFC 2822
3
* formatted electronic mail messages using the SMTP protocol described
6
* Copyright (C) 2001,2002 Brian Stafford <brian@stafford.uklinux.net>
8
* This library is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
13
* This library is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with this library; if not, write to the Free Software
20
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
32
#define ATOMEXCLUDE "\"()<>[]@,;:\\."
33
#define XTEXTEXCLUDE " +="
34
#define WHITESPACE " \t\r\n\v"
41
static char atomchars[256];
42
#define is_atom(c) (atomchars[(int) (c)] & ATOM)
43
#define is_xtext(c) (atomchars[(int) (c)] & XTEXT)
44
#define is_space(c) (atomchars[(int) (c)] & SPACE)
46
#define initatom() do { if (!is_space (' ')) _initatom (); } while (0)
54
/* Mark characters in the printable ASCII range */
55
for (i = ' ' + 1; i <= '~'; i++)
56
atomchars[i] |= (ATOM | GRAPH | XTEXT);
58
/* Turn off the ATOM flag on characters that are excluded */
59
for (p = ATOMEXCLUDE; *p != '\0'; p++)
60
atomchars[(int) *p] &= ~ATOM;
62
/* Turn off the XTEXT flag on printable characters that should be encoded */
63
for (p = XTEXTEXCLUDE; *p != '\0'; p++)
64
atomchars[(int) *p] &= ~XTEXT;
66
/* Mark space characters */
67
for (p = WHITESPACE; *p != '\0'; p++)
68
atomchars[(int) *p] |= SPACE;
72
skipblank (const char *s)
81
read_atom (const char *s, const char **es, char buf[], int len)
91
if (t < buf + len - 1)
102
static char xdigits[] = "0123456789ABCDEF";
104
/* Return a pointer to an xtext encoded string.
107
encode_xtext (char buf[], int len, const char *string)
109
const unsigned char *s;
112
for (s = (const unsigned char *) string, t = buf; *s != '\0'; s++, t++)
114
if (t - buf > len - 1)
121
*t++ = xdigits[(*s & 0xF0) >> 4];
122
*t = xdigits[*s & 0x0F];