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