diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/webfs/io.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/webfs/io.c')
-rwxr-xr-x | sys/src/cmd/webfs/io.c | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/sys/src/cmd/webfs/io.c b/sys/src/cmd/webfs/io.c new file mode 100755 index 000000000..9eea91264 --- /dev/null +++ b/sys/src/cmd/webfs/io.c @@ -0,0 +1,84 @@ +#include <u.h> +#include <libc.h> +#include <bio.h> +#include <ip.h> +#include <plumb.h> +#include <thread.h> +#include <fcall.h> +#include <9p.h> +#include <mp.h> +#include <libsec.h> +#include "dat.h" +#include "fns.h" + +static long +_iovfprint(va_list *arg) +{ + int fd; + char *fmt; + va_list arg2; + + fd = va_arg(*arg, int); + fmt = va_arg(*arg, char*); + arg2 = va_arg(*arg, va_list); + return vfprint(fd, fmt, arg2); +} + +int +iovfprint(Ioproc *io, int fd, char *fmt, va_list arg) +{ + return iocall(io, _iovfprint, fd, fmt, arg); +} + +int +ioprint(Ioproc *io, int fd, char *fmt, ...) +{ + int n; + va_list arg; + + va_start(arg, fmt); + n = iovfprint(io, fd, fmt, arg); + va_end(arg); + return n; +} + +static long +_iotlsdial(va_list *arg) +{ + char *addr, *local, *dir; + int *cfdp, fd, tfd, usetls; + TLSconn conn; + + addr = va_arg(*arg, char*); + local = va_arg(*arg, char*); + dir = va_arg(*arg, char*); + cfdp = va_arg(*arg, int*); + usetls = va_arg(*arg, int); + + fd = dial(addr, local, dir, cfdp); + if(fd < 0) + return -1; + if(!usetls) + return fd; + + memset(&conn, 0, sizeof conn); + /* does no good, so far anyway */ + // conn.chain = readcertchain("/sys/lib/ssl/vsignss.pem"); + + tfd = tlsClient(fd, &conn); + close(fd); + if(tfd < 0) + fprint(2, "%s: tlsClient: %r\n", argv0); + else { + /* BUG: check cert here? */ + if(conn.cert) + free(conn.cert); + } + return tfd; +} + +int +iotlsdial(Ioproc *io, char *addr, char *local, char *dir, int *cfdp, int usetls) +{ + return iocall(io, _iotlsdial, addr, local, dir, cfdp, usetls); +} |