Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include <bio.h>
4
#include <ip.h>
5
#include <plumb.h>
6
#include <thread.h>
7
#include <fcall.h>
8
#include <9p.h>
9
#include <mp.h>
10
#include <libsec.h>
11
#include "dat.h"
12
#include "fns.h"
13
 
14
static long
15
_iovfprint(va_list *arg)
16
{
17
	int fd;
18
	char *fmt;
19
	va_list arg2;
20
 
21
	fd = va_arg(*arg, int);
22
	fmt = va_arg(*arg, char*);
23
	arg2 = va_arg(*arg, va_list);
24
	return vfprint(fd, fmt, arg2);
25
}
26
 
27
int
28
iovfprint(Ioproc *io, int fd, char *fmt, va_list arg)
29
{
30
	return iocall(io, _iovfprint, fd, fmt, arg);
31
}
32
 
33
int
34
ioprint(Ioproc *io, int fd, char *fmt, ...)
35
{
36
	int n;
37
	va_list arg;
38
 
39
	va_start(arg, fmt);
40
	n = iovfprint(io, fd, fmt, arg);
41
	va_end(arg);
42
	return n;
43
}
44
 
45
static long
46
_iotlsdial(va_list *arg)
47
{
48
	char *addr, *local, *dir;
49
	int *cfdp, fd, tfd, usetls;
50
	TLSconn conn;
51
 
52
	addr = va_arg(*arg, char*);
53
	local = va_arg(*arg, char*);
54
	dir = va_arg(*arg, char*);
55
	cfdp = va_arg(*arg, int*);
56
	usetls = va_arg(*arg, int);
57
 
58
	fd = dial(addr, local, dir, cfdp);
59
	if(fd < 0)
60
		return -1;
61
	if(!usetls)
62
		return fd;
63
 
64
	memset(&conn, 0, sizeof conn);
65
	/* does no good, so far anyway */
66
	// conn.chain = readcertchain("/sys/lib/ssl/vsignss.pem");
67
 
68
	tfd = tlsClient(fd, &conn);
69
	close(fd);
70
	if(tfd < 0)
71
		fprint(2, "%s: tlsClient: %r\n", argv0);
72
	else {
73
		/* BUG: check cert here? */
74
		if(conn.cert)
75
			free(conn.cert);
76
	}
77
	return tfd;
78
}
79
 
80
int
81
iotlsdial(Ioproc *io, char *addr, char *local, char *dir, int *cfdp, int usetls)
82
{
83
	return iocall(io, _iotlsdial, addr, local, dir, cfdp, usetls);
84
}