19a747e4fSDavid du Colombier #include <u.h>
29a747e4fSDavid du Colombier #include <libc.h>
39a747e4fSDavid du Colombier #include <bio.h>
49a747e4fSDavid du Colombier #include <ip.h>
59a747e4fSDavid du Colombier #include <plumb.h>
69a747e4fSDavid du Colombier #include <thread.h>
79a747e4fSDavid du Colombier #include <fcall.h>
89a747e4fSDavid du Colombier #include <9p.h>
99a747e4fSDavid du Colombier #include <mp.h>
109a747e4fSDavid du Colombier #include <libsec.h>
119a747e4fSDavid du Colombier #include "dat.h"
129a747e4fSDavid du Colombier #include "fns.h"
139a747e4fSDavid du Colombier
149a747e4fSDavid du Colombier static long
_iovfprint(va_list * arg)153ff48bf5SDavid du Colombier _iovfprint(va_list *arg)
169a747e4fSDavid du Colombier {
173ff48bf5SDavid du Colombier int fd;
183ff48bf5SDavid du Colombier char *fmt;
193ff48bf5SDavid du Colombier va_list arg2;
209a747e4fSDavid du Colombier
213ff48bf5SDavid du Colombier fd = va_arg(*arg, int);
223ff48bf5SDavid du Colombier fmt = va_arg(*arg, char*);
233ff48bf5SDavid du Colombier arg2 = va_arg(*arg, va_list);
243ff48bf5SDavid du Colombier return vfprint(fd, fmt, arg2);
259a747e4fSDavid du Colombier }
269a747e4fSDavid du Colombier
273ff48bf5SDavid du Colombier int
iovfprint(Ioproc * io,int fd,char * fmt,va_list arg)283ff48bf5SDavid du Colombier iovfprint(Ioproc *io, int fd, char *fmt, va_list arg)
299a747e4fSDavid du Colombier {
303ff48bf5SDavid du Colombier return iocall(io, _iovfprint, fd, fmt, arg);
319a747e4fSDavid du Colombier }
329a747e4fSDavid du Colombier
333ff48bf5SDavid du Colombier int
ioprint(Ioproc * io,int fd,char * fmt,...)349a747e4fSDavid du Colombier ioprint(Ioproc *io, int fd, char *fmt, ...)
359a747e4fSDavid du Colombier {
363ff48bf5SDavid du Colombier int n;
379a747e4fSDavid du Colombier va_list arg;
389a747e4fSDavid du Colombier
399a747e4fSDavid du Colombier va_start(arg, fmt);
403ff48bf5SDavid du Colombier n = iovfprint(io, fd, fmt, arg);
419a747e4fSDavid du Colombier va_end(arg);
423ff48bf5SDavid du Colombier return n;
439a747e4fSDavid du Colombier }
449a747e4fSDavid du Colombier
453ff48bf5SDavid du Colombier static long
_iotlsdial(va_list * arg)463ff48bf5SDavid du Colombier _iotlsdial(va_list *arg)
479a747e4fSDavid du Colombier {
483ff48bf5SDavid du Colombier char *addr, *local, *dir;
493ff48bf5SDavid du Colombier int *cfdp, fd, tfd, usetls;
509a747e4fSDavid du Colombier TLSconn conn;
519a747e4fSDavid du Colombier
52d9306527SDavid du Colombier addr = va_arg(*arg, char*);
53d9306527SDavid du Colombier local = va_arg(*arg, char*);
54d9306527SDavid du Colombier dir = va_arg(*arg, char*);
55d9306527SDavid du Colombier cfdp = va_arg(*arg, int*);
56d9306527SDavid du Colombier usetls = va_arg(*arg, int);
573ff48bf5SDavid du Colombier
583ff48bf5SDavid du Colombier fd = dial(addr, local, dir, cfdp);
599a747e4fSDavid du Colombier if(fd < 0)
609a747e4fSDavid du Colombier return -1;
613ff48bf5SDavid du Colombier if(!usetls)
629a747e4fSDavid du Colombier return fd;
639a747e4fSDavid du Colombier
649a747e4fSDavid du Colombier memset(&conn, 0, sizeof conn);
65*3b86f2f8SDavid du Colombier /* does no good, so far anyway */
66*3b86f2f8SDavid du Colombier // conn.chain = readcertchain("/sys/lib/ssl/vsignss.pem");
67*3b86f2f8SDavid du Colombier
689a747e4fSDavid du Colombier tfd = tlsClient(fd, &conn);
699a747e4fSDavid du Colombier close(fd);
70*3b86f2f8SDavid du Colombier if(tfd < 0)
71*3b86f2f8SDavid du Colombier fprint(2, "%s: tlsClient: %r\n", argv0);
72*3b86f2f8SDavid du Colombier else {
739a747e4fSDavid du Colombier /* BUG: check cert here? */
749a747e4fSDavid du Colombier if(conn.cert)
759a747e4fSDavid du Colombier free(conn.cert);
76*3b86f2f8SDavid du Colombier }
779a747e4fSDavid du Colombier return tfd;
789a747e4fSDavid du Colombier }
799a747e4fSDavid du Colombier
803ff48bf5SDavid du Colombier int
iotlsdial(Ioproc * io,char * addr,char * local,char * dir,int * cfdp,int usetls)813ff48bf5SDavid du Colombier iotlsdial(Ioproc *io, char *addr, char *local, char *dir, int *cfdp, int usetls)
829a747e4fSDavid du Colombier {
833ff48bf5SDavid du Colombier return iocall(io, _iotlsdial, addr, local, dir, cfdp, usetls);
849a747e4fSDavid du Colombier }
85