Posted to tcl by dgood` at Fri Jan 24 20:53:37 GMT 2014view pretty

This code will cause the ftp module to throw errors into the event loop.  Any ideas on how to work around this situation?

Code:
======
package require log
package require ftp

namespace import ::log::log*
namespace import ::ftp::*

# Set log package options
::log::lvSuppressLE warning 0
::log::lvSuppress debug 0
::log::lvCmdForall logCmd

proc logCmd {lvl txt} {
    if {[info level] > 2} {
        set method [lindex [info level -2] 0]
    } else {
        set method "global"
    }
    set line "\[[clock format [clock seconds] -format {%Y-%m-%dT%H:%M:%S}]\] \[$lvl\] \[$method\] $txt"
    puts stdout $line
    flush stdout
}

# Set ftp package options
namespace eval ftp {
    set VERBOSE 1
    set DEBUG 1

    # Override default output routine
    proc DisplayMsg {s msg {state "info"}} {
        ::log::log debug "ftp: $state | $msg"
        # if {$state eq "error" && [info exists ::errorInfo]} {
        #     ::log::log debug $::errorInfo
        # }
        return
    }
}

proc bgerror {msg} {
    log error "bgerror: $msg"
    if {[info exists ::errorInfo]} {
        log error "$::errorInfo"
    } else {
        log error "errorInfo does not exist"
    }
}

proc connect {addr} {
    log info "Opening anonymous FTP connection to $addr"
    set ftp [::ftp::Open $addr anonymous anonymous -port 21 -timeout 20]
}

proc disconnect {ftp} {
    ::ftp::Close $ftp
}

proc stress {ftp count} {
    for {set n 0} {$n < $count} {incr n} {
        set nlist [::ftp::NList $ftp /Outbox/Store_11420]
        log info "Count $n/$count NList = $nlist"
    }
}
======
Output:

[2014-01-24T14:26:34] [info] [stress] Count 19/100 NList = /Outbox/Store_11420/Done /Outbox/Store_11420/PCO-11420-140123-183131.xml
[2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: info | -> rc="   "
[2014-01-24T14:26:34] [debug] [DisplayMsg] -> msgtext=""
[2014-01-24T14:26:34] [debug] [DisplayMsg] -> state="type"
[2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: info | ---> TYPE A
[2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: info | -> rc="200"
[2014-01-24T14:26:34] [debug] [DisplayMsg] -> msgtext="200 Type set to A."
[2014-01-24T14:26:34] [debug] [DisplayMsg] -> state="type_sent"
[2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: control | C: 200 Type set to A.
[2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: info | -> rc="   "
[2014-01-24T14:26:34] [debug] [DisplayMsg] -> msgtext=""
[2014-01-24T14:26:34] [debug] [DisplayMsg] -> state="nlist_active"
[2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: data | D: Port is 59758
[2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: info | ---> PORT 192,168,16,140,233,110
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="200"
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="200 PORT command successful."
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="nlist_open"
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | ---> NLST /Outbox/Store_11420
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 200 PORT command successful.
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="150"
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="150 Opening ASCII mode data connection."
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="list_sent"
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 150 Opening ASCII mode data connection.
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: data | D: Connection from <ip addr>:20
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="226"
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="226 Transfer complete."
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="list_close"
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: data | D: Port closed
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 226 Transfer complete.
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="   "
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext=""
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="type"
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | ---> TYPE I
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="200"
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="200 Type set to I."
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="type_sent"
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 200 Type set to I.
[2014-01-24T14:26:35] [info] [stress] Count 20/100 NList = /Outbox/Store_11420/Done /Outbox/Store_11420/PCO-11420-140123-183131.xml
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="   "
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext=""
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="type"
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | ---> TYPE A
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="200"
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="200 Type set to A."
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="type_sent"
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 200 Type set to A.
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="   "
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext=""
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="nlist_active"
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: data | D: Port is 59759
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | ---> PORT 192,168,16,140,233,111
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="200"
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="200 PORT command successful."
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="nlist_open"
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | ---> NLST /Outbox/Store_11420
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 200 PORT command successful.
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="150"
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="150 Opening ASCII mode data connection."
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="list_sent"
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 150 Opening ASCII mode data connection.
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="226"
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="226 Transfer complete."
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="list_close"
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 226 Transfer complete.
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="   "
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext=""
[2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="type"
[2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | ---> TYPE I
[2014-01-24T14:26:35] [error] [bgerror] bgerror: Unknown state "type_sent"
[2014-01-24T14:26:35] [error] [bgerror] Unknown state "type_sent"
[2014-01-24T14:26:35] [error] [bgerror]     while executing
[2014-01-24T14:26:35] [error] [bgerror] "error "Unknown state \"$ftp(State)\"""
[2014-01-24T14:26:35] [error] [bgerror]     (procedure "::ftp::InitDataConn" line 55)
[2014-01-24T14:26:35] [error] [bgerror]     invoked from within
[2014-01-24T14:26:35] [error] [bgerror] "::ftp::InitDataConn 0 sock560 <ip addr> 20"
[2014-01-24T14:26:36] [debug] [DisplayMsg] ftp: info | -> rc="200"
[2014-01-24T14:26:36] [debug] [DisplayMsg] -> msgtext="200 Type set to I."
[2014-01-24T14:26:36] [debug] [DisplayMsg] -> state="type_sent"