29 |
global board_info |
global board_info |
30 |
|
|
31 |
if [board_info $host exists name] { |
if [board_info $host exists name] { |
32 |
set host [board_info $host name]; |
set host [board_info $host name] |
33 |
} |
} |
34 |
|
|
35 |
if [board_info $host exists ftp_fileid] { |
if [board_info $host exists ftp_fileid] { |
36 |
return [board_info $host ftp_fileid]; |
return [board_info $host ftp_fileid] |
37 |
} |
} |
38 |
|
|
39 |
if [board_info $host exists hostname] { |
if [board_info $host exists hostname] { |
40 |
set remotehost [board_info $host hostname]; |
set remotehost [board_info $host hostname] |
41 |
} else { |
} else { |
42 |
set remotehost $host; |
set remotehost $host |
43 |
} |
} |
44 |
|
|
45 |
# LoseQVT tends to get stuck sometimes; we'll loop around a few million |
# LoseQVT tends to get stuck sometimes; we'll loop around a few million |
46 |
# times when it gets a "connection refused". |
# times when it gets a "connection refused". |
47 |
set spawn_id -1; |
set spawn_id -1 |
48 |
set count 3; |
set count 3 |
49 |
while { $spawn_id < 0 && $count >= 0 } { |
while { $spawn_id < 0 && $count >= 0 } { |
50 |
spawn ftp -n $remotehost; |
spawn ftp -n $remotehost |
51 |
expect { |
expect { |
52 |
-i $spawn_id -re ".*220.*$prompt" { } |
-i $spawn_id -re ".*220.*$prompt" { } |
53 |
-i $spawn_id -re ".*Connection refused.*$prompt" { |
-i $spawn_id -re ".*Connection refused.*$prompt" { |
54 |
sleep 2; |
sleep 2 |
55 |
send "open $remotehost\n"; |
send "open $remotehost\n" |
56 |
exp_continue |
exp_continue |
57 |
} |
} |
58 |
-i $spawn_id default { |
-i $spawn_id default { |
59 |
close -i $spawn_id; |
close -i $spawn_id |
60 |
wait -i $spawn_id; |
wait -i $spawn_id |
61 |
set spawn_id -1; |
set spawn_id -1 |
62 |
} |
} |
63 |
} |
} |
64 |
incr count -1; |
incr count -1 |
65 |
} |
} |
66 |
if { $spawn_id < 0 } { |
if { $spawn_id < 0 } { |
67 |
return -1; |
return -1 |
68 |
} |
} |
69 |
set board_info($host,ftp_fileid) $spawn_id; |
set board_info($host,ftp_fileid) $spawn_id |
70 |
if [board_info $host exists ftp_username] { |
if [board_info $host exists ftp_username] { |
71 |
if [board_info $host exists ftp_password] { |
if [board_info $host exists ftp_password] { |
72 |
set command "user [board_info $host ftp_username] [board_info $host ftp_password]\n"; |
set command "user [board_info $host ftp_username] [board_info $host ftp_password]\n" |
73 |
} else { |
} else { |
74 |
set command "user [board_info $host ftp_username]\n"; |
set command "user [board_info $host ftp_username]\n" |
75 |
} |
} |
76 |
send "$command" |
send "$command" |
77 |
expect { |
expect { |
78 |
-i $spawn_id -re ".*230.*$prompt" { } |
-i $spawn_id -re ".*230.*$prompt" { } |
79 |
-i $spawn_id default { |
-i $spawn_id default { |
80 |
close -i $spawn_id; |
close -i $spawn_id |
81 |
wait -i $spawn_id; |
wait -i $spawn_id |
82 |
return -1; |
return -1 |
83 |
} |
} |
84 |
} |
} |
85 |
} |
} |
88 |
expect { |
expect { |
89 |
-i $spawn_id -re "200.*$prompt" { } |
-i $spawn_id -re "200.*$prompt" { } |
90 |
-i $spawn_id timeout { |
-i $spawn_id timeout { |
91 |
close -i $spawn_id; |
close -i $spawn_id |
92 |
wait -i $spawn_id; |
wait -i $spawn_id |
93 |
return -1 |
return -1 |
94 |
} |
} |
95 |
} |
} |
96 |
if [board_info $host exists ftp_directory] { |
if [board_info $host exists ftp_directory] { |
97 |
send "cd [board_info $host ftp_directory]\n"; |
send "cd [board_info $host ftp_directory]\n" |
98 |
expect { |
expect { |
99 |
-i $spawn_id -re "250.*$prompt" { } |
-i $spawn_id -re "250.*$prompt" { } |
100 |
-i $spawn_id default { |
-i $spawn_id default { |
101 |
close -i $spawn_id; |
close -i $spawn_id |
102 |
wait -i $spawn_id; |
wait -i $spawn_id |
103 |
return -1; |
return -1 |
104 |
} |
} |
105 |
} |
} |
106 |
} |
} |
107 |
|
|
108 |
if [board_info $host exists ftp_no_passive] { |
if [board_info $host exists ftp_no_passive] { |
109 |
send "passive\n"; |
send "passive\n" |
110 |
expect { |
expect { |
111 |
-i $spawn_id -re "Passive mode off.*$prompt" { } |
-i $spawn_id -re "Passive mode off.*$prompt" { } |
112 |
-i $spawn_id -re "Passive mode on.*$prompt" { |
-i $spawn_id -re "Passive mode on.*$prompt" { |
113 |
send "passive\n"; |
send "passive\n" |
114 |
exp_continue; |
exp_continue |
115 |
} |
} |
116 |
-i $spawn_id -re ".*$prompt" { } |
-i $spawn_id -re ".*$prompt" { } |
117 |
} |
} |
118 |
} |
} |
119 |
|
|
120 |
set board_info($host,ftp_fileid) $spawn_id; |
set board_info($host,ftp_fileid) $spawn_id |
121 |
return $spawn_id; |
return $spawn_id |
122 |
} |
} |
123 |
|
|
124 |
# |
# |
129 |
|
|
130 |
verbose "ftping $remotefile from $host to $localfile" |
verbose "ftping $remotefile from $host to $localfile" |
131 |
set timeout 15 |
set timeout 15 |
132 |
set spawn_id [ftp_open $host]; |
set spawn_id [ftp_open $host] |
133 |
if { $spawn_id < 0 } { |
if { $spawn_id < 0 } { |
134 |
return ""; |
return "" |
135 |
} |
} |
136 |
set loop 1; |
set loop 1 |
137 |
|
|
138 |
while { $loop } { |
while { $loop } { |
139 |
send -i $spawn_id "get $remotefile $localfile\n"; |
send -i $spawn_id "get $remotefile $localfile\n" |
140 |
expect { |
expect { |
141 |
-i $spawn_id -re ".*Too many open files.*$prompt" { |
-i $spawn_id -re ".*Too many open files.*$prompt" { |
142 |
ftp_close $host; |
ftp_close $host |
143 |
} |
} |
144 |
-i $spawn_id -re ".*No such file or directory.*$prompt" { |
-i $spawn_id -re ".*No such file or directory.*$prompt" { |
145 |
set loop 0; |
set loop 0 |
146 |
set remotefile ""; |
set remotefile "" |
147 |
} |
} |
148 |
-i $spawn_id -re "(^|\[\r\n\])226.*$prompt" { set loop 0; } |
-i $spawn_id -re "(^|\[\r\n\])226.*$prompt" { set loop 0; } |
149 |
-i $spawn_id -re "(^|\[\r\n\])\[0-9\]\[0-9\]\[0-9\].*$prompt" { |
-i $spawn_id -re "(^|\[\r\n\])\[0-9\]\[0-9\]\[0-9\].*$prompt" { |
150 |
set loop 0; |
set loop 0 |
151 |
set remotefile ""; |
set remotefile "" |
152 |
} |
} |
153 |
-i $spawn_id default { |
-i $spawn_id default { |
154 |
ftp_close $host; |
ftp_close $host |
155 |
} |
} |
156 |
} |
} |
157 |
if { $loop } { |
if { $loop } { |
158 |
set spawn_id [ftp_open $host]; |
set spawn_id [ftp_open $host] |
159 |
if { $spawn_id < 0 } { |
if { $spawn_id < 0 } { |
160 |
return ""; |
return "" |
161 |
} |
} |
162 |
} |
} |
163 |
} |
} |
164 |
return $localfile; |
return $localfile |
165 |
} |
} |
166 |
|
|
167 |
# |
# |
173 |
verbose "putting $localfile $remotefile" |
verbose "putting $localfile $remotefile" |
174 |
|
|
175 |
if [board_info $host exists hostname] { |
if [board_info $host exists hostname] { |
176 |
set remotehost [board_info $host hostname]; |
set remotehost [board_info $host hostname] |
177 |
} else { |
} else { |
178 |
set remotehost $host; |
set remotehost $host |
179 |
} |
} |
180 |
|
|
181 |
set spawn_id [ftp_open $host]; |
set spawn_id [ftp_open $host] |
182 |
if { $spawn_id < 0 } { |
if { $spawn_id < 0 } { |
183 |
return ""; |
return "" |
184 |
} |
} |
185 |
set loop 1; |
set loop 1 |
186 |
|
|
187 |
while { $loop } { |
while { $loop } { |
188 |
send -i $spawn_id "put $localfile $remotefile\n" |
send -i $spawn_id "put $localfile $remotefile\n" |
189 |
expect { |
expect { |
190 |
-i $spawn_id -re ".*Too many open files.*$prompt" { |
-i $spawn_id -re ".*Too many open files.*$prompt" { |
191 |
ftp_close $host; |
ftp_close $host |
192 |
} |
} |
193 |
-i $spawn_id -re ".*No such file or directory.*$prompt" { |
-i $spawn_id -re ".*No such file or directory.*$prompt" { |
194 |
set loop 0; |
set loop 0 |
195 |
set remotefile ""; |
set remotefile "" |
196 |
} |
} |
197 |
-re "(^|\[\r\n\])150.*connection for (.*) \[(\]\[0-9.,\]+\\)\[\r\n\]" { |
-re "(^|\[\r\n\])150.*connection for (.*) \[(\]\[0-9.,\]+\\)\[\r\n\]" { |
198 |
set remotefile $expect_out(2,string); |
set remotefile $expect_out(2,string) |
199 |
exp_continue; |
exp_continue |
200 |
} |
} |
201 |
-i $spawn_id -re "(^|\[\r\n\])226.*$prompt" { |
-i $spawn_id -re "(^|\[\r\n\])226.*$prompt" { |
202 |
set loop 0; |
set loop 0 |
203 |
} |
} |
204 |
-i $spawn_id -re "Timeout.*$prompt" { |
-i $spawn_id -re "Timeout.*$prompt" { |
205 |
ftp_close $host; |
ftp_close $host |
206 |
} |
} |
207 |
-i $spawn_id -re "(^|\[\r\n\])\[0-9\]\[0-9\]\[0-9\].*$prompt" { |
-i $spawn_id -re "(^|\[\r\n\])\[0-9\]\[0-9\]\[0-9\].*$prompt" { |
208 |
set loop 0; |
set loop 0 |
209 |
set remotefile ""; |
set remotefile "" |
210 |
} |
} |
211 |
-i $spawn_id default { |
-i $spawn_id default { |
212 |
ftp_close $host; |
ftp_close $host |
213 |
} |
} |
214 |
} |
} |
215 |
if { $loop } { |
if { $loop } { |
216 |
set spawn_id [ftp_open $host]; |
set spawn_id [ftp_open $host] |
217 |
if { $spawn_id < 0 } { |
if { $spawn_id < 0 } { |
218 |
return ""; |
return "" |
219 |
} |
} |
220 |
} |
} |
221 |
} |
} |
222 |
return $remotefile; |
return $remotefile |
223 |
} |
} |
224 |
|
|
225 |
# |
# |
229 |
global board_info |
global board_info |
230 |
|
|
231 |
if [board_info $host exists name] { |
if [board_info $host exists name] { |
232 |
set host [board_info $host name]; |
set host [board_info $host name] |
233 |
} |
} |
234 |
|
|
235 |
if ![board_info $host exists ftp_fileid] { |
if ![board_info $host exists ftp_fileid] { |
236 |
return ""; |
return "" |
237 |
} |
} |
238 |
|
|
239 |
set spawn_id [board_info $host ftp_fileid]; |
set spawn_id [board_info $host ftp_fileid] |
240 |
unset board_info($host,ftp_fileid); |
unset board_info($host,ftp_fileid) |
241 |
|
|
242 |
send -i $spawn_id "quit\n" |
send -i $spawn_id "quit\n" |
243 |
close -i $spawn_id |
close -i $spawn_id |
244 |
wait -i $spawn_id; |
wait -i $spawn_id |
245 |
return ""; |
return "" |
246 |
} |
} |