tcpfiletransfer 0.0.0 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/filetransfer_server +4 -0
- data/bin/sendfile +21 -0
- data/lib/filetransfer/ftserver.rb +28 -0
- data/lib/filetransfer/httpserver.rb +23 -0
- data/lib/filetransfer/notifier.rb +12 -0
- data/lib/filetransfer/server.rb +26 -0
- data/lib/filetransfer.rb +27 -0
- metadata +13 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e005ed341e7ad32bd25da861e12016086718770546fb67b2dc67d5f35482ba47
|
4
|
+
data.tar.gz: 6b5cf39b2487f212e312f7d08e50a694b55c19da06a616e05258d62730c613c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cece0bfbbb48a0f5822bd5ae2f40ff1cd3e380b7f9246da76c5397b338e6aa8bbda0c9ed24661ca2595265a53aecdc3767c1be262f7cb50d89360999c81e2293
|
7
|
+
data.tar.gz: 2c575003511c688ae6bc5d16c661feec4b9bc17b63a5b7c66a9dd205bb065bccb8686df523811ba1bff836396a981b5db845e769afb56239dd3c38602b8cc718
|
data/bin/sendfile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "filetransfer"
|
3
|
+
require "socket"
|
4
|
+
|
5
|
+
originalpath = ARGV[0] || `zenity --file-selection --title='Send File'`.chomp
|
6
|
+
|
7
|
+
path = originalpath.gsub(" ", "`")
|
8
|
+
name = originalpath.split("/").last.gsub(" ", "_")
|
9
|
+
|
10
|
+
recipient = ARGV[1] || `zenity --text='Recipient' --entry --title='Send File'`.chomp
|
11
|
+
|
12
|
+
server = TCPSocket.new("127.0.0.1", 8021)
|
13
|
+
server.puts "FTSUBMIT #{name} #{path}"
|
14
|
+
fileid = server.gets
|
15
|
+
|
16
|
+
file_size = '%.2f' % (File.size(originalpath).to_f / 2**20)
|
17
|
+
|
18
|
+
server = TCPSocket.new(recipient, 8021)
|
19
|
+
server.puts "FTSEND #{name.gsub(" ", "_")} #{file_size}MB #{fileid}"
|
20
|
+
|
21
|
+
exit
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module FileTransfer
|
2
|
+
module FTserver
|
3
|
+
def self.handle_client(initdata, client)
|
4
|
+
filename = initdata[1]
|
5
|
+
filesize = initdata[2]
|
6
|
+
fileid = initdata[3]
|
7
|
+
sock_domain, remote_port, remote_hostname, remote_ip = client.peeraddr
|
8
|
+
|
9
|
+
Notifier.file_transfer_notification(filename: filename, source: remote_hostname, filesize: filesize, accept_link: "http://#{remote_ip}:8021/#{fileid}")
|
10
|
+
client.close
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.handle_file_submission(initdata, client)
|
14
|
+
filename = initdata[1]
|
15
|
+
filepath = initdata[2].gsub("`", " ")
|
16
|
+
|
17
|
+
fileid = self.genfileid(6)
|
18
|
+
$active_transfers[?/ + fileid] = {name: filename, path: filepath}
|
19
|
+
client.puts fileid
|
20
|
+
client.close
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.genfileid(length)
|
24
|
+
((('a'..'z').to_a+('A'..'Z').to_a+(0..9).to_a*3).shuffle*((length.to_f/82.0).ceil))[0...length].join
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module FileTransfer
|
2
|
+
module HTTPserver
|
3
|
+
def self.handle_client(initdata, client)
|
4
|
+
path = initdata[1]
|
5
|
+
file = $active_transfers[path]
|
6
|
+
|
7
|
+
read = true
|
8
|
+
while read
|
9
|
+
x= client.gets
|
10
|
+
read = false if x == "\r\n" || !x
|
11
|
+
end
|
12
|
+
|
13
|
+
if !file
|
14
|
+
client.puts "HTTP/1.0 404\r\nContent-Type: text/plain\r\n\r\nFile not found."
|
15
|
+
client.close
|
16
|
+
return
|
17
|
+
end
|
18
|
+
client.puts "HTTP/1.0 200\r\nContent-Type: application/octet-stream\r\nContent-Disposition: attachment; filename=\"#{file[:name]}\"\r\n\r\n#{File.read(file[:path])}"
|
19
|
+
$active_transfers.delete(path)
|
20
|
+
client.close
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module FileTransfer
|
2
|
+
module Notifier
|
3
|
+
def self.file_transfer_notification(filename:, source:, filesize:, accept_link:)
|
4
|
+
notification_title = "Incoming file transfer from #{source}"
|
5
|
+
fileinfo = "Name: #{filename}\nSize: #{filesize}"
|
6
|
+
links = "Click to accept: #{accept_link}"
|
7
|
+
notification_body = "#{fileinfo}\n#{links}"
|
8
|
+
notification_command = "notify-send '#{notification_title}' \"#{notification_body}\""
|
9
|
+
system(notification_command)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module FileTransfer
|
2
|
+
class Server
|
3
|
+
def initialize(port:8021, listen:"0.0.0.0")
|
4
|
+
@port = port
|
5
|
+
@listen = listen
|
6
|
+
end
|
7
|
+
|
8
|
+
def start
|
9
|
+
@server = TCPServer.new(@listen, @port)
|
10
|
+
loop do
|
11
|
+
Thread.start(@server.accept) do |client|
|
12
|
+
initdata = client.gets.split(" ")
|
13
|
+
if initdata[0] == "GET"
|
14
|
+
HTTPserver.handle_client(initdata, client)
|
15
|
+
elsif initdata[0] == "FTSEND"
|
16
|
+
FTserver.handle_client(initdata, client)
|
17
|
+
elsif initdata[0] == "FTSUBMIT"
|
18
|
+
FTserver.handle_file_submission(initdata, client)
|
19
|
+
else
|
20
|
+
client.close
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/filetransfer.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
$active_transfers = {
|
2
|
+
}
|
3
|
+
|
4
|
+
module FileTransfer
|
5
|
+
@@files = ['server.rb', 'notifier.rb', 'httpserver.rb', 'ftserver.rb']
|
6
|
+
|
7
|
+
def self.version
|
8
|
+
"0.0.2"
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.file_paths(relative:false)
|
12
|
+
x = @@files.map do |f|
|
13
|
+
"#{"lib/" unless relative}filetransfer/#{f}"
|
14
|
+
end
|
15
|
+
|
16
|
+
if relative
|
17
|
+
return x
|
18
|
+
else
|
19
|
+
return x + ['lib/filetransfer.rb']
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
require "socket"
|
25
|
+
FileTransfer.file_paths(relative:true).each do |f|
|
26
|
+
require_relative f
|
27
|
+
end
|
metadata
CHANGED
@@ -1,21 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tcpfiletransfer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthias Lee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
11
|
+
date: 2023-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: An easy way to transfer files over TCP between linux computers
|
14
14
|
email: matthias@matthiasclee.com
|
15
|
-
executables:
|
15
|
+
executables:
|
16
|
+
- filetransfer_server
|
17
|
+
- sendfile
|
16
18
|
extensions: []
|
17
19
|
extra_rdoc_files: []
|
18
|
-
files:
|
20
|
+
files:
|
21
|
+
- bin/filetransfer_server
|
22
|
+
- bin/sendfile
|
23
|
+
- lib/filetransfer.rb
|
24
|
+
- lib/filetransfer/ftserver.rb
|
25
|
+
- lib/filetransfer/httpserver.rb
|
26
|
+
- lib/filetransfer/notifier.rb
|
27
|
+
- lib/filetransfer/server.rb
|
19
28
|
homepage: https://github.com/Matthiasclee/filetransfer
|
20
29
|
licenses: []
|
21
30
|
metadata: {}
|