summaryrefslogtreecommitdiff
path: root/sys/src/cmd/webfs/io.c
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
commite5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch)
treed8d51eac403f07814b9e936eed0c9a79195e2450 /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-xsys/src/cmd/webfs/io.c84
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);
+}