#!/usr/local/bin/tclsh
global env gv

if {![info exists env(ECLIPSE)]} {
	if {[file exists $env(HOME)/ECLIPSE]} {
		set env(ECLIPSE) $env(HOME)/ECLIPSE
	} elseif {[file exists /opt/ECLIPSE]} {
		set env(ECLIPSE) /opt/ECLIPSE
	} elseif {[file exists /apps/ECLIPSE]} {
		set env(ECLIPSE) /apps/ECLIPSE
	} elseif {[file exists /usr/local/ECLIPSE]} {
		set env(ECLIPSE) /usr/local/ECLIPSE
	} else {
		puts stdout "Please define the ECLIPSE environment variable"
		exit 1
	}
}

if {![file exists $env(ECLIPSE)/logs] \
	|| ![file isdirectory $env(ECLIPSE)/logs] \
	|| ![file writable $env(ECLIPSE)/logs]} {
	puts stdout "Log directory $env(ECLIPSE)/logs not found or is not writable"
	exit 1
}

############################################################################
#	Procedures
############################################################################

proc LoadHosts { } {
	global env gv

	if {![file exists $env(ECLIPSE)/etc/hosts]} {
		puts stdout "Hosts file $env(ECLIPSE)/etc/hosts not found"
		exit 1
	}
	set fp [open $env(ECLIPSE)/etc/hosts r]
	while {[gets $fp line]>=0} {
		set line [string trim $line]
		if {[string index $line 0]=="#"} {continue}
		regsub -all {[ 	]+} $line { } line
		set fields [split [string trim $line]]
		if {[llength $fields]<2} {continue}
		set gv(host:[lindex $fields 0]) [lindex $fields 1]
	}
	close $fp

	set gv(hoststime) [file mtime $env(ECLIPSE)/etc/hosts]
}

proc HandleMessage { channel client_addr client_port } {
	global env gv

	fconfigure $channel -buffering line
	catch {gets $channel line} res
	close $channel

	if {$gv(hoststime)!=[file mtime $env(ECLIPSE)/etc/hosts]} {
		LoadHosts
	}

	if {[info exists gv(host:$client_addr)]} {
		set client_name $gv(host:$client_addr)
	} else {
		set client_name "unknown:${client_addr}"
	}

	if {[file exists $env(ECLIPSE)/logs/${client_name}] \
		&& ![file isdirectory $env(ECLIPSE)/logs/${client_name}]} {
		catch {exec rm -f $env(ECLIPSE)/logs/${client_name}} junk
	}
	if {![file exists $env(ECLIPSE)/logs/${client_name}]} {
		catch {exec mkdir $env(ECLIPSE)/logs/${client_name}} junk
	}

	set time [clock format [clock seconds] -format "%Y%m%d%H%M"]
	set fp [open $env(ECLIPSE)/logs/${client_name}/$time w]
	puts $fp [join $line "\n"]
	close $fp
}

############################################################################
#	Main program
############################################################################

LoadHosts

socket -server {HandleMessage} 1997

vwait ShouldBeNeverSet

