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

  1. This code will cause the ftp module to throw errors into the event loop. Any ideas on how to work around this situation?
  2.  
  3. Code:
  4. ======
  5. package require log
  6. package require ftp
  7.  
  8. namespace import ::log::log*
  9. namespace import ::ftp::*
  10.  
  11. # Set log package options
  12. ::log::lvSuppressLE warning 0
  13. ::log::lvSuppress debug 0
  14. ::log::lvCmdForall logCmd
  15.  
  16. proc logCmd {lvl txt} {
  17. if {[info level] > 2} {
  18. set method [lindex [info level -2] 0]
  19. } else {
  20. set method "global"
  21. }
  22. set line "\[[clock format [clock seconds] -format {%Y-%m-%dT%H:%M:%S}]\] \[$lvl\] \[$method\] $txt"
  23. puts stdout $line
  24. flush stdout
  25. }
  26.  
  27. # Set ftp package options
  28. namespace eval ftp {
  29. set VERBOSE 1
  30. set DEBUG 1
  31.  
  32. # Override default output routine
  33. proc DisplayMsg {s msg {state "info"}} {
  34. ::log::log debug "ftp: $state | $msg"
  35. # if {$state eq "error" && [info exists ::errorInfo]} {
  36. # ::log::log debug $::errorInfo
  37. # }
  38. return
  39. }
  40. }
  41.  
  42. proc bgerror {msg} {
  43. log error "bgerror: $msg"
  44. if {[info exists ::errorInfo]} {
  45. log error "$::errorInfo"
  46. } else {
  47. log error "errorInfo does not exist"
  48. }
  49. }
  50.  
  51. proc connect {addr} {
  52. log info "Opening anonymous FTP connection to $addr"
  53. set ftp [::ftp::Open $addr anonymous anonymous -port 21 -timeout 20]
  54. }
  55.  
  56. proc disconnect {ftp} {
  57. ::ftp::Close $ftp
  58. }
  59.  
  60. proc stress {ftp count} {
  61. for {set n 0} {$n < $count} {incr n} {
  62. set nlist [::ftp::NList $ftp /Outbox/Store_11420]
  63. log info "Count $n/$count NList = $nlist"
  64. }
  65. }
  66. ======
  67. Output:
  68.  
  69. [2014-01-24T14:26:34] [info] [stress] Count 19/100 NList = /Outbox/Store_11420/Done /Outbox/Store_11420/PCO-11420-140123-183131.xml
  70. [2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: info | -> rc=" "
  71. [2014-01-24T14:26:34] [debug] [DisplayMsg] -> msgtext=""
  72. [2014-01-24T14:26:34] [debug] [DisplayMsg] -> state="type"
  73. [2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: info | ---> TYPE A
  74. [2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: info | -> rc="200"
  75. [2014-01-24T14:26:34] [debug] [DisplayMsg] -> msgtext="200 Type set to A."
  76. [2014-01-24T14:26:34] [debug] [DisplayMsg] -> state="type_sent"
  77. [2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: control | C: 200 Type set to A.
  78. [2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: info | -> rc=" "
  79. [2014-01-24T14:26:34] [debug] [DisplayMsg] -> msgtext=""
  80. [2014-01-24T14:26:34] [debug] [DisplayMsg] -> state="nlist_active"
  81. [2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: data | D: Port is 59758
  82. [2014-01-24T14:26:34] [debug] [DisplayMsg] ftp: info | ---> PORT 192,168,16,140,233,110
  83. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="200"
  84. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="200 PORT command successful."
  85. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="nlist_open"
  86. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | ---> NLST /Outbox/Store_11420
  87. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 200 PORT command successful.
  88. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="150"
  89. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="150 Opening ASCII mode data connection."
  90. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="list_sent"
  91. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 150 Opening ASCII mode data connection.
  92. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: data | D: Connection from <ip addr>:20
  93. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="226"
  94. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="226 Transfer complete."
  95. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="list_close"
  96. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: data | D: Port closed
  97. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 226 Transfer complete.
  98. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc=" "
  99. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext=""
  100. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="type"
  101. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | ---> TYPE I
  102. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="200"
  103. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="200 Type set to I."
  104. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="type_sent"
  105. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 200 Type set to I.
  106. [2014-01-24T14:26:35] [info] [stress] Count 20/100 NList = /Outbox/Store_11420/Done /Outbox/Store_11420/PCO-11420-140123-183131.xml
  107. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc=" "
  108. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext=""
  109. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="type"
  110. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | ---> TYPE A
  111. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="200"
  112. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="200 Type set to A."
  113. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="type_sent"
  114. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 200 Type set to A.
  115. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc=" "
  116. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext=""
  117. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="nlist_active"
  118. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: data | D: Port is 59759
  119. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | ---> PORT 192,168,16,140,233,111
  120. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="200"
  121. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="200 PORT command successful."
  122. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="nlist_open"
  123. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | ---> NLST /Outbox/Store_11420
  124. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 200 PORT command successful.
  125. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="150"
  126. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="150 Opening ASCII mode data connection."
  127. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="list_sent"
  128. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 150 Opening ASCII mode data connection.
  129. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc="226"
  130. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext="226 Transfer complete."
  131. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="list_close"
  132. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: control | C: 226 Transfer complete.
  133. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | -> rc=" "
  134. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> msgtext=""
  135. [2014-01-24T14:26:35] [debug] [DisplayMsg] -> state="type"
  136. [2014-01-24T14:26:35] [debug] [DisplayMsg] ftp: info | ---> TYPE I
  137. [2014-01-24T14:26:35] [error] [bgerror] bgerror: Unknown state "type_sent"
  138. [2014-01-24T14:26:35] [error] [bgerror] Unknown state "type_sent"
  139. [2014-01-24T14:26:35] [error] [bgerror] while executing
  140. [2014-01-24T14:26:35] [error] [bgerror] "error "Unknown state \"$ftp(State)\"""
  141. [2014-01-24T14:26:35] [error] [bgerror] (procedure "::ftp::InitDataConn" line 55)
  142. [2014-01-24T14:26:35] [error] [bgerror] invoked from within
  143. [2014-01-24T14:26:35] [error] [bgerror] "::ftp::InitDataConn 0 sock560 <ip addr> 20"
  144. [2014-01-24T14:26:36] [debug] [DisplayMsg] ftp: info | -> rc="200"
  145. [2014-01-24T14:26:36] [debug] [DisplayMsg] -> msgtext="200 Type set to I."
  146. [2014-01-24T14:26:36] [debug] [DisplayMsg] -> state="type_sent"
  147.