@@ -1,6 +1,7 @@
[userv-utils] / ipif / forwarder.h
CommitLineData
1fb3cba0 1/*
2 */
3
4#ifndef MECHS_H
5#define MECHS_H
6
7#include <stdio.h>
8#include <time.h>
9
10#include "automech.h"
11
12struct buffer {
13 unsigned char *base;
14 unsigned char *start;
15 size_t size;
16};
17
18struct mechdata;
19
20typedef void mes_functype(struct mechdata **md_r, int *maxprefix_io, int *maxsuffix_io);
21typedef void mds_functype(struct mechdata **md_r);
22
23typedef void menc_functype(struct mechdata *md, struct buffer*);
24typedef const char *mdec_functype(struct mechdata *md, struct buffer*);
25
26struct mechanism {
27 const char *name;
28 mes_functype *encsetup;
29 mds_functype *decsetup;
30 menc_functype *encode;
31 mdec_functype *decode;
32};
33
34extern const struct mechanism *const mechanismlists[];
35
36/* setup function may call getarg_xxx functions and then
37 * reads/writes key material to/from fd
38 *
39 * setup_in function may increase maxprefix and maxsuffix
40 * code functions modify buffer in place
41 * decode function returns message to print
42 */
43
44const char *getarg_string(void);
45unsigned long getarg_ulong(void);
46
47extern char programid[];
48
49void *buf_append(struct buffer *buf, size_t amount);
50void *buf_prepend(struct buffer *buf, size_t amount);
51void *buf_unappend(struct buffer *buf, size_t amount); /* may give 0 */
52void *buf_unprepend(struct buffer *buf, size_t amount); /* may give 0 */
53
54void sysfail(const char *msg);
55void fail(const char *msg);
56void sysdiag(const char *msg);
57void diag(const char *msg);
58
59time_t now(void);
60void *xmalloc(size_t sz);
61void get_random(void *ptr, size_t sz);
62void random_key(void *ptr, size_t sz);
63
64void arg_assert_fail(const char *msg);
65#define arg_assert(v) (v ? (void)0 : arg_assert_fail(#v))
66
67#define XMALLOC(variable) ((variable)= xmalloc(sizeof(*(variable))))
68
69#define BUF_UNSOMEEND(var,buf,sz,whichend) \
70 do { var= whichend(buf,sz); if (!var) return "message truncated"; } while(0)
71#define BUF_UNAPPEND(var,buf,sz) BUF_UNSOMEEND(var,buf,sz,buf_unappend)
72#define BUF_UNPREPEND(var,buf,sz) BUF_UNSOMEEND(var,buf,sz,buf_unprepend)
73
74#define STANDARD_MECHANISMLIST(mechstring,filename) \
75 const struct mechanism mechlist_##filename []= { \
76 STANDARD_MECHANISM(mechstring,filename) \
77 { 0 } \
78 };
79
80#define STANDARD_MECHANISM(mechstring,mechname) \
81 { mechstring, mes_##mechname, mds_##mechname, menc_##mechname, mdec_##mechname },
82
83#endif