xref: /plan9/sys/src/cmd/webfs/io.c (revision 3ff48bf5ed603850fcd251ddf13025d23d693782)
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
15*3ff48bf5SDavid du Colombier _iovfprint(va_list *arg)
169a747e4fSDavid du Colombier {
17*3ff48bf5SDavid du Colombier 	int fd;
18*3ff48bf5SDavid du Colombier 	char *fmt;
19*3ff48bf5SDavid du Colombier 	va_list arg2;
209a747e4fSDavid du Colombier 
21*3ff48bf5SDavid du Colombier 	fd = va_arg(*arg, int);
22*3ff48bf5SDavid du Colombier 	fmt = va_arg(*arg, char*);
23*3ff48bf5SDavid du Colombier 	arg2 = va_arg(*arg, va_list);
24*3ff48bf5SDavid du Colombier 	return vfprint(fd, fmt, arg2);
259a747e4fSDavid du Colombier }
269a747e4fSDavid du Colombier 
27*3ff48bf5SDavid du Colombier int
28*3ff48bf5SDavid du Colombier iovfprint(Ioproc *io, int fd, char *fmt, va_list arg)
299a747e4fSDavid du Colombier {
30*3ff48bf5SDavid du Colombier 	return iocall(io, _iovfprint, fd, fmt, arg);
319a747e4fSDavid du Colombier }
329a747e4fSDavid du Colombier 
33*3ff48bf5SDavid du Colombier int
349a747e4fSDavid du Colombier ioprint(Ioproc *io, int fd, char *fmt, ...)
359a747e4fSDavid du Colombier {
36*3ff48bf5SDavid du Colombier 	int n;
379a747e4fSDavid du Colombier 	va_list arg;
389a747e4fSDavid du Colombier 
399a747e4fSDavid du Colombier 	va_start(arg, fmt);
40*3ff48bf5SDavid du Colombier 	n = iovfprint(io, fd, fmt, arg);
419a747e4fSDavid du Colombier 	va_end(arg);
42*3ff48bf5SDavid du Colombier 	return n;
439a747e4fSDavid du Colombier }
449a747e4fSDavid du Colombier 
45*3ff48bf5SDavid du Colombier static long
46*3ff48bf5SDavid du Colombier _iotlsdial(va_list *arg)
479a747e4fSDavid du Colombier {
48*3ff48bf5SDavid du Colombier 	char *addr, *local, *dir;
49*3ff48bf5SDavid du Colombier 	int *cfdp, fd, tfd, usetls;
509a747e4fSDavid du Colombier 	TLSconn conn;
519a747e4fSDavid du Colombier 
52*3ff48bf5SDavid du Colombier 	addr = va_arg(arg, char*);
53*3ff48bf5SDavid du Colombier 	local = va_arg(arg, char*);
54*3ff48bf5SDavid du Colombier 	dir = va_arg(arg, char*);
55*3ff48bf5SDavid du Colombier 	cfdp = va_arg(arg, int*);
56*3ff48bf5SDavid du Colombier 	usetls = va_arg(arg, int);
57*3ff48bf5SDavid du Colombier 
58*3ff48bf5SDavid du Colombier 	fd = dial(addr, local, dir, cfdp);
599a747e4fSDavid du Colombier 	if(fd < 0)
609a747e4fSDavid du Colombier 		return -1;
61*3ff48bf5SDavid du Colombier 	if(!usetls)
629a747e4fSDavid du Colombier 		return fd;
639a747e4fSDavid du Colombier 
649a747e4fSDavid du Colombier 	memset(&conn, 0, sizeof conn);
659a747e4fSDavid du Colombier 	tfd = tlsClient(fd, &conn);
669a747e4fSDavid du Colombier 	if(tfd < 0){
679a747e4fSDavid du Colombier 		print("tls %r\n");
689a747e4fSDavid du Colombier 		close(fd);
699a747e4fSDavid du Colombier 		return -1;
709a747e4fSDavid du Colombier 	}
719a747e4fSDavid du Colombier 	/* BUG: check cert here? */
729a747e4fSDavid du Colombier 	if(conn.cert)
739a747e4fSDavid du Colombier 		free(conn.cert);
749a747e4fSDavid du Colombier 	close(fd);
759a747e4fSDavid du Colombier 	return tfd;
769a747e4fSDavid du Colombier }
779a747e4fSDavid du Colombier 
78*3ff48bf5SDavid du Colombier int
79*3ff48bf5SDavid du Colombier iotlsdial(Ioproc *io, char *addr, char *local, char *dir, int *cfdp, int usetls)
809a747e4fSDavid du Colombier {
81*3ff48bf5SDavid du Colombier 	return iocall(io, _iotlsdial, addr, local, dir, cfdp, usetls);
829a747e4fSDavid du Colombier }
83