#!/usr/bin/gawk -f
#

function p(name, val,   w) {
	w = ENVIRON[name];
	if (w == "")
		w = val;

	return (w);
	}

function setstatus(host, port, name, status,   obj, message) {
	if (smd == "")
		return (0);

	if (host == ""  ||  host == "-")
		return (1);

	if (status == "OK") {
		status = "ok";
		message = "server ready";
		}
	else if (status == "CONNECT") {
		status = "major";
		message = "connection refused";
		}
	else {
		status = "minor";
		message = "unknown error";
		}

	obj = (name != "")? name: "tcp+" port+0;
	printf ("%s server %s %s %s\n", host, obj, status, message) | smd;

	return (0);
	}


BEGIN {
	date = strftime("%Y%m%d", systime());
	LOGFILE = sprintf ("/tmp/proxy-xfer-%s.log", date);

#	smd = "cat >>" LOGFILE;
	smd = "/usr/local/sbin/sm status";

	date = strftime("%d.%m.%Y %H:%M:%S", systime());
	status = p("PROXY_STATUS", "-");
	name = p("PROXY_NAME");

	if ((client = p("PROXY_CLIENTNAME")) == "")
		client = p("PROXY_CLIENT", "-");

	if ((server = p("PROXY_SERVERNAME")) == "")
		server = p("PROXY_SERVER", "-");

	line = sprintf ("%s %s %s %s", date, p("PROXY_LOGNAME", "-"), p("PROXY_CONFIG", "-"), p("PROXY_STATUS", "-"));
	if (status == "CONNECT") {
		n = split(ENVIRON["PROXY_SERVERARG"], x, /[ ,]+/);
		if (n == 0)
			printf ("%s %s -- no server argument\n", date, status) >>LOGFILE;
		else {
			for (i=1; i<=n; i++) {
				server = x[i];
				if (match(x[i], /:/) == 0)
					x[i] = x[i] ":" (port = p("PROXY_PORT", 0));
				else
					port = substr(x[i], RSTART) + 0;

				printf ("%s %s\n", line, x[i]) >>LOGFILE;
				setstatus(server, port, name, "CONNECT");
				}
			}
		}

	if (status != "ACCESS"  &&  status != "CONNECT") {
		printf ("%s %s %s:%d %d %d %d\n", line,
			client,
			server, (port = p("PROXY_SERVERPORT", 0)),
			p("PROXY_BYTES_CTS"), p("PROXY_BYTES_STC"),
			p("PROXY_DURATION")) >>LOGFILE;

		if (status == "OK")
			setstatus(server, port, name, "OK");
		}

	exit (0);
	}

