/* Copyright (c) 2014 The Regents of the University of California
 * Barret Rhoden <brho@cs.berkeley.edu>
 * See LICENSE for details.
 *
 * srv DIALSTRING SRVNAME
 *
 * Opens DIALSTRING and drops its chan in #s at SRVNAME */

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
#include <parlib/net.h>
#include <iplib/iplib.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
	char *dialstring, *srvname;
	int dfd, srvfd, ret;

	#define buf_len 128
	char buf[buf_len];

	if (argc != 3) {
		printf("Usage: %s DIALSTRING SRVNAME\n", argv[0]);
		exit(-1);
	}
	dialstring = argv[1];
	srvname = argv[2];

	dfd = dial9(dialstring, 0, 0, 0, 0);
	if (dfd < 0) {
		perror("Unable to dial!");
		exit(-1);
	}
	ret = snprintf(buf, buf_len, "#srv/%s", srvname);
	if (snprintf_error(ret, buf_len)) {
		printf("srvname too long\n");
		exit(-1);
	}
	srvfd = open(buf, O_RDWR | O_EXCL | O_CREAT, 0666);
	if (srvfd < 0) {
		perror("Can't create srvvile");
		close(dfd);
		exit(-1);
	}
	ret = snprintf(buf, buf_len, "%d", dfd);
	ret = write(srvfd, buf, ret);
	if (ret < 0) {
		perror("Failed to post fd");
		close(dfd);
		exit(-1);
	}
}
