# Advanced trace, Trace with address/nick checking for matches. /trace should
# work as normal, but this is BETA version so I don't give any guarantees.
# Usage: /at
# Examples: /at *.ca List all clients from .ca on this server
# /at *.netcom.com igc.* List all clients from .netcom.com on igc.*
# Or: /nt
# Examples: /nt Foo* List all connections with nickname starting with Foo
# Or: /tt
# Examples: /tt Operator List all operator connections
# In case you're wondering, this is only useful for IrcOps.
# Author: Wizzu (Concept of addrtrace by abtm)
# Date: 9th Jan 1996
# Modified 16th Jan 1996
# Inspiration by Kestral ;)
alias at addrtrace
alias addrtrace {
^assign tracematch *[$0]
^assign tracematchcount 0
^assign tracematchserv none
^assign -tracedone
mtrace $1-
}
alias nt nicktrace
alias nicktrace {
^assign tracematch $0[*]
^assign tracematchcount 0
^assign tracematchserv none
^assign -tracedone
mtrace $1-
}
alias tt typetrace
alias typetrace {
if ([$[1]0]==[S]) {
^assign tracetype Server
}
if ([$[1]0]==[O]) {
^assign tracetype Operator
}
if ([$[1]0]==[U]) {
^assign tracetype User
}
if ([$[1]0]==[C]) {
^assign tracetype Connecting
}
if ([$[1]0]==[H]) {
^assign tracetype Handshake
}
if (([$[1]0]==[V])||([$[4]0]==[Serv])) {
^assign tracetype Service
}
if ([$[1]0]==[N]) {
^assign tracetype Newtype
}
if (([$[1]0]==[K])||([$[2]0]==[Un])) {
^assign tracetype Unknown
}
if ([$tracetype]==[]) {
^assign tracetype $0
}
^assign tracetypeclass none
^assign tracetypeserv none
^assign -tracedone
mtrace $1-
}
alias mtrace {
if ([$1]) {^assign traces $1-} {^assign -traces}
#if ([$0]) {echo ??? Trace: $0} {echo ??? Trace: (local)}
trace $0
}
alias endtracematch {
if ([$tracematch]) {
#echo ??? Endtracematch $0 \($tracedone\)
if ([$tracedone]!=[$0]) {
^assign tracedone $0
#echo ??? End of trace on $0.
if ([$tracematchserv]!=[none]) {
xecho -level crap ### Matched connections ${tracematch} on ${tracematchserv}: $tracematchcount
} {
xecho -level crap ### No matches on $0.
}
if ([$traces]) {
^assign tracematchcount 0
^assign tracematchserv none
timer 1 mtrace $traces
} {
xecho -level crap ### Tracematch finished.
^assign -tracematch
^assign -tracematchcount
^assign -tracematchserv
}
} {
if (![$traces]) {timer 2 ^assign -tracedone}
}
}
}
alias endtypetrace {
if ([$tracetype]) {
#echo ??? Endtypetrace $0 \($tracedone\)
if ([$tracedone]!=[$0]) {
^assign tracedone $0
#echo ??? End of trace on $0.
if ([$tracetypeserv]==[none]) {
xecho -level crap ### No $tracetype connections on $0.
}
if ([$traces]) {
^assign tracetypeserv none
^assign tracetypeclass none
timer 1 mtrace $traces
} {
xecho -level crap ### Typetrace finished.
^assign -tracetype
^assign -tracetypeclass
^assign -tracetypeserv
}
} {
if (![$traces]) {timer 2 ^assign -tracedone}
}
}
}
alias showconn {
# $0 is the numeric response, so parameters are shifted by one
if ([$tracematch]) {
if (match($tracematch $4)) {
xecho -level crap ### MATCH: $2 [$3] ==> $4-
@ tracematchcount = [${tracematchcount + 1}]
@ tracematchserv = [$1]
}
} {
if ([$tracetype]) {
if (([$0]==[$tracetype])||([$2]==[$tracetype])||([$3]==[$tracetype])) {
xecho -level crap ### $0 \($2 [$3]\) ==> $4-
@ tracetypeclass = [$3]
@ tracetypeserv = [$1]
}
} {
xecho -level crap ### $2 [$3] ==> $4-
}
}
}
#TRACELINK 200
#TRACECONNECTING 201
#TRACEHANDSHAKE 202
#TRACEUNKNOWN 203
#TRACEOPERATOR 204
#TRACEUSER 205
#TRACESERVER 206
#TRACESERVICE 207
#TRACENEWTYPE 208
#TRACECLASS 209
on ^200 * if ((![$tracematch])&&(![$tracetype])) {
xecho -level crap ### $1 $0 \($2\) ==> $3-
}
on ^201 * {
shoconn Connecting $0-
}
on ^202 * {
shoconn Handshake $0-
}
on ^203 * {
showconn Unknown $0-
}
on ^204 * {
showconn Operator $0-
}
#on ^205 * if ([$tracematch]) {
# if ([$match($tracematch $3)]) {
# xecho -level crap ### MATCH: $1 [$2] ==> $3-
# @ tracematchcount = [${tracematchcount + 1}]
# @ tracematchserv = [$0]
# }
#} {
# if ([$tracetype]==[User]) {
# xecho -level crap ### User \($1 [$2]\) ==> $3-
# @ tracetypeclass = [$2]
# @ tracetypeserv = [$0]
# } {
# showconn $0-
# }
#}
on ^205 * {
showconn User $0-
}
#on ^206 * if (![$tracematch]) {
# if ([$tracetype]==[Server]) {
# xecho -level crap ### Server \($1 [$2]\) ==> $3-
# @ tracetypeclass = [$2]
# @ tracetypeserv = [$0]
# } {
# showconn $0-
# }
#}
on ^206 * {
showconn Server $0-
}
on ^207 * {
showconn Unknown $0-
}
on ^208 * {
showconn Newtype $0-
}
on ^209 * if (![$tracematch]) {
if (![$tracetype]) {
if ([$0]==[$S]) {
xecho -level crap ### $1 [$2] connects: $3-
} {
xecho -level crap ### $1 [$2] connects: $3- \(from $0\)
}
} {
#echo ??? tracetype = $tracetype
if ([$2]==[$tracetypeclass]) {
if ([$0]==[$S]) {
xecho -level crap ### $1 [$2] connects: $3-
} {
xecho -level crap ### $1 [$2] connects: $3- \(from $0\)
}
}
timer 1 endtypetrace $0
}
} {
#echo ??? tracematch = $tracematch
timer 1 endtracematch $0
}
on ^402 * {
echo ### $1: no such server.
if ([$tracematch]) {endtracematch $1} {
if ([$tracetype]) {endtypetrace $1} {
if ([$traces]) {mtrace $traces}
}
}
}
eval xecho -level crap ### Advanced trace 0.2.0 beta (based on addrtrace 0.4.1b) by Wizzu loaded.
eval xecho -level crap ### Usage: ${K}at
eval xecho -level crap ### ${K}nt
eval xecho -level crap ### ${K}tt