/* ** ** /download by hixxy (hixxy@mirc.net) for mIRC 6.17 or above. ** ** ** What the script does ** ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ ** ** This script will let you download files from the internet using mIRC. ** ** To use some one of the script's features you will need to install SSL for mIRC. ** For help installing OpenSSL please take a look at this page: http://www.mirc.co.uk/ssl.html ** ** How to load ** ŻŻŻŻŻŻŻŻŻŻŻ ** ** You can load this script by typing /load -rs . If you saved the file in your mIRC directory you can just do /load -rs download.mrc ** You can also just copy/paste it into remote from a website and then hit the OK button. ** ** How to use ** ŻŻŻŻŻŻŻŻŻŻ ** ** NOTE: You can use this to download from either HTTP or FTP servers. ** ** The syntax is one of the following. ** /download <-cpr> ** /download [-eo] ** ** The -cpr switches stand for cancel, pause and resume respectively. You can only use these on existing downloads. ** ** The -e switch means you want to create an SSL socket. ** The -o switch means you want to overwrite if it exists rather than spitting out an error. ** ** The script files off various signals as it is downloading the file. These are all sent to the 'download' signal with parameters being: ** ** begin - when the download begins. ** cancel - when the download is cancelled. ** end - when the download finishes. ** error - when there's a socket error. ** notfound - could not find the requested file. ** pause - when the download is paused. ** progress - when the snippet has downloaded another chunk of the file. is the amount of bytes downloaded. ** resume - when the download is resumed. ** size - the size of the file has been acquired. ** ** FTP only signals: ** ** cannotassignaddress - the server sent a 425 error. ** requireslogin - the server does not allow anonymous access. ** ** Contact ** ŻŻŻŻŻŻŻ ** ** If you have a feature suggestion, bug report or question, please send an email to hixxy@mirc.net ** If you got the script from a scripting website and I (hixxy) submitted the code, you may also leave feedback on the script's comment page. ** */ alias -l raisemessage { if ($line($active,0)) && (($show) || ($1 == -e)) { linesep -a } echo $colour(info) -a $+ $iif($1 != -e,q $1-,$chr(32) $2-) if ($show) || ($1 == -e) { linesep -a } halt } alias download { var %overwrite, %ssl if ($isid) { raisemessage -e * /download: Should be called as a command } if ($0 < 3) && (!$istok(-c -p -r,$1,32)) { raisemessage -e * /download: Insufficient parameters } if (-* iswm $1) { if ((c isincs $1) || (p isincs $1) || (r isincs $1)) && (!$sock(download_ $+ $2)) { raisemessage -e * /download: No such download ' $+ $2' } if (c isincs $1) { if ($isfile($gettok($sock(download_ $+ $2).mark,3-,32))) { .remove $qt($gettok($sock(download_ $+ $2).mark,3-,32)) } if (http:* iswm $gettok($sock(download_ $+ $2).mark,2,32)) { sockclose download_ $+ $2 .signal download $2 cancel raisemessage * /download: Cancelled download ' $+ $2' } elseif (ftp:* iswm $gettok($sock(download_ $+ $2).mark,2,32)) { sockclose download_ $+ $2 sockclose ftp_download_ $+ $2 sockclose ftpc_download_ $+ $2 .signal download $2 cancel raisemessage * /download: Cancelled download ' $+ $2' } } elseif (p isincs $1) { if (http:* iswm $gettok($sock(download_ $+ $2).mark,2,32)) && (!$sock(download_ $+ $2).pause) { sockpause download_ $+ $2 .signal download $2 pause raisemessage * /download: Paused download ' $+ $2' } elseif (ftp:* iswm $gettok($sock(download_ $+ $2).mark,2,32)) && (!$sock(download_ $+ $2).pause) { sockpause download_ $+ $2 if ($sock(ftpc_download_ $+ $2)) { sockpause ftpc_download_ $+ $2 } .signal download $2 pause raisemessage * /download: Paused download ' $+ $2' } } elseif (r isincs $1) { if (http:* iswm $gettok($sock(download_ $+ $2).mark,2,32)) && ($sock(download_ $+ $2).pause) { sockpause -r download_ $+ $2 .signal download $2 resume raisemessage * /download: Resumed download ' $+ $2' } elseif (ftp:* iswm $gettok($sock(download_ $+ $2).mark,2,32)) && ($sock(download_ $+ $2).pause) { sockpause -r download_ $+ $2 if ($sock(ftpc_download_ $+ $2)) { sockpause -r ftpc_download_ $+ $2 } .signal download $2 resume raisemessage * /download: Resumed download ' $+ $2' } } if (e isincs $1) { var %ssl = $true } if (o isincs $1) { var %overwrite = $true } tokenize 32 $2- } if ($sock(download_ $+ $1)) { raisemessage -e * /download: Download exists ' $+ $1' } if ($isfile($3-)) && (!%overwrite) { raisemessage -e * /download: File exists ' $+ $3-' } if ($nopath($3-) == $null) { raisemessage -e * /download: No filename supplied ' $+ $3-' } if ($nofile($3-) $+ $mkfn($nopath($3-)) != $3-) { raisemessage -e * /download: Filename not valid $+(',$nopath($3-),') } if (%ssl) && (!$sslready) { raisemessage -e * /download: SSL not ready } if (http:* !iswm $2) && (ftp:* !iswm $2) { raisemessage -e * /download: Invalid URL } var %port = $iif(http:* iswm $2,80,21) while (!$portfree(%port)) { inc %port } sockopen $iif(%ssl == $true,-e) download_ $+ $1 $gettok($2,2,47) %port sockmark download_ $+ $1 $false $2- raisemessage * /download: Downloading $2 to $3- } on *:sockopen:download_*:{ if ($sockerr) { .signal download $mid($sockname,10) error $sock($sockname).wserr $sock($sockname).wsmsg return } if (http:* iswm $gettok($sock($sockname).mark,2,32)) { sockwrite -n $sockname GET / $+ $gettok($gettok($sock($sockname).mark,2,32),3-,47) HTTP/1.1 sockwrite -n $sockname Host: $gettok($gettok($sock($sockname).mark,2,32),2,47) sockwrite -n $sockname Accept: */* sockwrite -n $sockname Connection: close sockwrite -n $sockname User-Agent: mIRC/ $+ $version sockwrite -n $sockname } } on *:sockread:download_*:{ if (http:* iswm $gettok($sock($sockname).mark,2,32)) { if ($gettok($sock($sockname).mark,1,32) == $false) { var %data sockread %data if (*404 not found* iswm %data) { .signal download $mid($sockname,10) notfound / $+ $gettok($gettok($sock($sockname).mark,2,32),3-,47) sockclose $sockname return } if (%data == $null) { sockmark $sockname $true $gettok($sock($sockname).mark,2-,32) .signal download $mid($sockname,10) begin } elseif (content-length: * iswm %data) { .signal download $mid($sockname,10) size $gettok(%data,2,32) } } else { sockread -f &data bwrite $qt($gettok($sock($sockname).mark,3-,32)) -1 -1 &data .signal download $mid($sockname,10) progress $sockbr } } else { var %data sockread %data tokenize 32 %data if ($1 == 150) { .signal download $mid($sockname,10) size $mid($gettok($1-,-2,32),2,-1) } elseif ($1-2 == 200 PORT) { sockwrite -n $sockname TYPE I } elseif ($1-2 == 200 TYPE) { sockwrite -n $sockname RETR $gettok($gettok($sock($sockname).mark,2,32),-1,47) } elseif ($1 == 220) { sockwrite -n $sockname USER anonymous } elseif ($1 == 226) { .signal download $mid($sockname,10) end sockclose $sockname sockclose ftp_ $+ $sockname sockclose ftpc_ $+ $sockname } elseif ($1 == 230) { if ($deltok($gettok($gettok($sock($sockname).mark,2,32),3-,47),-1,47) != $null) { sockwrite -n $sockname CWD / $+ $v1 } } elseif ($1 == 250) { socklisten ftp_download_ $+ $mid($sockname,10) 3762 sockmark ftp_download_ $+ $mid($sockname,10) $sock($sockname).mark sockwrite -n $sockname PORT $replace($sock(ftp_download_ $+ $mid($sockname,10)).ip,.,$chr(44)) $+ ,14,178 } elseif ($1 == 331) { sockwrite -n $sockname PASS ftpd } elseif ($1 == 425) { .signal download $mid($sockname,10) cannotassignaddress sockclose $sockname } elseif ($1 == 530) { .signal download $mid($sockname,10) requireslogin sockclose $sockname } elseif ($1 == 550) { .signal download $mid($sockname,10) notfound / $+ $gettok($gettok($sock($sockname).mark,2,32),3-,47) sockclose $sockname } } } on *:socklisten:ftp_download_*:{ sockaccept ftpc_ $+ $mid($sockname,5) sockmark ftpc_ $+ $mid($sockname,5) $sock($sockname).mark .signal download $mid($sockname,14) begin } on *:sockclose:download_*:{ .signal download $mid($sockname,10) end } on *:sockread:ftpc_*:{ sockread -f &data while ($sockbr) { bwrite $qt($gettok($sock($sockname).mark,3-,32)) -1 -1 &data .signal download $mid($sockname,15) progress $sockbr sockread -f &data } } on *:load:{ if ($version < 6.17) { !.echo -q $input(This script was created for mIRC version 6.17 or later $+ $chr(44) you are using $version,dho,Invalid version) .unload -rs $script } }