home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / h / or.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  6.3 KB  |  249 lines

  1. /* or.h: o/r name package */
  2.  
  3. /*
  4.  * @(#) $Header: /xtel/pp/pp-beta/h/RCS/or.h,v 6.0 1991/12/18 20:42:44 jpo Rel $
  5.  *
  6.  * $Log: or.h,v $
  7.  * Revision 6.0  1991/12/18  20:42:44  jpo
  8.  * Release 6.0
  9.  *
  10.  *
  11.  */
  12.  
  13.  
  14.  
  15. #ifndef _H_OR
  16. #define _H_OR
  17.  
  18. #include <isode/psap.h>
  19. #include <isode/cmd_srch.h>
  20. #include <isode/quipu/name.h>
  21. /*
  22. Definitions for OR Name structure
  23.  
  24. NOTE - that the trees are strucutred with the MOST significant part at the top
  25. */
  26.  
  27. /* SEK temp notes:
  28.  
  29.     OR/STD  will have a matrix of or_part/valid encodings.
  30.     If a Char* is present, this identifies the valid key
  31.  
  32.     84/88 distinction will be done as address subtyping.
  33.     std2or  needs to have a flag to reflect this.   
  34.  
  35.     Needs to be a routine to downgrade addresses 88 -> 84.  
  36.     First cut can work by discard.
  37. */
  38.  
  39. /* upperbound on number of organizational units allowed in an address */
  40. #define    MAX_OU    4
  41.  
  42. /* upperbound on number of domain defined attributes allowed in an address */
  43. #define MAX_DDA    4
  44.  
  45. struct or_part
  46. {
  47. int           or_type;
  48. #define OR_C        1
  49. #define OR_ADMD        2
  50. #define OR_PRMD        3
  51. #define OR_O        4
  52. #define OR_OU        5
  53. #define OR_OU1        6
  54. #define OR_OU2        7
  55. #define OR_OU3        8
  56. #define OR_OU4        9
  57. #define OR_X121        10
  58. #define OR_TID        11
  59. #define OR_UAID        12
  60. #define OR_S        13
  61. #define OR_G        14
  62. #define OR_I        15
  63. #define OR_GQ        16
  64. #define OR_CN        17
  65. #define OR_PDSNAME    18
  66. #define OR_PD_C        19
  67. #define OR_POSTCODE    20
  68. #define OR_PDO_NAME    21
  69. #define OR_PDO_NUM    22
  70. #define OR_OR_COMPS    23
  71. #define OR_PD_PN    24
  72. #define OR_PD_O        25
  73. #define OR_PD_COMPS    26
  74. #define OR_UPA_PA    27
  75. #define OR_STREET    28
  76. #define OR_PO_BOX    29
  77. #define OR_PRA        30
  78. #define OR_UPN        31
  79. #define OR_LPA        32
  80. #define OR_ENA_N    33
  81. #define OR_ENA_S    34
  82. #define OR_ENA_P    35
  83. #define OR_TT        36
  84. #define OR_DD        99
  85. int           or_encoding;
  86. #define OR_ENC_PS    1
  87. #define OR_ENC_TTX    2
  88. #define OR_ENC_NUM    3
  89. #define OR_ENC_TTX_AND_OR_PS    4 /* use 987 string encoding */
  90. #define OR_ENC_INT    5
  91. #define OR_ENC_PSAP    6    /* ISODE/SEK string form */
  92. #define OR_ENC_PP    7    /* internal PP encoding used for */
  93.                 /* missing OR components in rfc1148 */
  94.                 /* conversion tables */
  95. char           *or_ddname;
  96. char           *or_value;
  97. struct or_part       *or_prev;
  98. struct or_part       *or_next;
  99. };
  100.  
  101. #define or_or2rfc(a,b)    or_or2rfc_aux ((a), (b), 0)    /* backwards compat */
  102. #define or_rfc2or(a,b)    or_rfc2or_aux ((a), (b), 1)
  103.  
  104. #define OR_ISLOCAL    01
  105. #define OR_ISMTA    02
  106.  
  107. #define CHR_PS        01     /* Printable String */
  108. #define CHR_NS        02     /* Numeric String */
  109.  
  110. typedef struct or_part    *OR_ptr;
  111.  
  112. #define NULLOR        ((OR_ptr)0)
  113.  
  114. typedef struct ORName {
  115.     OR_ptr    on_or;
  116.     DN    on_dn;
  117. } ORName;
  118.  
  119. #define NULLORName    ((ORName *) 0)
  120.  
  121. ORName *pe2orn ();
  122. ORName    *orname2orn ();
  123. OR_ptr    oradr2ora ();
  124. PE    orn2pe ();
  125. PE    orname2pe ();
  126. OR_ptr    pe2ora ();
  127. PE    ora2pe ();
  128. PE    oradr2pe ();
  129. void    ORName_free ();
  130.  
  131. extern char _pstable[];
  132.  
  133. #define or_isps(c)    (_pstable[c]&CHR_PS)
  134. #define or_isns(c)    (_pstable[c]&CHR_NS)
  135.  
  136. typedef struct tpstruct {
  137.     char        *ty_string;
  138.     int            ty_int;
  139.     int            ty_charset;
  140. } typestruct;
  141.  
  142. typedef struct or_upperbound {
  143.     int    or_type;
  144.     int    or_upperbound;
  145. /* 0 == not valid, -1 == no upperbound */
  146. } OR_upperbound;
  147.  
  148. /* upperbounds as defined in x.411 */
  149. #define OR_UB_C_ALPHA    2
  150. #define OR_UB_C_NUM    3
  151. #define OR_UB_MD    16
  152. #define OR_UB_O        64
  153. #define OR_UB_OU    32
  154. #define OR_UB_X121    15
  155. #define OR_UB_TID    24
  156. #define OR_UB_UAID    32
  157. #define OR_UB_S        40
  158. #define OR_UB_G        16
  159. #define OR_UB_I        5
  160. #define OR_UB_GQ    3
  161. #define OR_UB_CN    64
  162. #define OR_UB_PDSNAME    16
  163. #define    OR_UB_PDS_PARAM    30
  164. #define OR_UB_POSTCODE    16
  165. #define OR_UB_OR_COMPS    256
  166. #define OR_UB_UPA_PA    180
  167. #define OR_UB_ENA_N    15
  168. #define OR_UB_ENA_S    40
  169. #define OR_UB_INT_OPTS    246
  170. #define OR_UB_DDA_VALUE    128
  171. #define OR_UB_DDA_TYPE    8
  172.  
  173. extern typestruct typetab[];
  174. extern typestruct typetab88[];
  175.  
  176. /* valid DD's */
  177. #define     OR_DDVALID_RFC822        1
  178. #define     OR_DDVALID_JNT            2
  179. #define     OR_DDVALID_UUCP        3
  180. #define     OR_DDVALID_LIST        4
  181. #define     OR_DDVALID_ROLE        5
  182. #define     OR_DDVALID_FAX            6
  183. #define     OR_DDVALID_ATTN        7
  184. #define     OR_DDVALID_X40088        8
  185.  
  186. /* forms of address */
  187. #define OR_FORM_NONE            0
  188. #define OR_FORM_MNEM            1
  189. #define OR_FORM_NUMR            2
  190. #define OR_FORM_POST            3
  191. #define OR_FORM_TERM            4
  192.  
  193. extern CMD_TABLE ortbl_ddvalid[];
  194. extern OR_ptr    loc_ortree;
  195.  
  196. extern    OR_ptr    pe2or();        /* convert PE to OR struct */
  197. extern    PE    or2pe();        /* convert OR struct to PE */
  198. extern OR_ptr    or_add();        /* add or_part to place in tree */
  199. extern OR_ptr    or_add_t61 ();        /* add in a T61 address attribute */
  200. extern OR_ptr    or_default();        /* add def vals to partial OR Name */
  201. extern OR_ptr    or_default_aux();    /* add given vals to partial OR Name */
  202. extern OR_ptr    or_dmn2or();        /* OR dmn string -> structure */
  203. extern OR_ptr    or_dup();        /* duplicate or_part */
  204. extern OR_ptr    or_tdup();        /* duplicate or tree */
  205. extern OR_ptr    or_find();        /* find or_part of type in tree */
  206. extern OR_ptr    or_lastpart();        /* point to last component */
  207. extern OR_ptr    or_locate();        /* find 1st part of any component */
  208. extern OR_ptr    or_new();        /* create and fill new or_part */
  209. extern OR_ptr    or_new_aux();        /* create and fill new or_part */
  210. extern OR_ptr    or_std2or();        /* OR std string -> structure */
  211. extern char    *or_value();        /* find a type and return it's val */
  212. extern char*    or_type2name();        /* get string of part type */
  213. extern int    or_cmp();        /* test if two or_parts are equal */
  214. extern void    or_free();        /* free structure recursively */
  215. extern int    or_init();        /* various global inits */
  216. extern void    or_myinit();        /* various global inits */
  217. extern int    or_name2type();        /* get type of string */
  218. extern void    or_or2dmn();        /* structure to OR dmn string */
  219. extern int    or_or2rfc_aux ();
  220. extern int    or_rfc2or_aux ();    /* map 822 form to tree */
  221. extern void    or_or2std();        /* structure to OR std string */
  222. extern int    or_utilinit();        /* various global inits */
  223. extern int    or_blank ();
  224. extern OR_ptr    or_buildpn ();        /* construct a personal name */
  225. extern int    or_getpn ();
  226. extern void    qstrcat ();
  227. extern void    dstrcat ();
  228. extern void    or_myinit ();
  229. extern void    or_t61encode ();
  230. extern struct qbuf *or_t61decode ();
  231. extern int    or_ddname_chk ();
  232. extern int    or_ddvalid_chk ();
  233. extern int    or_gettoken ();
  234. extern int    or_isdomsyntax ();
  235. extern void    or_ps2asc ();
  236. extern void    or_downgrade();        /* downgrades 88 to 84 */
  237. extern int    or_or2rbits ();
  238. extern int    rfc_space ();
  239. extern int    or_domain2or();
  240. extern int    or_local2or();
  241. extern int    or_asc2ps ();
  242. extern int    or_append ();
  243. extern struct qbuf *or_getps ();
  244. extern struct qbuf *or_getttx ();
  245. extern void or_chk_admd ();
  246. extern int    or_check_upper();
  247. extern int    or_chk_ubs();
  248. #endif
  249.