rncp 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.yardopts +1 -0
- data/CHANGELOG +6 -0
- data/README.md +48 -0
- data/bin/rncp +5 -5
- data/lib/rncp.rb +44 -39
- data/lib/rncp/files.rb +78 -65
- data/lib/rncp/listen_cmd.rb +26 -26
- data/lib/rncp/listener.rb +102 -84
- data/lib/rncp/networking.rb +91 -54
- data/lib/rncp/params.rb +31 -22
- data/lib/rncp/poll_cmd.rb +27 -27
- data/lib/rncp/push_cmd.rb +29 -29
- data/lib/rncp/pusher.rb +127 -109
- data/lib/rncp/send_cmd.rb +30 -30
- data/lib/rncp/version.rb +17 -17
- metadata +18 -10
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--exclude .*_cmd.rb --exclude rncp.rb --no-private --protected lib/**/*.rb - README.md CHANGELOG
|
data/CHANGELOG
ADDED
data/README.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
rncp / Ruby Network Copy
|
2
|
+
====
|
3
|
+
|
4
|
+
This project is a port of Pyncp which is a port of the original
|
5
|
+
"ncp - a fast file copy tool for LANs" originally written by Felix von
|
6
|
+
Leitner <felix-ncp@fefe.de>
|
7
|
+
|
8
|
+
At the moment rncp seems to be compatible with pyncp's default settings
|
9
|
+
(i.e. Multicast for poll/push and gzip compression) but all options
|
10
|
+
will eventually be implemented via command line arguments. Also, all
|
11
|
+
code should be pure ruby (minitar and Glib gems) so it should work with
|
12
|
+
most if not all OS's.
|
13
|
+
|
14
|
+
Installation
|
15
|
+
------------
|
16
|
+
|
17
|
+
Install ruby, then install the gem:
|
18
|
+
|
19
|
+
$ gem install rncp
|
20
|
+
|
21
|
+
Its a pure ruby gem, depending on pure ruby gems, so it should work with
|
22
|
+
most rubies.
|
23
|
+
|
24
|
+
Quick Start
|
25
|
+
-----------
|
26
|
+
|
27
|
+
If you want to send a file, directory or group of files/directories, start
|
28
|
+
the listener on the destination machine:
|
29
|
+
|
30
|
+
$ rncp
|
31
|
+
|
32
|
+
To send a file or directory directly:
|
33
|
+
|
34
|
+
$ rncp send 192.168.1.2 file.txt ./directory
|
35
|
+
|
36
|
+
To send files and directories without knowing IP Addresses or Hostnames
|
37
|
+
setup a Multicast/Broadcast Poll on the destination machine:
|
38
|
+
|
39
|
+
$ rncp poll
|
40
|
+
|
41
|
+
To send via Multicast/Broadcast use a push:
|
42
|
+
|
43
|
+
$ rncp push file.txt ./directory
|
44
|
+
|
45
|
+
Credits
|
46
|
+
-------
|
47
|
+
Thanks to [Felix](http://www.fefe.de/ncp/) and
|
48
|
+
[makefu](https://github.com/makefu/pyncp)
|
data/bin/rncp
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'rncp'
|
4
|
-
|
5
|
-
RNCP::Cli::CommandLineRunner.run
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rncp'
|
4
|
+
|
5
|
+
RNCP::Cli::CommandLineRunner.run
|
data/lib/rncp.rb
CHANGED
@@ -1,39 +1,44 @@
|
|
1
|
-
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Jeff Parent
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 2 of the License or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
require 'rncp/version'
|
15
|
-
|
16
|
-
require 'clamp'
|
17
|
-
|
18
|
-
require 'rncp/listen_cmd'
|
19
|
-
require 'rncp/send_cmd'
|
20
|
-
require 'rncp/poll_cmd'
|
21
|
-
require 'rncp/push_cmd'
|
22
|
-
|
23
|
-
module RNCP
|
24
|
-
def self.version_string
|
25
|
-
"
|
26
|
-
end
|
27
|
-
|
28
|
-
module Cli
|
29
|
-
class CommandLineRunner < Clamp::Command
|
30
|
-
self.default_subcommand = "listen"
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
1
|
+
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
+
#
|
3
|
+
# Copyright (c) 2013 Jeff Parent
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 2 of the License or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
require 'rncp/version'
|
15
|
+
|
16
|
+
require 'clamp'
|
17
|
+
|
18
|
+
require 'rncp/listen_cmd'
|
19
|
+
require 'rncp/send_cmd'
|
20
|
+
require 'rncp/poll_cmd'
|
21
|
+
require 'rncp/push_cmd'
|
22
|
+
|
23
|
+
module RNCP
|
24
|
+
def self.version_string
|
25
|
+
"rncp version #{RNCP::VERSION}"
|
26
|
+
end
|
27
|
+
|
28
|
+
module Cli
|
29
|
+
class CommandLineRunner < Clamp::Command
|
30
|
+
self.default_subcommand = "listen"
|
31
|
+
|
32
|
+
option ["--version", "-v"], :flag, "Show version" do
|
33
|
+
puts "rncp version #{RNCP::VERSION}"
|
34
|
+
exit(0)
|
35
|
+
end
|
36
|
+
|
37
|
+
subcommand 'listen', "runs in listener mode, waits for connection", ListenCommand
|
38
|
+
subcommand 'send', "sends files to a listener mode receiver", SendCommand
|
39
|
+
subcommand 'push', "broadcasts for clients, waits for connection", PushCommand
|
40
|
+
subcommand 'poll', "waits for broadcast, connects to broadcaster", PollCommand
|
41
|
+
end
|
42
|
+
end # Cli
|
43
|
+
end
|
44
|
+
|
data/lib/rncp/files.rb
CHANGED
@@ -1,65 +1,78 @@
|
|
1
|
-
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Jeff Parent
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 2 of the License or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
require 'zlib'
|
15
|
-
require 'archive/tar/minitar'
|
16
|
-
require 'stringio'
|
17
|
-
|
18
|
-
module RNCP
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
sgz
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
1
|
+
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
+
#
|
3
|
+
# Copyright (c) 2013 Jeff Parent
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 2 of the License or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
require 'zlib'
|
15
|
+
require 'archive/tar/minitar'
|
16
|
+
require 'stringio'
|
17
|
+
|
18
|
+
module RNCP
|
19
|
+
# Module containing functions related to the file system and archive
|
20
|
+
# compression/decompression.
|
21
|
+
module Files
|
22
|
+
# Recursively creates a list of all items (files/directories) found
|
23
|
+
# in the path.
|
24
|
+
# @param path [String] path to starting directory or file
|
25
|
+
# @return [Array] flatten array of all contents of directory, or file
|
26
|
+
def directory_list(path)
|
27
|
+
return [path].flatten if File.directory?(path) == false
|
28
|
+
|
29
|
+
data = []
|
30
|
+
Dir["#{path}**/*", "#{path}**/.*"].each do |entry|
|
31
|
+
next if entry[/^.*\/\.+$/]
|
32
|
+
data << directory_list(entry)
|
33
|
+
end
|
34
|
+
return data.flatten
|
35
|
+
end # directory_list
|
36
|
+
|
37
|
+
# Creates a data string of a tar gzip file containing all files in
|
38
|
+
# list. See {#untar} for decompression.
|
39
|
+
# @param files [Arrray] list of files to add to archive
|
40
|
+
# return [StringIO] data bytes of tar gzip archive.
|
41
|
+
def tar(files)
|
42
|
+
data = StringIO.new("")
|
43
|
+
sgz = Zlib::GzipWriter.new(data)
|
44
|
+
tar = Archive::Tar::Minitar::Output.new sgz
|
45
|
+
|
46
|
+
puts "[#] start writing files"
|
47
|
+
files.each do |f|
|
48
|
+
directory_list(f).each do |entry|
|
49
|
+
puts "[*] adding: #{entry}"
|
50
|
+
Archive::Tar::Minitar.pack_file(entry, tar)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
sgz.flush
|
55
|
+
sgz.close
|
56
|
+
sgz = nil
|
57
|
+
|
58
|
+
data.rewind
|
59
|
+
return data
|
60
|
+
end # tar
|
61
|
+
|
62
|
+
# Decompresses a data string of a tar gzip archive to current working
|
63
|
+
# directory. See {#tar} for compression.
|
64
|
+
# @param data [String] data bytes of tar gzip archive
|
65
|
+
def untar(data)
|
66
|
+
sgz = Zlib::GzipReader.new(StringIO.new(data))
|
67
|
+
tar = Archive::Tar::Minitar::Input.new sgz
|
68
|
+
|
69
|
+
tar.each do |entry|
|
70
|
+
puts "[*] #{entry.name}"
|
71
|
+
tar.extract_entry "./", entry
|
72
|
+
end
|
73
|
+
|
74
|
+
sgz.close
|
75
|
+
end # untar
|
76
|
+
|
77
|
+
end # Files
|
78
|
+
end # RNCP
|
data/lib/rncp/listen_cmd.rb
CHANGED
@@ -1,26 +1,26 @@
|
|
1
|
-
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Jeff Parent
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 2 of the License or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
require 'rncp/listener'
|
15
|
-
|
16
|
-
module RNCP
|
17
|
-
module Cli
|
18
|
-
class ListenCommand < Clamp::Command
|
19
|
-
|
20
|
-
def execute
|
21
|
-
RNCP::NcpListener.new.listen
|
22
|
-
end
|
23
|
-
|
24
|
-
end # ListenCommand
|
25
|
-
end # Cli
|
26
|
-
end # RNCP
|
1
|
+
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
+
#
|
3
|
+
# Copyright (c) 2013 Jeff Parent
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 2 of the License or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
require 'rncp/listener'
|
15
|
+
|
16
|
+
module RNCP
|
17
|
+
module Cli
|
18
|
+
class ListenCommand < Clamp::Command
|
19
|
+
|
20
|
+
def execute
|
21
|
+
RNCP::NcpListener.new.listen
|
22
|
+
end
|
23
|
+
|
24
|
+
end # ListenCommand
|
25
|
+
end # Cli
|
26
|
+
end # RNCP
|
data/lib/rncp/listener.rb
CHANGED
@@ -1,84 +1,102 @@
|
|
1
|
-
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Jeff Parent
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 2 of the License or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
require 'rncp/networking'
|
15
|
-
require 'rncp/files'
|
16
|
-
|
17
|
-
module RNCP
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
1
|
+
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
+
#
|
3
|
+
# Copyright (c) 2013 Jeff Parent
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 2 of the License or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
require 'rncp/networking'
|
15
|
+
require 'rncp/files'
|
16
|
+
|
17
|
+
module RNCP
|
18
|
+
# Class used to listen for direct and Multicast/Broadcast connections,
|
19
|
+
# which then triggers the receving of data from the Pusher class.
|
20
|
+
class NcpListener
|
21
|
+
include RNCP::Networking
|
22
|
+
include RNCP::Files
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
end
|
26
|
+
|
27
|
+
# Listens for a direct connection from a source. Will wait until
|
28
|
+
# a connection is made and then decompresses files to current
|
29
|
+
# working directory.
|
30
|
+
def listen
|
31
|
+
puts "[#] rncp Listener: creating new connection"
|
32
|
+
l = bind_tcp
|
33
|
+
puts "[*] waiting for connections"
|
34
|
+
|
35
|
+
sock, info = l.accept
|
36
|
+
printf "[*] connection from %s:%s\n", info.ip_address, info.ip_port
|
37
|
+
puts "[*] receiving..."
|
38
|
+
|
39
|
+
data = ""
|
40
|
+
while (sock.eof? == false)
|
41
|
+
data += sock.gets()
|
42
|
+
end
|
43
|
+
|
44
|
+
untar data
|
45
|
+
puts "[*] received: "
|
46
|
+
|
47
|
+
puts "[#] finished"
|
48
|
+
sock.close
|
49
|
+
l.close
|
50
|
+
end # listen
|
51
|
+
|
52
|
+
# Waits for a Multicast or Broadcast message sent by a source and
|
53
|
+
# establishes a connection similar to {#listen} which then
|
54
|
+
# decompresses files to current working directory.
|
55
|
+
def poll
|
56
|
+
addr = nil
|
57
|
+
msock = join_multicast
|
58
|
+
bsock = bind_broadcast
|
59
|
+
|
60
|
+
if msock.nil? == true && bsock.nil? == true
|
61
|
+
puts "[!] cannot continue without atleast one announcement socket!"
|
62
|
+
return 1
|
63
|
+
end
|
64
|
+
|
65
|
+
xsock = msock.nil? == false ? msock : bsock
|
66
|
+
|
67
|
+
puts "[*] waiting for something-cast"
|
68
|
+
loop do
|
69
|
+
begin
|
70
|
+
data, addr = xsock.recvfrom 1024
|
71
|
+
if addr[1] == RNCP::PORT
|
72
|
+
puts "[*] found pusher at #{addr[3]}:#{addr[1]}"
|
73
|
+
puts "[#] Anouncement: #{data}"
|
74
|
+
break
|
75
|
+
else
|
76
|
+
puts "[?] received garbase from #{addr}"
|
77
|
+
end
|
78
|
+
rescue Exception => e
|
79
|
+
puts "exception #{e}"
|
80
|
+
end # begin
|
81
|
+
end #loop
|
82
|
+
|
83
|
+
msock.close if msock.nil? == false
|
84
|
+
bsock.close if bsock.nil? == false
|
85
|
+
|
86
|
+
sock = TCPSocket::new addr[3], addr[1]
|
87
|
+
sock.send "I am ready!", 0
|
88
|
+
|
89
|
+
data = ""
|
90
|
+
while (sock.eof? == false)
|
91
|
+
data += sock.gets()
|
92
|
+
end
|
93
|
+
|
94
|
+
untar data
|
95
|
+
puts "[*] received: "
|
96
|
+
|
97
|
+
puts "[#] finished"
|
98
|
+
sock.close
|
99
|
+
end # poll
|
100
|
+
|
101
|
+
end # NcpListener
|
102
|
+
end # RNCP
|
data/lib/rncp/networking.rb
CHANGED
@@ -1,54 +1,91 @@
|
|
1
|
-
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Jeff Parent
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 2 of the License or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
require 'socket'
|
15
|
-
require 'ipaddr'
|
16
|
-
require 'rncp/params'
|
17
|
-
|
18
|
-
module RNCP
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
1
|
+
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
+
#
|
3
|
+
# Copyright (c) 2013 Jeff Parent
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 2 of the License or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
require 'socket'
|
15
|
+
require 'ipaddr'
|
16
|
+
require 'rncp/params'
|
17
|
+
|
18
|
+
module RNCP
|
19
|
+
# Contains common networking operations shared between listeners and
|
20
|
+
# pushers.
|
21
|
+
module Networking
|
22
|
+
# Creates a TCP connection to listen for direct connections
|
23
|
+
# @return [Socket] listening socket
|
24
|
+
def bind_tcp
|
25
|
+
sock = Socket::new Socket::AF_INET, Socket::SOCK_STREAM, 0
|
26
|
+
opts = [1].pack("i")
|
27
|
+
addr = [Socket::AF_INET, RNCP::PORT, 0, 0, 0, 0, 0, 0]
|
28
|
+
.pack("snCCCCNN")
|
29
|
+
|
30
|
+
sock.setsockopt Socket::SOL_SOCKET, Socket::SO_REUSEADDR, opts
|
31
|
+
sock.bind addr
|
32
|
+
sock.listen 1
|
33
|
+
return sock
|
34
|
+
end # bind_tcp
|
35
|
+
|
36
|
+
# Creates a socket bound to the Multicast group. Returns nil if fails.
|
37
|
+
# This socket is used to listen for messages sent via Multicast. See
|
38
|
+
# {#bind_multicast} to send.
|
39
|
+
# @return [UDPSocket] multicast socket
|
40
|
+
def join_multicast
|
41
|
+
begin
|
42
|
+
msock = UDPSocket.new
|
43
|
+
membership = IPAddr.new(RNCP::IPV4_GROUP).hton +
|
44
|
+
IPAddr.new("0.0.0.0").hton
|
45
|
+
|
46
|
+
puts "[#] Joining Multicast group"
|
47
|
+
msock.setsockopt :IPPROTO_IP, :IP_ADD_MEMBERSHIP, membership
|
48
|
+
msock.setsockopt :SOL_SOCKET, :SO_REUSEADDR, 1
|
49
|
+
msock.bind "0.0.0.0", RNCP::PORT
|
50
|
+
|
51
|
+
return msock
|
52
|
+
rescue
|
53
|
+
puts "[!] Multicast not supported"
|
54
|
+
return nil
|
55
|
+
end
|
56
|
+
end # join_multicast
|
57
|
+
|
58
|
+
# Creates a socket that sends to Multicast group. Returns nil if fails.
|
59
|
+
# See {#join_multicast} to listen for Multicast.
|
60
|
+
# @return [UDPSocket] multicast socket
|
61
|
+
def bind_multicast
|
62
|
+
begin
|
63
|
+
msock = UDPSocket.open
|
64
|
+
msock.setsockopt :IPPROTO_IP, :IP_MULTICAST_TTL, [32].pack("i")
|
65
|
+
msock.setsockopt :SOL_SOCKET, :SO_REUSEADDR, 1
|
66
|
+
msock.bind '', RNCP::PORT
|
67
|
+
msock.setsockopt :IPPROTO_IP, :IP_MULTICAST_LOOP, 1
|
68
|
+
return msock
|
69
|
+
rescue
|
70
|
+
puts "[!] Multicast not supported"
|
71
|
+
return nil
|
72
|
+
end
|
73
|
+
end # bind_multicast
|
74
|
+
|
75
|
+
# Creates a socket that sends and receives via Broadcast address.
|
76
|
+
# Returns nil if fails.
|
77
|
+
# @return [UDPSocket] broadcast socket
|
78
|
+
def bind_broadcast
|
79
|
+
begin
|
80
|
+
bsock = UDPSocket.open
|
81
|
+
bsock.setsockopt :SOL_SOCKET, :SO_BROADCAST, 1
|
82
|
+
bsock.setsockopt :SOL_SOCKET, :SO_REUSEADDR, 1
|
83
|
+
bsock.bind '', RNCP::PORT
|
84
|
+
return bsock
|
85
|
+
rescue
|
86
|
+
puts "[!] Broadcast not supported"
|
87
|
+
return nil
|
88
|
+
end
|
89
|
+
end # bind_broadcast
|
90
|
+
end # Networking
|
91
|
+
end # RNCP
|
data/lib/rncp/params.rb
CHANGED
@@ -1,22 +1,31 @@
|
|
1
|
-
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Jeff Parent
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 2 of the License or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
require 'rncp/version'
|
15
|
-
|
16
|
-
module RNCP
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
1
|
+
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
+
#
|
3
|
+
# Copyright (c) 2013 Jeff Parent
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 2 of the License or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
require 'rncp/version'
|
15
|
+
|
16
|
+
module RNCP
|
17
|
+
# IPv4 Multicast Group
|
18
|
+
IPV4_GROUP = '224.110.99.112'
|
19
|
+
|
20
|
+
# IPv4 Broadcast Address
|
21
|
+
IPV4_BC = '255.255.255.255'
|
22
|
+
|
23
|
+
# ncp Server Port
|
24
|
+
PORT = 8002
|
25
|
+
|
26
|
+
# Message sent when connecting via multicast
|
27
|
+
MC_MSG = "Multicasting for rncp Version #{RNCP::VERSION}"
|
28
|
+
|
29
|
+
# Message sentw hen connecting via broadcast
|
30
|
+
BC_MSG = "Broadcasting for rncp Version #{RNCP::VERSION}"
|
31
|
+
end
|
data/lib/rncp/poll_cmd.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
|
-
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Jeff Parent
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 2 of the License or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
require 'rncp/listener'
|
15
|
-
|
16
|
-
module RNCP
|
17
|
-
module Cli
|
18
|
-
class PollCommand < Clamp::Command
|
19
|
-
|
20
|
-
def execute
|
21
|
-
RNCP::NcpListener.new.poll
|
22
|
-
end
|
23
|
-
|
24
|
-
end # PollCommand
|
25
|
-
end # Cli
|
26
|
-
end # RNCP
|
27
|
-
|
1
|
+
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
+
#
|
3
|
+
# Copyright (c) 2013 Jeff Parent
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 2 of the License or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
require 'rncp/listener'
|
15
|
+
|
16
|
+
module RNCP
|
17
|
+
module Cli
|
18
|
+
class PollCommand < Clamp::Command
|
19
|
+
|
20
|
+
def execute
|
21
|
+
RNCP::NcpListener.new.poll
|
22
|
+
end
|
23
|
+
|
24
|
+
end # PollCommand
|
25
|
+
end # Cli
|
26
|
+
end # RNCP
|
27
|
+
|
data/lib/rncp/push_cmd.rb
CHANGED
@@ -1,29 +1,29 @@
|
|
1
|
-
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Jeff Parent
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 2 of the License or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
require 'rncp/pusher'
|
15
|
-
|
16
|
-
module RNCP
|
17
|
-
module Cli
|
18
|
-
class PushCommand < Clamp::Command
|
19
|
-
|
20
|
-
parameter "FILE ...", "Files to send"
|
21
|
-
|
22
|
-
def execute
|
23
|
-
RNCP::NcpPusher.new.push file_list
|
24
|
-
end
|
25
|
-
|
26
|
-
end # PushCommand
|
27
|
-
end # Cli
|
28
|
-
end # RNCP
|
29
|
-
|
1
|
+
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
+
#
|
3
|
+
# Copyright (c) 2013 Jeff Parent
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 2 of the License or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
require 'rncp/pusher'
|
15
|
+
|
16
|
+
module RNCP
|
17
|
+
module Cli
|
18
|
+
class PushCommand < Clamp::Command
|
19
|
+
|
20
|
+
parameter "FILE ...", "Files to send"
|
21
|
+
|
22
|
+
def execute
|
23
|
+
RNCP::NcpPusher.new.push file_list
|
24
|
+
end
|
25
|
+
|
26
|
+
end # PushCommand
|
27
|
+
end # Cli
|
28
|
+
end # RNCP
|
29
|
+
|
data/lib/rncp/pusher.rb
CHANGED
@@ -1,109 +1,127 @@
|
|
1
|
-
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Jeff Parent
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 2 of the License or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
require 'rncp/networking'
|
15
|
-
require 'stringio'
|
16
|
-
require 'fileutils'
|
17
|
-
require 'zlib'
|
18
|
-
require 'archive/tar/minitar'
|
19
|
-
require 'tempfile'
|
20
|
-
|
21
|
-
module RNCP
|
22
|
-
class
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
sock
|
38
|
-
sock.
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
msock.close if msock.nil? == false
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
1
|
+
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
+
#
|
3
|
+
# Copyright (c) 2013 Jeff Parent
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 2 of the License or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
require 'rncp/networking'
|
15
|
+
require 'stringio'
|
16
|
+
require 'fileutils'
|
17
|
+
require 'zlib'
|
18
|
+
require 'archive/tar/minitar'
|
19
|
+
require 'tempfile'
|
20
|
+
|
21
|
+
module RNCP
|
22
|
+
# Class to establish a connection to a Listener class and then compress
|
23
|
+
# and send files.
|
24
|
+
class NcpPusher
|
25
|
+
include RNCP::Networking
|
26
|
+
include RNCP::Files
|
27
|
+
|
28
|
+
def initialize
|
29
|
+
end
|
30
|
+
|
31
|
+
# Sends file directly to a given IP Address or Hostname
|
32
|
+
# @param ip [String] the address or hostname of the destination
|
33
|
+
# @param files [Array] array of file/directory names to send
|
34
|
+
def send_to(ip, files)
|
35
|
+
begin
|
36
|
+
puts "[*] copying #{files} to ip : #{ip}"
|
37
|
+
sock = TCPSocket::new ip, RNCP::PORT
|
38
|
+
sock.setsockopt Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1
|
39
|
+
|
40
|
+
data = tar files
|
41
|
+
|
42
|
+
sock.send data.string, 0
|
43
|
+
sock.flush
|
44
|
+
|
45
|
+
rescue Exception => e
|
46
|
+
puts "[!] cannot create connection to host, bailing out"
|
47
|
+
puts e
|
48
|
+
ensure
|
49
|
+
sock.close if sock.nil? == false
|
50
|
+
puts "[#] finished"
|
51
|
+
end
|
52
|
+
end # send_to
|
53
|
+
|
54
|
+
# Using Multicast or Broadcast, establishes a connection, compresses
|
55
|
+
# files and sends to destination.
|
56
|
+
# @param files [Array] array of file names to send
|
57
|
+
def push(files)
|
58
|
+
begin
|
59
|
+
sock = nil
|
60
|
+
addr = nil
|
61
|
+
msock = bind_multicast
|
62
|
+
|
63
|
+
# check broadcast
|
64
|
+
bsock = bind_broadcast
|
65
|
+
|
66
|
+
if msock.nil? == true && bsock.nil? == true
|
67
|
+
puts "[!] cannot continue without atleast one announcement socket!"
|
68
|
+
return 1
|
69
|
+
end
|
70
|
+
|
71
|
+
dsock = bind_tcp
|
72
|
+
|
73
|
+
if dsock.nil? == true
|
74
|
+
puts "[!] cannot continue without data socket"
|
75
|
+
return -1
|
76
|
+
end
|
77
|
+
|
78
|
+
puts "[*] starting X-Casting, waiting for TCP connect"
|
79
|
+
while sock.nil? == true
|
80
|
+
# Multicast Ping
|
81
|
+
if msock.nil? == false
|
82
|
+
msock.send RNCP::MC_MSG, 0, RNCP::IPV4_GROUP, RNCP::PORT
|
83
|
+
end
|
84
|
+
|
85
|
+
# Broadcast Ping
|
86
|
+
if bsock.nil? == false
|
87
|
+
bsock.send RNCP::BC_MSG, 0, RNCP::IPV4_BC, RNCP::PORT
|
88
|
+
end
|
89
|
+
|
90
|
+
puts "."
|
91
|
+
result = select( [dsock], nil, nil, 2 )
|
92
|
+
|
93
|
+
next if result.nil? == true
|
94
|
+
for inp in result[0]
|
95
|
+
if inp == dsock
|
96
|
+
sock, addr = dsock.accept
|
97
|
+
printf "[*] connection from %s:%s\n",
|
98
|
+
addr.ip_address, addr.ip_port
|
99
|
+
puts "[*] Client answer: #{sock.recv 1024}"
|
100
|
+
end # if
|
101
|
+
end # for inp
|
102
|
+
end # while sock.nil?
|
103
|
+
|
104
|
+
msock.close if msock.nil? == false
|
105
|
+
msock = nil
|
106
|
+
bsock.close if bsock.nil? == false
|
107
|
+
bsock = nil
|
108
|
+
dsock.close if dsock.nil? == false
|
109
|
+
dsock = nil
|
110
|
+
|
111
|
+
data = tar files
|
112
|
+
|
113
|
+
sock.send data.string, 0
|
114
|
+
sock.flush
|
115
|
+
rescue Exception => e
|
116
|
+
puts "[!] cannot push data, bailing out"
|
117
|
+
puts e
|
118
|
+
ensure
|
119
|
+
sock.close if sock.nil? == false
|
120
|
+
puts "[*] finished"
|
121
|
+
msock.close if msock.nil? == false
|
122
|
+
bsock.close if bsock.nil? == false
|
123
|
+
dsock.close if dsock.nil? == false
|
124
|
+
end # begin
|
125
|
+
end # push
|
126
|
+
end # NcpPusher
|
127
|
+
end # RNCP
|
data/lib/rncp/send_cmd.rb
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Jeff Parent
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 2 of the License or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
require 'rncp/pusher'
|
15
|
-
|
16
|
-
module RNCP
|
17
|
-
module Cli
|
18
|
-
class SendCommand < Clamp::Command
|
19
|
-
|
20
|
-
parameter "IP", "Destination IP Address"
|
21
|
-
parameter "FILE ...", "Files to send"
|
22
|
-
|
23
|
-
def execute
|
24
|
-
RNCP::NcpPusher.new.send_to ip, file_list
|
25
|
-
end
|
26
|
-
|
27
|
-
end # ListenCommand
|
28
|
-
end # Cli
|
29
|
-
end # RNCP
|
30
|
-
|
1
|
+
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
+
#
|
3
|
+
# Copyright (c) 2013 Jeff Parent
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 2 of the License or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
require 'rncp/pusher'
|
15
|
+
|
16
|
+
module RNCP
|
17
|
+
module Cli
|
18
|
+
class SendCommand < Clamp::Command
|
19
|
+
|
20
|
+
parameter "IP", "Destination IP Address"
|
21
|
+
parameter "FILE ...", "Files to send"
|
22
|
+
|
23
|
+
def execute
|
24
|
+
RNCP::NcpPusher.new.send_to ip, file_list
|
25
|
+
end
|
26
|
+
|
27
|
+
end # ListenCommand
|
28
|
+
end # Cli
|
29
|
+
end # RNCP
|
30
|
+
|
data/lib/rncp/version.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
-
#
|
3
|
-
# Copyright (c) 2013 Jeff Parent
|
4
|
-
#
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 2 of the License or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
|
15
|
-
module RNCP
|
16
|
-
VERSION = '0.0.
|
17
|
-
end
|
1
|
+
# RNCP - a fast file copy tool for LANs port in Ruby
|
2
|
+
#
|
3
|
+
# Copyright (c) 2013 Jeff Parent
|
4
|
+
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 2 of the License or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
|
15
|
+
module RNCP
|
16
|
+
VERSION = '0.0.2'
|
17
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rncp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -43,7 +43,11 @@ dependencies:
|
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0.3'
|
46
|
-
description:
|
46
|
+
description: ! 'rncp provides a fast way of transfering files between systems.
|
47
|
+
|
48
|
+
Its pure Ruby port of Pyncp/Ncp.
|
49
|
+
|
50
|
+
'
|
47
51
|
email:
|
48
52
|
- jecxjo@sdf.lonestar.org
|
49
53
|
executables:
|
@@ -51,17 +55,20 @@ executables:
|
|
51
55
|
extensions: []
|
52
56
|
extra_rdoc_files: []
|
53
57
|
files:
|
54
|
-
- lib/rncp.rb
|
55
|
-
- lib/rncp/params.rb
|
56
|
-
- lib/rncp/listener.rb
|
57
58
|
- lib/rncp/files.rb
|
58
|
-
- lib/rncp/
|
59
|
+
- lib/rncp/listener.rb
|
59
60
|
- lib/rncp/listen_cmd.rb
|
60
|
-
- lib/rncp/poll_cmd.rb
|
61
|
-
- lib/rncp/version.rb
|
62
|
-
- lib/rncp/send_cmd.rb
|
63
61
|
- lib/rncp/networking.rb
|
62
|
+
- lib/rncp/params.rb
|
63
|
+
- lib/rncp/poll_cmd.rb
|
64
|
+
- lib/rncp/pusher.rb
|
64
65
|
- lib/rncp/push_cmd.rb
|
66
|
+
- lib/rncp/send_cmd.rb
|
67
|
+
- lib/rncp/version.rb
|
68
|
+
- lib/rncp.rb
|
69
|
+
- .yardopts
|
70
|
+
- README.md
|
71
|
+
- CHANGELOG
|
65
72
|
- bin/rncp
|
66
73
|
homepage: http://github.com/jecxjo/rncp
|
67
74
|
licenses: []
|
@@ -83,8 +90,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
90
|
version: '0'
|
84
91
|
requirements: []
|
85
92
|
rubyforge_project:
|
86
|
-
rubygems_version: 1.8.
|
93
|
+
rubygems_version: 1.8.24
|
87
94
|
signing_key:
|
88
95
|
specification_version: 3
|
89
96
|
summary: a fast file copy tool for LANs
|
90
97
|
test_files: []
|
98
|
+
has_rdoc:
|