]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/webfs/io.c
cwfs: back to previous version
[plan9front.git] / sys / src / cmd / webfs / io.c
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include <ip.h>
5 #include <plumb.h>
6 #include <thread.h>
7 #include <fcall.h>
8 #include <9p.h>
9 #include <mp.h>
10 #include <libsec.h>
11 #include "dat.h"
12 #include "fns.h"
13
14 static long
15 _iovfprint(va_list *arg)
16 {
17         int fd;
18         char *fmt;
19         va_list arg2;
20
21         fd = va_arg(*arg, int);
22         fmt = va_arg(*arg, char*);
23         arg2 = va_arg(*arg, va_list);
24         return vfprint(fd, fmt, arg2);
25 }
26
27 int
28 iovfprint(Ioproc *io, int fd, char *fmt, va_list arg)
29 {
30         return iocall(io, _iovfprint, fd, fmt, arg);
31 }
32
33 int
34 ioprint(Ioproc *io, int fd, char *fmt, ...)
35 {
36         int n;
37         va_list arg;
38
39         va_start(arg, fmt);
40         n = iovfprint(io, fd, fmt, arg);
41         va_end(arg);
42         return n;
43 }
44
45 static long
46 _iotlsdial(va_list *arg)
47 {
48         char *addr, *local, *dir;
49         int *cfdp, fd, tfd, usetls;
50         TLSconn conn;
51
52         addr = va_arg(*arg, char*);
53         local = va_arg(*arg, char*);
54         dir = va_arg(*arg, char*);
55         cfdp = va_arg(*arg, int*);
56         usetls = va_arg(*arg, int);
57
58         fd = dial(addr, local, dir, cfdp);
59         if(fd < 0)
60                 return -1;
61         if(!usetls)
62                 return fd;
63
64         memset(&conn, 0, sizeof conn);
65         /* does no good, so far anyway */
66         // conn.chain = readcertchain("/sys/lib/ssl/vsignss.pem");
67
68         tfd = tlsClient(fd, &conn);
69         close(fd);
70         if(tfd < 0)
71                 fprint(2, "%s: tlsClient: %r\n", argv0);
72         else {
73                 /* BUG: check cert here? */
74                 if(conn.cert)
75                         free(conn.cert);
76         }
77         return tfd;
78 }
79
80 int
81 iotlsdial(Ioproc *io, char *addr, char *local, char *dir, int *cfdp, int usetls)
82 {
83         return iocall(io, _iotlsdial, addr, local, dir, cfdp, usetls);
84 }