With lots of disabled code it does now build.
[ntbtls.git] / src / ntbtls-cli.c
1 /* ntbtls-cli.h - NTBTLS client test program
2  * Copyright (C) 2014 g10 Code GmbH
3  *
4  * This file is part of NTBTLS
5  *
6  * NTBTLS is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * NTBTLS is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #include <config.h>
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <string.h>
24 #include <stdarg.h>
25
26 #include "ntbtls.h"
27
28 #define PGMNAME "ntbtls-cli"
29
30 static int verbose;
31 static int errorcount;
32
33 \f
34 /*
35  * Reporting functions.
36  */
37 static void
38 die (const char *format, ...)
39 {
40   va_list arg_ptr ;
41
42   fflush (stdout);
43 #ifdef HAVE_FLOCKFILE
44   flockfile (stderr);
45 #endif
46   fprintf (stderr, "%s: ", PGMNAME);
47   va_start (arg_ptr, format) ;
48   vfprintf (stderr, format, arg_ptr);
49   va_end (arg_ptr);
50   if (*format && format[strlen(format)-1] != '\n')
51     putc ('\n', stderr);
52 #ifdef HAVE_FLOCKFILE
53   funlockfile (stderr);
54 #endif
55   exit (1);
56 }
57
58
59 static void
60 fail (const char *format, ...)
61 {
62   va_list arg_ptr;
63
64   fflush (stdout);
65 #ifdef HAVE_FLOCKFILE
66   flockfile (stderr);
67 #endif
68   fprintf (stderr, "%s: ", PGMNAME);
69   va_start (arg_ptr, format);
70   vfprintf (stderr, format, arg_ptr);
71   va_end (arg_ptr);
72   if (*format && format[strlen(format)-1] != '\n')
73     putc ('\n', stderr);
74 #ifdef HAVE_FLOCKFILE
75   funlockfile (stderr);
76 #endif
77   errorcount++;
78   if (errorcount >= 50)
79     die ("stopped after 50 errors.");
80 }
81
82
83 static void
84 info (const char *format, ...)
85 {
86   va_list arg_ptr;
87
88   if (!verbose)
89     return;
90 #ifdef HAVE_FLOCKFILE
91   flockfile (stderr);
92 #endif
93   fprintf (stderr, "%s: ", PGMNAME);
94   va_start (arg_ptr, format);
95   vfprintf (stderr, format, arg_ptr);
96   if (*format && format[strlen(format)-1] != '\n')
97     putc ('\n', stderr);
98   va_end (arg_ptr);
99 #ifdef HAVE_FLOCKFILE
100   funlockfile (stderr);
101 #endif
102 }
103
104
105
106 \f
107 static void
108 simple_client (void)
109 {
110   gpg_error_t err;
111   ntbtls_t tls;
112
113   err = ntbtls_new (&tls, NTBTLS_CLIENT);
114   if (err)
115     die ("ntbtls_init failed: %s <%s>\n",
116          gpg_strerror (err), gpg_strsource (err));
117
118   err = ntbtls_set_transport (tls, es_stdin, es_stdout);
119   if (err)
120     die ("ntbtls_set_transport failed: %s <%s>\n",
121          gpg_strerror (err), gpg_strsource (err));
122
123   info ("starting handshake");
124   while ((err = ntbtls_handshake (tls)))
125     {
126       info ("handshake error: %s <%s>", gpg_strerror (err),gpg_strsource (err));
127       switch (gpg_err_code (err))
128         {
129         default:
130           break;
131         }
132       die ("handshake failed");
133     }
134   info ("handshake done");
135
136   ntbtls_release (tls);
137 }
138
139
140
141 int
142 main (int argc, char **argv)
143 {
144   int last_argc = -1;
145
146   if (argc)
147     { argc--; argv++; }
148   while (argc && last_argc != argc )
149     {
150       last_argc = argc;
151       if (!strcmp (*argv, "--"))
152         {
153           argc--; argv++;
154           break;
155         }
156       else if (!strcmp (*argv, "--verbose"))
157         {
158           verbose = 1;
159           argc--; argv++;
160         }
161       else if (strncmp (*argv, "--", 2))
162         die ("Invalid option '%s'\n", *argv);
163     }
164
165   simple_client ();
166   return 0;
167 }