set cportopen "" set cports "" alias cport { set port [FALC_port [lindex [args] 0]] set always [lindex [args] 1] if [catch {socket -server get_cport $port} socket] { echo "[kano] Couldn't get port $port: $socket" } { if {$always == "always"} { set cp [get_cookie cport] set f [lsearch -exact $cp $port] if {$f == -1} { lappend cp $port echo "[kano] Remembering to grab $port always." } { set cp [lreplace $cp $f $f] echo "[kano] Removed $port from autoport list." set_cookie cport $cp complete;return } set_cookie cport $cp } lappend cports [list $socket $port] if {$always != "quiet"} { echo "[kano] Got port $port." } } complete } proc get_cport {x y z} { set peer [fconfigure $x -peername] set sock [fconfigure $x -sockname] set pn [lindex $peer 1] set pp [lindex $sock 2] echo "[kano] $pn connected on port $pp, socket $x" fileevent $x readable [list get_ctext $x $pn $z] fconfigure $x -blocking 0 -buffering line /query .SOCK:$x. window set_title "$pn on port $pp" query .sock:$x. global cportopen lappend cportopen $x } proc get_ctext {sock host port} { set s .SOCK:$sock. if [eof $sock] {close $sock;echo "[kano] eof from $host:$port" query $s;return} echo "< [gets $sock]" query $s } on unload { foreach i $cports {catch {close [lindex $i 0]}} foreach i $cportopen {catch {close $i}} } alias privmsg { set w [lindex [args] 0] if [string match .SOCK:*. $w] { set t [join [lrange [split [raw_args]] 1 end]] if ![catch {puts [string trimright [string range $w 6 end] .] $t}] { echo "[k highlight]> $t" } } } kaddhelp cport "Monitors a port for activity." "/cport \[always\]" "Port Monitor" after idle { foreach i [get_cookie cport] {/cport $i quiet} }