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