comparison bin/ed2k @ 4:94ee419ad047

Added bin-ec - a collection of scripts.
author Edho Prima Arief <me@myconan.net>
date Sat, 10 Jul 2010 12:38:52 +0000
parents
children bcdf320dabf4
comparison
equal deleted inserted replaced
3:39ef7f7236fc 4:94ee419ad047
1 #!/usr/bin/env ruby
2 require 'openssl'
3
4 def file_ed2k(file_name, output_mode = "hash")
5 ed2k_block = 9500*1024 #ed2k block size is 9500 KiB
6 ed2k_hash = ""
7 file = File.open(file_name, 'rb')
8 file_size = file.stat.size #while at it, fetch the size of the file
9 while (block = file.read(ed2k_block)) do
10 ed2k_hash << OpenSSL::Digest::MD4.digest(block) #hashes are concatenated md4 per block size for ed2k hash
11 end
12 ed2k_hash << OpenSSL::Digest::MD4.digest("") if file_size % ed2k_block == 0 #on size of modulo block size, append another md4 hash of a blank string
13 file.close
14 ed2k_hash = OpenSSL::Digest::MD4.hexdigest(ed2k_hash) #finally
15 return case output_mode #there are 2 modes, just the has, or complete with link.
16 when "hash"
17 ed2k_hash
18 when "link"
19 "ed2k://|file|#{File.basename(file_name)}|#{file_size}|#{ed2k_hash}|"
20 end
21 end
22
23 ARGV.each do |file_name|
24 next unless File.file?(file_name) and File.readable?(file_name)
25 printf("%s\n", file_ed2k(file_name,"link"))
26 end