xref: /plan9/sys/src/cmd/upas/smtp/smtp.h (revision ab6a5be186deff04fbbe60c477b11550cd87977e)
1617c0e1eSDavid du Colombier enum {
2617c0e1eSDavid du Colombier 	Maxbustedmx = 100,
3*ab6a5be1SDavid du Colombier 	Maxdomain = 1024,
4617c0e1eSDavid du Colombier };
5617c0e1eSDavid du Colombier 
63e12c5d1SDavid du Colombier typedef struct Node Node;
73e12c5d1SDavid du Colombier typedef struct Field Field;
83e12c5d1SDavid du Colombier typedef Node *Nodeptr;
93e12c5d1SDavid du Colombier #define YYSTYPE Nodeptr
103e12c5d1SDavid du Colombier 
113e12c5d1SDavid du Colombier struct Node {
123e12c5d1SDavid du Colombier 	Node	*next;
133e12c5d1SDavid du Colombier 	int	c;	/* token type */
143e12c5d1SDavid du Colombier 	char	addr;	/* true if this is an address */
153e12c5d1SDavid du Colombier 	String	*s;	/* string representing token */
163e12c5d1SDavid du Colombier 	String	*white;	/* white space following token */
17332d2f58SDavid du Colombier 	char	*start;	/* first byte for this token */
183e12c5d1SDavid du Colombier 	char	*end;	/* next byte in input */
193e12c5d1SDavid du Colombier };
203e12c5d1SDavid du Colombier 
213e12c5d1SDavid du Colombier struct Field {
223e12c5d1SDavid du Colombier 	Field	*next;
233e12c5d1SDavid du Colombier 	Node	*node;
243e12c5d1SDavid du Colombier 	int	source;
253e12c5d1SDavid du Colombier };
263e12c5d1SDavid du Colombier 
279863c128SDavid du Colombier typedef struct DS	DS;
289863c128SDavid du Colombier struct DS {
299863c128SDavid du Colombier 	/* dist string */
309863c128SDavid du Colombier 	char	buf[128];
319863c128SDavid du Colombier 	char	expand[128];
329863c128SDavid du Colombier 	char	*netdir;
339863c128SDavid du Colombier 	char	*proto;
349863c128SDavid du Colombier 	char	*host;
359863c128SDavid du Colombier 	char	*service;
369863c128SDavid du Colombier };
379863c128SDavid du Colombier 
383e12c5d1SDavid du Colombier extern Field	*firstfield;
393e12c5d1SDavid du Colombier extern Field	*lastfield;
403e12c5d1SDavid du Colombier extern Node	*usender;
413e12c5d1SDavid du Colombier extern Node	*usys;
423e12c5d1SDavid du Colombier extern Node	*udate;
433e12c5d1SDavid du Colombier extern int	originator;
44219b2ee8SDavid du Colombier extern int	destination;
453e12c5d1SDavid du Colombier extern int	date;
46617c0e1eSDavid du Colombier extern int	debug;
479a747e4fSDavid du Colombier extern int	messageid;
48617c0e1eSDavid du Colombier extern char	*bustedmxs[Maxbustedmx];
493e12c5d1SDavid du Colombier 
503e12c5d1SDavid du Colombier Node*	address(Node*);
51*ab6a5be1SDavid du Colombier Node*	anonymous(Node*);
527dd7cddfSDavid du Colombier int	badfieldname(Node*);
533e12c5d1SDavid du Colombier Node*	bang(Node*, Node*);
543e12c5d1SDavid du Colombier int	cistrcmp(char*, char*);
55*ab6a5be1SDavid du Colombier Node*	colon(Node*, Node*);
56*ab6a5be1SDavid du Colombier void	dial_string_parse(char*, DS*);
57*ab6a5be1SDavid du Colombier void	freefield(Field*);
58*ab6a5be1SDavid du Colombier void	freenode(Node*);
593e12c5d1SDavid du Colombier Node*	link2(Node*, Node*);
603e12c5d1SDavid du Colombier Node*	link3(Node*, Node*, Node*);
61*ab6a5be1SDavid du Colombier int	mxdial(char*, char*, char*);
623e12c5d1SDavid du Colombier void	newfield(Node*, int);
633e12c5d1SDavid du Colombier Node*	whiten(Node*);
64219b2ee8SDavid du Colombier void	yycleanup(void);
65*ab6a5be1SDavid du Colombier void	yyinit(char*, int);
66*ab6a5be1SDavid du Colombier int	yylex(void);
67*ab6a5be1SDavid du Colombier int	yyparse(void);
68*ab6a5be1SDavid du Colombier String*	yywhite(void);
69