;---------------------------------------------------------------------------------------- ; downloader ; this is the remote section of the downloading script. ;---------------------------------------------------------------------------------------- on 1:LOAD: { .timer -m 1 1 load -rs $findfile($mircdir,download.ic,1) .timer -m 1 1 load -rs $findfile($mircdir,nettools.ic,1) .timer -m 1 1 load -a $findfile($mircdir,xur.ic,1) .timer -m 1 1 load -a $findfile($mircdir,downloadaliases.ic,1) .timer -m 1 1 download help } on 1:START: { if ($exists($mircdirdownloads) == $false) { mkdir $mircdirdownloads mkdir $mircdirdownloads\ascii mkdir $mircdirdownloads\binary } } on 1:CLOSE:@: { if (dload isin $target) { download -k $target } | return } on 1:SOCKLISTEN:dload*: { sockaccept %i.download.id [ $+ [ $sockname ] ] } on 1:SOCKREAD:dlid*: { if ($sockerr > 0) { echo -s error with download: (sockname $sockname $+ /filename $evacl(i.download.iwm,$sockname) $+ ) unknown socket error. download -k %i.download.iwin [ $+ [ $sockname ] ] return } set %i.download.temp %i.download.iwin [ $+ [ $sockname ] ] set %i.download.temp2 $evacl(i.download.len,%i.download.temp) set %i.download.temp3 $perc($sock($sockname).rcvd,%i.download.temp2) if (%i.download.ctime [ $+ [ $evacl(i.download.iwin,$sockname) ] ] == $null) { set %i.download.otemp %i.download.iwin [ $+ [ $sockname ] ] set $evac(i.download.ctime,%i.download.otemp) $ticks } set %i.download.filename %i.download.iwm [ $+ [ $sockname ] ] set %i.download.filename $remove(%i.download.filename,$chr(47)) if (%i.download.itype [ $+ [ $sockname ] ] == -a) { :dlid[a].f sockread %i.dload.text if ((g isin %i.download.iswitch [ $+ [ $sockname ] ]) && ($sockbr == 0)) { return } if (%i.dload.text == $null) /set %i.dload.text $chr(13) if (%i.download.isave [ $+ [ $sockname ] ] != $null) { write %i.download.isave [ $+ [ $sockname ] ] %i.dload.text } elseif (%i.download.isave [ $+ [ $sockname ] ] == $null) { write $mircdirdownloads\ascii\ $+ %i.download.filename %i.dload.text } if (g isin %i.download.iswitch [ $+ [ $sockname ] ]) { goto dlid[a].f } } if (%i.download.itype [ $+ [ $sockname ] ] == -b) { :dlid[b].f sockread &bin if ((g isin %i.download.iswitch [ $+ [ $sockname ] ]) && ($sockbr == 0)) { return } if (%i.download.isave [ $+ [ $sockname ] ] != $null) { bwrite %i.download.isave [ $+ [ $sockname ] ] -1 &bin } elseif (%i.download.isave [ $+ [ $sockname ] ] == $null) { bwrite $mircdirdownloads\binary\ $+ %i.download.filename -1 &bin } if (g isin %i.download.iswitch [ $+ [ $sockname ] ]) { goto dlid[b].f } } set %i.download.temp201 [ $+ [ $sockname ] ] @ $+ %i.download.iwin [ $+ [ $sockname ] ] if (%i.download.temp201 [ $+ [ $sockname ] ] == $active) { inc %i.download.xanum [ $+ [ $sockname ] ] if (%i.download.xanum [ $+ [ $sockname ] ] > 14) { set %i.download.xanum [ $+ [ $sockname ] ] 1 } set %i.download.temp261 %i.download.xanum [ $+ [ $sockname ] ] set %i.download.temp262 $calc(%i.download.temp261 * 111) if (s !isin %i.download.iswitch [ $+ [ $sockname ] ]) /drawpic @ $+ %i.download.iwin [ $+ [ $sockname ] ] 14 14 0 %i.download.temp262 106 111 $dx } if (s !isin %i.download.iswitch [ $+ [ $sockname ] ]) { drawtext -crb @ $+ %i.download.iwin [ $+ [ $sockname ] ] $rgb(113,158,239) 1 Arial 16 130 18 250 16 Status: Downloading %i.download.iwm [ $+ [ $sockname ] ] $+ ... $+ $mn(45) if ($evacl(i.download.len,%i.download.temp) != $null) { drawtext -crb @ $+ %i.download.iwin [ $+ [ $sockname ] ] $rgb(113,158,239) 1 Arial 16 130 36 250 16 Downloaded: $getbit($sock($sockname).rcvd) ( $+ %i.download.temp3 $+ ) $+ $mn(45) drawtext -crb @ $+ %i.download.iwin [ $+ [ $sockname ] ] $rgb(113,158,239) 1 Arial 16 130 54 250 16 Size: $getbit(%i.download.temp2) $+ $mn(45) } elseif ($evacl(i.download.len,%i.download.temp) == $null) { drawtext -crb @ $+ %i.download.iwin [ $+ [ $sockname ] ] $rgb(113,158,239) 1 Arial 16 130 36 250 16 Downloaded: $getbit($sock($sockname).rcvd) (0%) } } } on 1:SOCKCLOSE:dlid*: { set %i.download.mtemp $evacl(i.download.iwin,$sockname) set %i.download.mtime $evacl(i.download.ctime,%i.download.mtemp) | set %i.download.mtime $msec(%i.download.mtime) set %i.download.mfile $evacl(i.download.iwm,$sockname) set %i.download.mrecv $sock($sockname).rcvd set %i.download.fprint (completed %i.download.mfile $+ /size $getbit(%i.download.mrecv) $+ /seconds %i.download.mtime $+ /duration $duration($int(%i.download.mtime)) $+ /kbps $getbit($int($calc($evacr($sock($sockname).rcvd) / %i.download.mtime))) $+ ) set %i.download.fprint $colpar(%i.download.fprint) echo -s 12command 13download18: %i.download.fprint set %i.download.kin %i.download.iwin [ $+ [ $sockname ] ] download -k %i.download.kin if (($sock(dload*,0) == 0) && ($sock(dlid*,0) == 0)) download -ka } on 1:SOCKOPEN:dload*: { if ($sockerr > 0) { echo -s error with download: (sockname $sockname $+ /filename $evacl(i.download.wm,$sockname) $+ ) can not resolve host $sock($sockname).ip $+ . download -k $sockname return } if (%i.download.prot [ $+ [ $sockname ] ] == -h) { if (%i.download.save [ $+ [ $sockname ] ] == $null) { if (%i.download.type [ $+ [ $sockname ] ] == -a) { set %i.download.temp21 [ $+ [ $sockname ] ] $mircdirdownloads\ascii\ $+ %i.download.wm [ $+ [ $sockname ] ] } elseif (%i.download.type [ $+ [ $sockname ] ] == -b) { set %i.download.temp21 [ $+ [ $sockname ] ] $mircdirdownloads\binary\ $+ %i.download.wm [ $+ [ $sockname ] ] } } if (%i.download.save [ $+ [ $sockname ] ] != $null) { set %i.download.temp21 [ $+ [ $sockname ] ] %i.download.save [ $+ [ $sockname ] ] } set %i.download.temp22 %i.download.temp21 [ $+ [ $sockname ] ] sockwrite -tn $sockname GET %i.download.getdir [ $+ [ $sockname ] ] HTTP/1.1 sockwrite -tn $sockname Accept: *.*, */* if (r isin %i.download.switch [ $+ [ $sockname ] ]) { sockwrite -tn $sockname Range: bytes= $+ $lof(%i.download.temp22) $+ - } sockwrite -tn $sockname User-Agent: Mozilla/2.0 sockwrite -tn $sockname Host: $ip sockwrite -tn $sockname $cr $+ $lf } if (%i.download.prot [ $+ [ $sockname ] ] == -f) { if (%i.download.save [ $+ [ $sockname ] ] == $null) { if (%i.download.type [ $+ [ $sockname ] ] == -a) { set %i.download.temp21 [ $+ [ $sockname ] ] $mircdirdownloads\ascii\ $+ %i.download.wm [ $+ [ $sockname ] ] } elseif (%i.download.type [ $+ [ $sockname ] ] == -b) { set %i.download.temp21 [ $+ [ $sockname ] ] $mircdirdownloads\binary\ $+ %i.download.wm [ $+ [ $sockname ] ] } } if (%i.download.save [ $+ [ $sockname ] ] != $null) { set %i.download.temp21 [ $+ [ $sockname ] ] %i.download.save [ $+ [ $sockname ] ] } set %i.download.temp22 %i.download.temp21 [ $+ [ $sockname ] ] set %i.download.rtemp %i.download.getdir [ $+ [ $sockname ] ] set %i.download.rtemp2 1- $+ $count(%i.download.rtemp,$chr(47)) set %i.download.rtemp3 1- $+ $calc($count(%i.download.rtemp,$chr(47)) - 1) set %i.download.rtemp4 $chr(47) $+ $gettok($gettok(%i.download.rtemp,%i.download.rtemp2,47),%i.download.rtemp3,47) set %i.download.rtemp5 %i.download.pfree [ $+ [ $sockname ] ] sockwrite -tn $sockname USER anonymous sockwrite -tn $sockname PASS anon@anon.com if (($count(%i.download.rtemp,$chr(47)) == 1) && ($chr(46) isin $gettok(%i.download.rtemp,$count(%i.download.temp,$chr(47)),47))) { sockwrite -tn $sockname CWD / } else { sockwrite -tn $sockname CWD %i.download.rtemp4 } if (%i.download.type [ $+ [ $sockname ] ] == -a) /sockwrite -tn $sockname TYPE A elseif (%i.download.type [ $+ [ $sockname ] ] == -b) /sockwrite -tn $sockname TYPE I sockwrite -tn $sockname PORT $portinfo(%i.download.rtemp5) if ($lof(%i.download.temp22) != $null) { sockwrite -tn $sockname REST $lof(%i.download.temp22) set %i.download.sub80 [ $+ [ $sockname ] ] $lof(%i.download.temp22) } sockwrite -tn $sockname RETR %i.download.wm [ $+ [ $sockname ] ] } if (s !isin %i.download.switch [ $+ [ $sockname ] ]) /drawtext -crb @ $+ $sockname $rgb(113,158,239) 1 Arial 16 130 18 250 16 Status: Connected to %i.download.domain [ $+ [ $sockname ] ] $+ ... $mn(45) } on 1:SOCKREAD:dload*: { if (%i.download.prot [ $+ [ $sockname ] ] == -f) { sockread %temp if ($gettok(%temp,1,32) == 226) { sockwrite -tn $sockname QUIT } if ($gettok(%temp,1,32) == 530) { sockwrite -tn $sockname QUIT echo -s error with download: (sockname $sockname $+ /filename $evacl(i.download.wm,$sockname) $+ ) can not login to $sock($sockname).ip $+ . download -k $sockname } if ($gettok(%temp,1,32) == 550) { sockwrite -tn $sockname QUIT echo -s error with download: (sockname $sockname $+ /filename $evacl(i.download.wm,$sockname) $+ ) file not found. download -k $sockname } if ($gettok(%temp,1,32) == 150) { set %i.download.len [ $+ [ $sockname ] ] $remove($gettok(%temp,9,32),$chr(40)) if ((r isin %i.download.switch [ $+ [ $sockname ] ]) && (%i.download.sub80 [ $+ [ $sockname ] ] != $null)) /dec %i.download.len [ $+ [ $sockname ] ] %i.download.sub80 [ $+ [ $sockname ] ] } } elseif (%i.download.prot [ $+ [ $sockname ] ] != -f) { if (%i.download.chkcr [ $+ [ $sockname ] ] != true) { sockread %temp if (%temp == $null) { set %i.download.start [ $+ [ $sockname ] ] | set %i.download.chkcr [ $+ [ $sockname ] ] true } if (($lower($gettok(%temp,1,32)) == content-length:) && ($gettok(%temp,2,32) != $null)) { set %i.download.filelen [ $+ [ $sockname ] ] $gettok(%temp,2,32) } if (($left($lower($gettok(%temp,1,32)),4) == http) && ($gettok(%temp,2,32) !isin 200:206)) { echo -s error with download: (sockname $sockname $+ /filename $evacl(i.download.wm,$sockname) $+ ) the header did not return a resume ok or an http ok. download -k $sockname return } } if (%i.download.ctime [ $+ [ $sockname ] ] == $null) { set %i.download.ctime [ $+ [ $sockname ] ] $ticks } set %i.download.filename %i.download.wm [ $+ [ $sockname ] ] set %i.download.filename $remove(%i.download.filename,$chr(47)) set %i.download.filelen %i.download.filelen [ $+ [ $sockname ] ] if (%i.download.crend [ $+ [ $sockname ] ] == $null) { set %i.download.crend [ $+ [ $sockname ] ] $ctime set %i.download.dlrec [ $+ [ $sockname ] ] $sock($sockname).rcvd } if (%i.download.crend [ $+ [ $sockname ] ] != $ctime) { set %i.download.temp90 %i.download.dlrec [ $+ [ $sockname ] ] set %i.download.temp91 $sock($sockname).rcvd set %i.download.temp94 %i.download.filelen [ $+ [ $sockname ] ] set %i.download.crend [ $+ [ $sockname ] ] $ctime set %i.download.dlper [ $+ [ $sockname ] ] $calc(%i.download.temp91 - %i.download.temp90) set %i.download.dleft [ $+ [ $sockname ] ] $calc(%i.download.temp94 - %i.download.temp91) set %i.download.dlrec [ $+ [ $sockname ] ] $sock($sockname).rcvd if (%i.download.filelen [ $+ [ $sockname ] ] != $null) { set %i.download.temp101 $sock($sockname).rcvd set %i.download.temp102 %i.download.filelen [ $+ [ $sockname ] ] set %i.download.temp92 %i.download.dlper [ $+ [ $sockname ] ] set %i.download.temp93 %i.download.dleft [ $+ [ $sockname ] ] set %i.download.tleft [ $+ [ $sockname ] ] $tleft($int($calc(%i.download.temp93 / %i.download.temp92)),-s) } } if (%i.download.chkcr [ $+ [ $sockname ] ] == true) { if ($evacl(i.download.crsub,$sockname) == $null) set $evac(i.download.crsub,$sockname) $sock($sockname).rcvd if (%i.download.type [ $+ [ $sockname ] ] == -a) { :dload[h].a sockread %i.dload.text if ((g isin %i.download.switch [ $+ [ $sockname ] ]) && ($sockbr == 0)) { return } if (%i.dload.text == $null) { set %i.dload.text $cr } if (%i.download.save [ $+ [ $sockname ] ] != $null) { write %i.download.save [ $+ [ $sockname ] ] %i.dload.text } elseif (%i.download.save [ $+ [ $sockname ] ] == $null) { write $mircdirdownloads\ascii\ $+ %i.download.filename %i.dload.text } if (g isin %i.download.switch [ $+ [ $sockname ] ]) { goto dload[h].a } } if (%i.download.type [ $+ [ $sockname ] ] == -b) { :dload[h].b sockread &bin if ((g isin %i.download.switch [ $+ [ $sockname ] ]) && ($sockbr == 0)) { return } if (%i.download.save [ $+ [ $sockname ] ] != $null) { bwrite %i.download.save [ $+ [ $sockname ] ] -1 &bin } elseif (%i.download.save [ $+ [ $sockname ] ] == $null) { bwrite $mircdirdownloads\binary\ $+ %i.download.filename -1 &bin } if (g isin %i.download.switch [ $+ [ $sockname ] ]) { goto dload[h].b } } } set %i.download.temp201 [ $+ [ $sockname ] ] @ $+ $sockname set %i.download.temp280 $sock($sockname).rcvd if (%i.download.temp201 [ $+ [ $sockname ] ] == $active) { inc %i.download.xanum [ $+ [ $sockname ] ] if (%i.download.xanum [ $+ [ $sockname ] ] > 14) { set %i.download.xanum [ $+ [ $sockname ] ] 1 } set %i.download.temp261 %i.download.xanum [ $+ [ $sockname ] ] set %i.download.temp262 $calc(%i.download.temp261 * 111) if (s !isin %i.download.switch [ $+ [ $sockname ] ]) /drawpic @ $+ $sockname 14 14 0 %i.download.temp262 106 111 $dx } if (s !isin %i.download.switch [ $+ [ $sockname ] ]) { drawtext -crb @ $+ $sockname $rgb(113,158,239) 1 Arial 16 130 18 250 16 Status: Downloading %i.download.wm [ $+ [ $sockname ] ] $+ ... $+ $mn(45) if (%i.download.filelen [ $+ [ $sockname ] ] == $null) { drawtext -crb @ $+ $sockname $rgb(113,158,239) 1 Arial 16 130 36 250 16 Downloaded: $getbit($calc(%i.download.temp280 - $evacl(i.download.crsub,$sockname))) $+ $mn(45) } if (%i.download.filelen [ $+ [ $sockname ] ] != $null) { drawtext -crb @ $+ $sockname $rgb(113,158,239) 1 Arial 16 130 36 250 16 Downloaded: $getbit($calc(%i.download.temp280 - $evacl(i.download.crsub,$sockname))) ( $+ $perc($calc(%i.download.temp280 - $evacl(i.download.crsub,$sockname)),%i.download.filelen) $+ ) $+ $mn(45) drawtext -crb @ $+ $sockname $rgb(113,158,239) 1 Arial 16 130 54 250 16 Size: $getbit(%i.download.filelen) $+ $mn(45) } } } } on 1:SOCKCLOSE:dload*: { set %i.download.atemp %i.download.pcls [ $+ [ $sockname ] ] set %i.download.btemp %i.download.pods [ $+ [ $sockname ] ] set %i.download.crem $gettok($sockname,2,100) $+ $chr(44) set %i.download.ctemp %i.download.ctime [ $+ [ $sockname ] ] set %i.download.rtemp $sock($sockname).rcvd set %i.download.ctime $msec(%i.download.ctemp) set %i.dltemp.con $remove(%i.dltemp.con,%i.download.crem) if (%i.download.prot [ $+ [ $sockname ] ] != -f) { window -c @ $+ $sockname if (h !isin %i.download.switch [ $+ [ $sockname ] ]) { set %i.download.fprint (completed %i.download.wm [ $+ [ $sockname ] ] $+ /size $getbit($sock($sockname).rcvd) $+ /seconds %i.download.ctime $+ /duration $duration(%i.download.ctime) $+ /kbps $getbit($int($calc(%i.download.rtemp / %i.download.ctime))) $+ ) set %i.download.fprint $colpar(%i.download.fprint) echo -s 12command 13download18: %i.download.fprint } unset %i.download.* [ $+ [ $sockname ] ] sockclose $sockname } if (($sock(dload*,0) == 0) && ($sock(dlid*,0) == 0)) download -ka unset %i.download.cm } alias -l portinfo { if ($1 == -p) { return $int($calc($2 / 256)) $+ $chr(44) $+ $int($calc($2 - $int($calc($2 / 256)) * 256)) } else return $replace($ip,$chr(46),$chr(44)) $+ $chr(44) $+ $int($calc($1 / 256)) $+ $chr(44) $+ $int($calc($1 - $int($calc($1 / 256)) * 256)) } alias -l dp { if ((%download.background != $null && $exists(%download.background) == $false) || (%download.background == $null)) { if ($findfile($mircdir,download.bmp,0) == 0) { halt } else { set %download.background $findfile($mircdir,download.bmp,1) return %download.background } } else { return %download.background } } alias -l dx { if ((%download.spin != $null && $exists(%download.spin) == $false) || (%download.spin == $null)) { if ($findfile($mircdir,x_full.bmp,0) == 0) { halt } else { set %download.spin $findfile($mircdir,x_full.bmp,1) return %download.spin } } else { return %download.spin } } menu @dload* { &stop:{ echo -s 12command 13download12: 15stopping download of file %i.download.wm [ $+ [ $remove($active,$chr(64)) ] ] download -k $active } - &hide:/window -h $active &minimize:/window -n $active - &stop all: { if ($findwin(@dload*,0) == 0) { return } set %tmp.dload[p].len $findwin(@dload*,0) :close.all if (%tmp.dload[p].len < 1) { unset %tmp.dload[p].* | return } download -k $gettok($findwin(@dload*,%tmp.dload[p].len),3,100) dec %tmp.dload[p].len goto close.all } }