| SeRDaR406 | 21 Temmuz 2009 01:59 | HTTP Downloader v1.2 by ^BeAsT^ Kod:
; HTTP Downloader v1.2 by ^BeAsT^
;===============================
; /download komutu:
; /download komutu dosya indirme olayını başlatan komutdur.
; Not: URL'den indirilen dosya, indirileceği klasöre URL'deki adı ile indirilir.
; Kullanımı: /download [-o] <isim> <url> <klasör>
; Örnek: /download mIRC http://www.mirc.co.za/download/mirc603.exe C:\mIRC\Download\
;
; -o parametresi İndirilecek dosyanın adı ile indirilecek klasörde aynı isimde bir dosya daha varsa, onun üzerine yazar(indirir/kaydeder).
; Not: Bir download'ı(indirmeyi) sonlandırmak/iptal etmek istiyorsanız: /close -d <isim> komutunu kullanabilirsiniz.
;
; $download(<name/N>) tanımlayıcısı:
; Bu tanımlayıcı ile download'lar(indirmeler) hakkında bilgiler alabilirsiniz.
; Özellikler: ip, status, url, file, type, size, rcvd, cps, pc, secs
; $download(0) Toplam indirilme sayısını verir.
; $download(1) 1. download'ın adını verir.
; $download(2).file 2. download olayında indirilen dosyanın adını verir.
; $download(2).rcvd 2.download olayında alınan byte değerini verir.
;
; Events(Olaylar):
; Download olayı başarılı bir şekilde tamamlandığında bu event'ı kullanacaksınız.
; Kullanımı: on *:SIGNAL:download_complete:<komut>
; Örnek: on *:SIGNAL:download_complete:echo -s * Tamamlandı: $download($1).file
;
; Download geçersiz olduğunda kullanacağınız event:
; Kullanımı: on *:SIGNAL:download_fail:<komut>
; Örnek: on *:SIGNAL:download_fail:echo -s * Geçersiz download: $download($1).file - $2-
alias download {
if (!$isid) {
var %4 = $iif($1 == -o,$true)
if (%4) { tokenize 32 $2- }
var %1 = download $+ $1,%2 = $longfn($3-)
if (!$3) { var %3 = insufficient parameters }
elseif ($sock(%1)) { var %3 = $+(',$1,') name in use }
elseif (!$isdir(%2)) { var %3 = no such dir $+(',%2,') }
if (%3) { if ($show) { echo $color(info) -se * /download: %3 } | return }
unset % [ $+ [ %1 $+ .* ] ]
set % [ $+ [ %1 $+ .file ] ] $+(%2,$iif($right(%2,1) != $chr(92),$chr(92)),$gettok($2,-1,47))
set % [ $+ [ %1 $+ .url ] ] http:// $+ $remove($2,http://))
set % [ $+ [ %1 $+ .ctime ] ] $ctime 0
set % [ $+ [ %1 $+ .status ] ] Connecting
if (%4) { .remove $+(",$dl.var(%1,file),") }
sockopen %1 $gettok($remove($2,http://),1,47) 80
}
else {
if ($1 == 0) { return $sock(download*,0) }
if ($iif($1 isnum,$sock(download*,$1),$sock(download $+ $1))) {
var %1 = $ifmatch,%2 = $dl.var(%1,file),%3 = $dl.var(%1,size),%4 = $file(%2).size
if (!$prop) { return $right(%1,-8) }
elseif ($prop == ip) { return $sock(%1).ip }
elseif ($prop == status) { return $dl.var(%1,status) }
elseif ($prop == url) { return $dl.var(%1,url) }
elseif ($prop == file) { return %2 }
elseif ($prop == type) { return $dl.var(%1,type) }
elseif ($prop == size) { return %3 }
elseif ($prop == rcvd) { return %4 }
elseif ($prop == cps) { return $int($calc(%4 / ($ctime - $dl.var(%1,ctime,2)))) }
elseif ($prop == pc) { return $int($calc($file(%2).size * 100 / %3)) }
elseif ($prop == secs) { return $calc($ctime - $dl.var(%1,ctime,1)) }
}
}
}
alias -l dl.var { return $gettok(% [ $+ [ $+($1,.,$2) ] ],$iif(!$3,1-,$3),32) }
alias -l dl.fail { var %1 = $right($1,-8) | .signal -n download_fail %1 $2- | close -d %1 }
alias -l dl.httpcode {
var %1 = $1 | goto %1
:100 | return Continue
:101 | return Switching Protocols
:200 | return OK
:201 | return Created
:202 | return Accepted
:203 | return Non-Authoritative Information
:204 | return No Content
:205 | return Reset Content
:206 | return Partial Content
:300 | return Multiple Choices
:301 | return Moved Permanently
:302 | return Moved Temporarily
:303 | return See Other
:304 | return Not Modified
:305 | return Use Proxy
:400 | return Bad Request
:401 | return Unauthorized
:402 | return Payment Required
:403 | return Forbidden
:404 | return Not Found
:405 | return Method Not Allowed
:406 | return Not Acceptable
:407 | return Proxy Authentication Required
:408 | return Request Time-out
:409 | return Conflict
:410 | return Gone
:411 | return Length Required
:412 | return Precondition Failed
:413 | return Request Entity Too Large
:414 | return Request-URI Too Large
:415 | return Unsupported Media Type
:416 | return Requested Range Not Satisfiable
:500 | return Internal Server Error
:501 | return Not Implemented
:502 | return Bad Gateway
:503 | return Service Unavailable
:504 | return Gateway Time-out
:505 | return HTTP Version not supported
:%1 | return
}
alias close {
if ($1 == -d) {
var %1 = download $+ $2
if ($sock(%1)) { unset % [ $+ [ %1 $+ .* ] ] | sockclose %1 }
}
else { close $1- }
}
on *:sockopen:download*:{
if ($sockerr) { dl.fail $sockname Unable to Connect | return }
var %1 = $dl.var($sockname,url),%2 = $dl.var($sockname,file)
set % [ $+ [ $sockname $+ .status ] ] Requesting File
sockwrite -tn $sockname GET %1 HTTP/1.1
sockwrite -tn $sockname Host: $gettok($remove(%1,http://),1,47)
sockwrite -tn $sockname Accept: *.*, */*
sockwrite -tn $sockname Range: $+(bytes=,$iif($exists(%2),$file(%2).size,0),-)
sockwrite -tn $sockname Connection: close
sockwrite -tn $sockname $crlf
}
on *:sockclose:download*:{ if ($dl.var($sockname,status) != done) { dl.fail $sockname Disconnected } }
on *:sockread:download*:{
if ($sockerr) { dl.fail $sockname Disconnected | return }
if ($dl.var($sockname,status) != downloading) {
var %1 | sockread %1 | tokenize 32 %1
if ($1 == HTTP/1.1) { if ($2 != 200 && $2 != 206) { dl.fail $sockname $iif($dl.httpcode($2),$ifmatch,$3-) } }
elseif ($1 == Content-Range:) { set % [ $+ [ $sockname $+ .size ] ] $gettok($3,-1,47) }
elseif ($1 == Content-Type:) { set % [ $+ [ $sockname $+ .type ] ] $2- }
elseif (!$1) {
set % [ $+ [ $sockname $+ .ctime ] ] $dl.var($sockname,ctime,1) $ctime
set % [ $+ [ $sockname $+ .status ] ] Downloading
return
}
}
else {
var %1 = $dl.var($sockname,file)
:sockread
sockread &1
if (!$sockbr) { return }
bwrite $+(",%1,") -1 &1
unset % [ $+ [ $sockname $+ .resume ] ]
if ($file(%1).size < $dl.var($sockname,size)) { goto sockread }
else {
var %1 = $right($sockname,-8),%2 = $dl.var($sockname,file)
set % [ $+ [ $sockname $+ .status ] ] Done
.signal -n download_complete %1
close -d %1
}
}
}
on *:exit:{ unset %download* | sockclose download* }
on *:unload:{ unset %download* | sockclose download* }
;Dosya sonu. |