Home | History | Annotate | Line # | Download | only in global
      1 /*	$NetBSD: tok822.h,v 1.1.1.1 2009/06/23 10:08:48 tron Exp $	*/
      2 
      3 #ifndef _TOK822_H_INCLUDED_
      4 #define _TOK822_H_INCLUDED_
      5 
      6 /*++
      7 /* NAME
      8 /*	tok822 3h
      9 /* SUMMARY
     10 /*	RFC822 token structures
     11 /* SYNOPSIS
     12 /*	#include <tok822.h>
     13 /* DESCRIPTION
     14 /* .nf
     15 
     16  /*
     17   * Utility library.
     18   */
     19 #include <vstring.h>
     20 
     21  /*
     22   * Global library.
     23   */
     24 #include <resolve_clnt.h>
     25 
     26  /*
     27   * Internal address representation: a token tree.
     28   */
     29 typedef struct TOK822 {
     30     int     type;			/* token value, see below */
     31     VSTRING *vstr;			/* token contents */
     32     struct TOK822 *prev;		/* peer */
     33     struct TOK822 *next;		/* peer */
     34     struct TOK822 *head;		/* group members */
     35     struct TOK822 *tail;		/* group members */
     36     struct TOK822 *owner;		/* group owner */
     37 } TOK822;
     38 
     39  /*
     40   * Token values for multi-character objects. Single-character operators are
     41   * represented by their own character value.
     42   */
     43 #define TOK822_MINTOK	256
     44 #define	TOK822_ATOM	256		/* non-special character sequence */
     45 #define	TOK822_QSTRING	257		/* stuff between "", not nesting */
     46 #define	TOK822_COMMENT	258		/* comment including (), may nest */
     47 #define	TOK822_DOMLIT	259		/* stuff between [] not nesting */
     48 #define	TOK822_ADDR	260		/* actually a token group */
     49 #define TOK822_STARTGRP	261		/* start of named group */
     50 #define TOK822_MAXTOK	261
     51 
     52  /*
     53   * tok822_node.c
     54   */
     55 extern TOK822 *tok822_alloc(int, const char *);
     56 extern TOK822 *tok822_free(TOK822 *);
     57 
     58  /*
     59   * tok822_tree.c
     60   */
     61 extern TOK822 *tok822_append(TOK822 *, TOK822 *);
     62 extern TOK822 *tok822_prepend(TOK822 *, TOK822 *);
     63 extern TOK822 *tok822_cut_before(TOK822 *);
     64 extern TOK822 *tok822_cut_after(TOK822 *);
     65 extern TOK822 *tok822_unlink(TOK822 *);
     66 extern TOK822 *tok822_sub_append(TOK822 *, TOK822 *);
     67 extern TOK822 *tok822_sub_prepend(TOK822 *, TOK822 *);
     68 extern TOK822 *tok822_sub_keep_before(TOK822 *, TOK822 *);
     69 extern TOK822 *tok822_sub_keep_after(TOK822 *, TOK822 *);
     70 extern TOK822 *tok822_free_tree(TOK822 *);
     71 
     72 typedef int (*TOK822_ACTION) (TOK822 *);
     73 extern int tok822_apply(TOK822 *, int, TOK822_ACTION);
     74 extern TOK822 **tok822_grep(TOK822 *, int);
     75 
     76  /*
     77   * tok822_parse.c
     78   */
     79 extern TOK822 *tok822_scan_limit(const char *, TOK822 **, int);
     80 extern TOK822 *tok822_scan_addr(const char *);
     81 extern TOK822 *tok822_parse_limit(const char *, int);
     82 extern VSTRING *tok822_externalize(VSTRING *, TOK822 *, int);
     83 extern VSTRING *tok822_internalize(VSTRING *, TOK822 *, int);
     84 
     85 #define tok822_scan(cp, ptr)	tok822_scan_limit((cp), (ptr), 0)
     86 #define tok822_parse(cp)	tok822_parse_limit((cp), 0)
     87 
     88 #define TOK822_STR_NONE	(0)
     89 #define TOK822_STR_WIPE	(1<<0)
     90 #define TOK822_STR_TERM	(1<<1)
     91 #define TOK822_STR_LINE	(1<<2)
     92 #define TOK822_STR_TRNC	(1<<3)
     93 #define TOK822_STR_DEFL	(TOK822_STR_WIPE | TOK822_STR_TERM)
     94 #define TOK822_STR_HEAD	(TOK822_STR_TERM | TOK822_STR_LINE | TOK822_STR_TRNC)
     95 
     96  /*
     97   * tok822_find.c
     98   */
     99 extern TOK822 *tok822_find_type(TOK822 *, int);
    100 extern TOK822 *tok822_rfind_type(TOK822 *, int);
    101 
    102  /*
    103   * tok822_rewrite.c
    104   */
    105 extern TOK822 *tok822_rewrite(TOK822 *, const char *);
    106 
    107  /*
    108   * tok822_resolve.c
    109   */
    110 #define tok822_resolve(t, r) tok822_resolve_from(RESOLVE_NULL_FROM, (t), (r))
    111 
    112 extern void tok822_resolve_from(const char *, TOK822 *, RESOLVE_REPLY *);
    113 
    114 /* LICENSE
    115 /* .ad
    116 /* .fi
    117 /*	The Secure Mailer license must be distributed with this software.
    118 /* AUTHOR(S)
    119 /*	Wietse Venema
    120 /*	IBM T.J. Watson Research
    121 /*	P.O. Box 704
    122 /*	Yorktown Heights, NY 10598, USA
    123 /*--*/
    124 
    125 #endif
    126