FTP Upload v0.2a

L4roXyL

Profesyonel Üye
Katılım
16 Eki 2011
Mesajlar
124
Beğeniler
1
#1
Yazan: L4roXyL - Hasan AYDENİZ
Kod: FTP Upload v0.2a
Tarih: 20/11/2011
Not: http://mIRCScripting.net dökümanıdır.


Açıklama: Kodun çalışma şekli, Türkiye'de her yerde bilinen ve kullanılan (ezbere tek yol olarak bilinen) /write sistemi ile değildir. Tamamen socket bağlantı, FTP Raw Command-ları ve ftp passive(pasif modda) işlem yaptırarak, işlem yapılır. Yetkiniz dahilindeki herhangi bir FTP sunucusuna istediğiniz dosyayı yükleyebilirsiniz. Aynı zamanda meraklısına iki farklı kullanım şekli sundum. İsteyen dialog-tablo üzerinden, isteyen direkt komut girerek custom-window üzerinden kodu çalıştırabilir. Kod içerisinde Binary files dosya işleme sistemini kullandım.(file handling ilede yapılabilir) Ek olarak upload edilecek dosya, boyutuna göre parça transfer etme işlemini 3 parçaya böldüm. Kısacası düşük boyutlu dosyalar ile yüksek boyutlu dosyaları upload ederken, hız konusunda herhangi bir sıkıntı yaşanmayacaktır.

Ek açıklama: Custom window-da dosya upload ederken, sonlandırmak için pencereyi kapatın veya Pause/Break tuşuna basın.

Kullanım şekli: /sendfile <d(ialog)|c(ommand)> <address> <username> <password> <dizin> <port>
Dialog için: /sendfile d
Pencere için: /sendfile c <address> <username> <password> <dizin> <port>
Pencere örnek: /sendfile c mircscripting.net kullanıcı_adım şifrem /www 21


Dialog menüsü resmi:




Custom window resmi:




-

Kod:
;-----------------------------------------------------------------------------------
;FTP upload v0.2a
;l4roxyl code series - 2011,,.
;use: /sendfile <d(ialog)|c(ommand)> <address> <username> <password> <dizin> <port|21>
;date: 20/11/2011
;-----------------------------------------------------------------------------------
;started code,,.
alias -l _input $iif($input($1-,wo,Hata) = $true,dialog -v ftp_,dialog -v ftp_) | halt
alias _did $iif($dialog(ftp_),did -ra ftp_ 15 $1-,$iif($window(@ftp_upload),aline -c2 $v1 +++ $1-))
alias _len if ($len($1-) >= 20) { return $left($1-,20) $+ .. } | else return $1-
alias _did2 if ($dialog(ftp_)) did - $+ $1 ftp_ 5-9,13,14
alias _file_byte {
  var %_. = $file($1).size
  if (%_. < 1048576) return 9182
  if (%_. > 1048576 && %_. < 3145728) return 18364
  if (%_. > 3145728) return 55092
}
on *:keydown:@ftp_upload:*: {
  if ($keyval = 19) {
    $iif($sock(ftp),sockclose ftp)
    $iif($sock(ftp2),sockclose ftp2)
    $iif($hget(_ftp),hfree _ftp)
    unset %_sfile
    window -c $target
  }
}
on *:load: {
  var %e = echo -ac info +++
  %e FTP Upload v0.2a yüklendi.
  %e Kullanım: /sendfile <d(ialog)|c(ommand)> <address> <username> <password> <dizin> <port>
  %e Dialog için: /sendfile d
  %e Pencere için: /sendfile c <address> <username> <password> <dizin> <port>
  %e Pencere örnek: /sendfile c mircscripting.net kullanıcı_adım şifrem /public_ftp 21
}
on *:close:@ftp_upload: {
  $iif($sock(ftp),sockclose ftp)
  $iif($sock(ftp2),sockclose ftp2)
  $iif($hget(_ftp),hfree _ftp)
  unset %_sfile
}
dialog -l ftp_ {
  title "FTP Upload"
  size -1 -1 94 117
  option dbu
  text "FTP Adresi:", 1, 5 7 34 8
  text "Kullanıcı Adı:", 2, 5 17 34 8
  text "Şifre/login:", 3, 5 27 34 8
  text "Port(21):", 4, 5 37 34 8
  edit "", 5, 41 6 50 10, autohs
  edit "", 6, 41 16 50 10
  edit "", 7, 41 26 50 10, pass
  edit "", 8, 41 36 50 10
  button "Gönderilecek Dosyayı Seç", 9, 4 47 86 10, flat
  text "", 10, 4 60 86 8, center
  text "Hedef Klasör:", 12, 5 71 34 8
  edit "", 13, 41 70 50 10
  button "Karşıya Yükle", 14, 4 82 86 10, flat
  text "", 15, 4 106 86 8, center
  button "İptal", 16, 4 94 86 10, flat
}
alias sendfile {
  if (!$1) {
    echo -aec info +++ Err: /sendfile <d(ialog)|c(ommand)> <address> <username> <password> [port]
    return
  }
  if ($sock(ftp)) sockclose ftp
  if ($sock(ftp2)) sockclose ftp2
  if ($1 = d) $iif(!$dialog(ftp_),dialog -mdi ftp_ ftp_,_input Dialog zaten açık.) 
  if ($1 = c) {
    if (!$6) {
      $iif($dialog(_ftp),dialog -c _ftp)
      echo -aec info +++ Err: /sendfile <d(ialog)|c(ommand)> <address> <username> <password> <dizin> <port>
      return
    }
    $iif(!$window(@ftp_upload),window -aCldk0 +l @ftp_upload -1 -1 300 300)
    $iif($window(@ftp_upload),clear $v1)
    $iif($dialog(ftp_),dialog -c $v1 $v1)
    %_sfile = $sfile($mircdir,Gönderilecek dosyayı seç,Seç)
    if (!%_sfile) { 
      if ($window(@ftp_upload)) aline -c2 @ftp_upload Gönderilecek dosya seçilmedi.
      return
    }
    else {
      sockopen ftp $2 $iif($6,$6,21)
      var %_h = hadd -m _ftp
      %_h _user $3
      %_h _pass $4
      %_h _file $shortfn(%_sfile)
      %_h dir $iif($5,$5,/)
    }
  }
}
on *:dialog:ftp_:*:*: {
  if ($devent = close) {
    $iif($sock(ftp),sockclose ftp)
    $iif($sock(ftp2),sockclose ftp2)
    $iif($hget(_ftp),hfree _ftp)
    unset %_sfile
  }
  if ($devent = init) {
    $iif($window(@ftp_upload),window -c $v1)
    did -a $dname 10 Gönderilecek dosya seçilmedi.
    did -a $dname 15 Durum: Aktarım yok.
    did -a $dname 8 21
  }
  if ($devent = sclick) {
    if ($did = 16) {
      $iif($sock(ftp),sockclose ftp)
      $iif($sock(ftp2),sockclose ftp2)
      $iif($hget(_ftp),hfree _ftp)
      _did2 b
      dialog -c ftp_ ftp_
    }
    if ($did = 9) {
      %_sfile = $sfile($mircdir,Gönderilecek dosyayı seç,Seç)
      if (!%_sfile) { 
        did -a $dname 10 Gönderilecek dosya seçilmedi.
        return
      }
      else did -ra $dname 10 Dosya: $_len($nopath(%_sfile))
    }
    if ($did = 14) {
      if (!$did($dname,5)) _input Adresi giriniz. $crlf $+ Örnek: mircscripting.net
      if (!$did($dname,6)) _input Kullanıcı adını girin.
      if (!$did($dname,7)) _input Şifre girin.
      if (!$did($dname,8)) {
        hadd -m _ftp port 21
        did -a $dname 8 21
      } 
      else {
        if ($did($dname,8) !isnum) _input Port sadece rakamdan oluşur. $crlf $+ Örneğin: FTP için 21
      }
      if (!$did($dname,13)) _input Hedef klasör seçin. $crlf $+ Örnek: /www - /public_ftp - Anadizin için: /
      if (!%_sfile) _input Gönderilecek dosyayı seçin.
      if (%_sfile && $did($dname,5) && $did($dname,6) && $did($dname,7) && $did($dname,8) && $did($dname,13)) {
        $iif($sock(ftp),sockclose ftp)
        $iif($sock(ftp2),sockclose ftp2)
        $iif($hget(_ftp),hfree _ftp)
        hadd -m _ftp _file $shortfn(%_sfile)
        hadd -m _ftp address $did($dname,5)
        hadd -m _ftp _user $did($dname,6)
        hadd -m _ftp _pass $did($dname,7)
        hadd -m _ftp port $did($dname,8)
        hadd -m _ftp dir $did($dname,13)
        sockopen ftp $hget(_ftp,address) $iif($hget(_ftp,port),$v1,21)
        did -ra $dname 15 Durum: Bağlantı kuruluyor..
        _did2 b
      }
    }
  }
}
on *:sockopen:ftp: {
  if ($sockerr) {
    _did Durum: Bağlantı başarısız.
    _did2 e
    return
  }
}
on *:sockread:ftp: {
  if ($sockerr) {
    _did2 e
    _did Bağlantı başarısız.
    return
  }
  sockread %_data
  while ($sockbr) {
    var %_raw = $token(%_data,1,32)
    if (%_raw = 220) {
      sockwrite -n $sockname user $hget(_ftp,_user)
      _did Kullanıcı adı girildi.
    }
    if (%_raw = 331) { 
      sockwrite -n $sockname pass $hget(_ftp,_pass)
      _did Şifre girildi, bekleniyor..
    }
    if (%_raw = 230) {
      sockwrite -n $sockname TYPE I
      _did Bağlantı doğrulandı.
    }
    if (%_raw = 200) sockwrite -n $sockname PASV
    if (%_raw = 227) {
      _did Pasif moda geçildi.
      var %s = $remove($token(%_data,-1,32),$chr(40),$chr(41))
      var %port = $token(%_data,5,44), %port2 = $token(%_data,6,44)
      var %port3 = $calc((%port * 2^8) + %port2)
      var %s = $replace($token(%s,1-4,44),$chr(44),$chr(46))
      sockopen ftp2 %s %port3
      sockwrite -n $sockname CWD $iif($hget(_ftp,dir),$v1,/)
    }
    if (%_raw = 250) { 
      sockwrite -n $sockname STOR $nopath($longfn($hget(_ftp,_file))) 
      _did Dizin seçildi: $token(%_data,-1,32)
      if ($window(@ftp_upload)) { 
        aline -c2 $v1 +++ Dosya: $_len($nopath(%_sfile)) / $bytes($file(%_sfile).size).suf
      }
    }
    if (%_raw = 150) {
      _did Veri gönderme kabul edildi.
      %=t = $ctime
      var %_pos = 0, %file = $hget(_ftp,_file)
      bread %file %_pos $_file_byte(%file) &_file
      sockwrite ftp2 &_file
      hadd -m pos pos $calc(%pos + $bvar(&_file,0))
    }
    if (%_raw = 530) {
      _did Kimlik doğrulama başarısız.
      _did2 e
      .timer 1 2 _did Bağlantılar koparıldı.
    }
    if (%_raw = 226) { 
      _did Dosya yüklendi.
      _did Yüklenme süresi: $duration($calc($ctime - %=t),3)
      _did2 e
      $iif($hget(_ftp),hfree $v1)
    }
    if (%_raw = 221) .timer 1 2 _did Çıkış yapıldı.
    sockread %_data
  }
  if (%_raw = 550) {
    _did Dizin bulunamadı. 
    _did2 e
    $iif($sock(ftp),sockclose ftp)
    $iif($sock(ftp2),sockclose ftp2)
    _did Bağlantı koparıldı.
  }
}
on *:sockwrite:ftp2:{
  if ($sockerr) {
    _did Aktarımda sorun oluştu.
    _did2 e
    return 
  }
  var %_pos = $hget(pos,pos), %_file = $hget(_ftp,_file)
  var %_p1 = $+(%,$round($calc((%_pos * 100)/ $file(%_file).size),1))
  var %_size = $bytes(%_pos,3).suf / $bytes($file(%_file).size,3).suf 
  if ($dialog(ftp_)) did -ra ftp_ 15 Yük.. ( $+ %_p1 $+ ) - %_size
  if ($window(@ftp_upload)) {
    var %l = $line($v1,0) - 1
    rline -c2 $v1 $calc(%l +1) ++++ Yük.. ( $+ %_p1 $+ ) - %_size
  }
  if (%_pos < $file(%_file).size) {
    bread %_file %_pos $_file_byte(%_file) &_file
    sockwrite $sockname &_file
    hadd -m pos pos $calc(%_pos + $bvar(&_file,0))
  }
  else { 
    sockclose $sockname 
    sockwrite -n ftp QUIT 
  }
}
;end code,,.

Not: İleriki zamanlarda FTP socket bağlantıları hakkında geniş bir ders yazabilirim vaktim olursa.
Not2: Bu kod işlev yapma amacı ile yazıldığından herhangi bir görsellik öğesi aramamanız tavsiye edilir.
Not3: Birden fazla karmaşık veri işleyicileri ile yazıldığından, editleme yapmanız tavsiye edilmez. Aksi taktirde kodu bozabilirsiniz. (normalde editlemeniz beni ilgilendirmez)
 

Bu konuyu okuyanlar (Üyeler: 1, Misafirler: 0)

Üst