#include <u.h>
#include <libc.h>
#include <ctype.h>

/*
 *  make an address, add the defaults
 */
char *
netmkaddr(char *linear, char *defnet, char *defsrv)
{
	static char addr[256];
	char *cp;

	/*
	 *  dump network name
	 */
	cp = strchr(linear, '!');
	if(cp == 0){
		if(defnet == 0)
			defnet = "net";
		/* allow unix sockets to omit unix! prefix */
		if(access(linear, 0) >= 0){
			snprint(addr, sizeof(addr), "unix!%s", linear);
			return addr;
		}
		/* allow host:service in deference to Unix convention */
		if((cp = strchr(linear, ':')) != nil){
			snprint(addr, sizeof(addr), "%s!%.*s!%s", 
				defnet, utfnlen(linear, cp-linear),
				linear, cp+1);
			return addr;
		}
		if(defsrv)
			snprint(addr, sizeof(addr), "%s!%s!%s",
				defnet, linear, defsrv);
		else
			snprint(addr, sizeof(addr), "%s!%s", defnet, linear);
		return addr;
	}

	/*
	 *  if there is already a service, use it
	 */
	cp = strchr(cp+1, '!');
	if(cp)
		return linear;

	/*
	 * if the network is unix, no service
	 */
	if(strncmp(linear, "unix!", 5) == 0)
		return linear;

	/*
	 *  add default service
	 */
	if(defsrv == 0)
		return linear;

	snprint(addr, sizeof(addr), "%s!%s", linear, defsrv);
	return addr;
}
