#include <u.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <libc.h>
#include "mountnfs.h"

void
usage(void)
{
	fprint(2, "usage: vmount [-v] [-h handle] address mountpoint\n");
	exits("usage");
}

int handlelen = 1;
uchar handle[64] = {
	0x00
};

void
main(int argc, char **argv)
{
	char *p, *net, *unx;
	char host[INET_ADDRSTRLEN];
	int n, port, proto, verbose;
	struct sockaddr_in sa;

	verbose = 0;
	ARGBEGIN{
	case 'h':
		p = EARGF(usage());
		n = strlen(p);
		if(n%2)
			sysfatal("bad handle '%s'", p);
		if(n > 2*sizeof handle)
			sysfatal("handle too long '%s'", p);
		handlelen = n/2;
		if(dec16(handle, n/2, p, n) != n/2)
			sysfatal("bad hex in handle '%s'", p);
		break;

	case 'v':
		verbose = 1;
		break;

	default:
		usage();
	}ARGEND

	if(argc != 2)
		usage();

	p = p9netmkaddr(argv[0], "udp", "nfs");
	if(p9dialparse(strdup(p), &net, &unx, &sa, &port) < 0)
		sysfatal("bad address '%s'", p);

	if(sa.sin_family != AF_INET)
		sysfatal("only IPv4 is supported");

	inet_ntop(AF_INET, &(sa.sin_addr), host, INET_ADDRSTRLEN);

	if(verbose)
		print("nfs server is net=%s addr=%s port=%d\n",
			net, host, port);

	proto = 0;
	if(strcmp(net, "tcp") == 0)
		proto = SOCK_STREAM;
	else if(strcmp(net, "udp") == 0)
		proto = SOCK_DGRAM;
	else
		sysfatal("bad proto %s: can only handle tcp and udp", net);

	mountnfs(proto, &sa, handle, handlelen, argv[1]);
	exits(0);
}
