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 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 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 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 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 52*d9306527SDavid du Colombier addr = va_arg(*arg, char*); 53*d9306527SDavid du Colombier local = va_arg(*arg, char*); 54*d9306527SDavid du Colombier dir = va_arg(*arg, char*); 55*d9306527SDavid du Colombier cfdp = va_arg(*arg, int*); 56*d9306527SDavid 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); 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 783ff48bf5SDavid du Colombier int 793ff48bf5SDavid du Colombier iotlsdial(Ioproc *io, char *addr, char *local, char *dir, int *cfdp, int usetls) 809a747e4fSDavid du Colombier { 813ff48bf5SDavid du Colombier return iocall(io, _iotlsdial, addr, local, dir, cfdp, usetls); 829a747e4fSDavid du Colombier } 83