All pastes #474018 Raw Edit

Vadtec

public text v1 · immutable
·published 2007-05-06 15:36 UTC
rendered paste body
######################################################################
#Begin config

set db "domain-stats.sql.db"
set resolve 1
set debug 1

#End config
######################################################################

set mydir "/home/vadtec/tcl/"
lappend auto_path $mydir

package require dns
package require ip
package require sqlite3

# sql DB
sqlite3 dbs $db

bind msgm - "!resolve*" cm_resolve 

proc cm_resolve { nick uhost handle text } {
	global resolve

	set sql "SELECT id, domain FROM domain WHERE ip = \"\" AND longip ISNULL ORDER BY id;"
	output "log" $sql
	set result [dbs eval $sql]
	output "log" $result
	
	if {$resolve} {
		set i 0
		
		foreach r [split $result " "] {
			if {[string is integer -strict $r]} {
				set i $r
			} else {
				set status ""
				set ipver [ip::version $r]
				
				output "log" ">>> 1 >> 1 > id: $i domain $r ipver: $ipver"
				
				if {$ipver == 4} {
					set longip [ip::toInteger $r]
					output "log" ">>> 1 >> 2 > ipver: $ipver ip: $r longip: $longip"
					set sql "UPDATE domain SET ip = '$r', longip = $longip WHERE id = $i"
					dbs eval $sql
				}
				
				if {$ipver == 6} {
					set longip "0"
					catch {[set longip [ip::toInteger $r]]}
					output "log" ">>> 1 >> 3 > ipver: $ipver ip: $r longip: $longip"
					set sql "UPDATE domain SET ip = '$r', longip = $longip WHERE id = $i"
					dbs eval $sql
				}
				
				if {$ipver == -1} {
					set tok [dns::resolve $r]
					set status [dns::status $tok]
					output "log" ">>> 1 >> 4 > ipver: $ipver ip: $r status: $status"
				}
				
				if {$status eq "ok"} {
					set ip [dns::address $tok]
					if {[llength $ip] != 1} {
						set temp [split $ip]
						set ip [lindex $temp 0]
					}
					set longip [ip::toInteger $ip]
					output "log" ">>> 1 >> 5 > id: $i ipver: $ipver ip: $ip longip: $longip"
					set sql "UPDATE domain SET ip = '$ip', longip = $longip WHERE id = $i"
					dbs eval $sql
				}
			}
		}
	}
}

proc output { where text } {
	global debug
	
	if {$debug} {
		if {$where eq "log"} {
			putlog $text
		} else {
			putmsg $where $text
		}
	}
}