mtik 4.0.2 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.txt +3 -0
- data/VERSION.txt +1 -1
- data/examples/tikjson.rb +4 -2
- data/lib/mtik/connection.rb +49 -12
- metadata +8 -10
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0faffc781b693499b3a24a0b07cc918c146903a6
|
4
|
+
data.tar.gz: 2415ca8ad18b2f83e55ca29e81bfe776f507700c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 82acc2725c7f074df88f22585a13a1395ffedd4bf9194daa167e893f1d33d11da70bb4a9825c25c294863b7bd88b8bdf3c435d848461862402bf22cf26824e58
|
7
|
+
data.tar.gz: 04e7aca873f26094fdcd701431bba659ad0663f7528b2ab03ddc9192276cafbda3b80f6d68698d366c9ae74c1049e33602adf8a59b2b625e177f0d2b8c2474ad
|
data/CHANGELOG.txt
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
2014-02-14 (14 FEB 2014) VERSION 4.2.3 Aaron D. Gifford (http://www.aarongifford.com)
|
2
|
+
* Update to fetch() utility, along with some very minor some cosmetic changes
|
3
|
+
|
1
4
|
2013-06-06 (06 JUN 2013) VERSION 4.0.2 Aaron D. Gifford (http://www.aarongifford.com)
|
2
5
|
Bart Braem (http://www.lalunerouge.net/)
|
3
6
|
* Merged Bart Braem's implementation of timeouts and bumped up the version. Thanks, Bart!
|
data/VERSION.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.0.
|
1
|
+
4.0.3
|
data/examples/tikjson.rb
CHANGED
@@ -2,11 +2,13 @@
|
|
2
2
|
########################################################################
|
3
3
|
#--
|
4
4
|
#
|
5
|
-
# FILE:
|
5
|
+
# FILE: tikjson.rb -- Example of using the Ruby MikroTik API in Ruby
|
6
|
+
# to execute an API command and retrieve results
|
7
|
+
# in JSON format
|
6
8
|
#
|
7
9
|
#++
|
8
10
|
# Author:: Aaron D. Gifford - http://www.aarongifford.com/
|
9
|
-
# Copyright:: Copyright (c) 2009-
|
11
|
+
# Copyright:: Copyright (c) 2009-2014, InfoWest, Inc.
|
10
12
|
# License:: BSD license
|
11
13
|
#--
|
12
14
|
# Redistribution and use in source and binary forms, with or without
|
data/lib/mtik/connection.rb
CHANGED
@@ -134,7 +134,7 @@ class MTik::Connection
|
|
134
134
|
begin
|
135
135
|
addr = Socket.getaddrinfo(@host, nil)
|
136
136
|
@sock = Socket.new(Socket.const_get(addr[0][0]), Socket::SOCK_STREAM, 0)
|
137
|
-
|
137
|
+
|
138
138
|
begin
|
139
139
|
@sock.connect_nonblock(Socket.pack_sockaddr_in(@port, addr[0][3]))
|
140
140
|
rescue Errno::EINPROGRESS
|
@@ -142,10 +142,10 @@ class MTik::Connection
|
|
142
142
|
if ready
|
143
143
|
@sock
|
144
144
|
else
|
145
|
-
raise Errno::ETIMEDOUT
|
145
|
+
raise Errno::ETIMEDOUT
|
146
146
|
end
|
147
147
|
end
|
148
|
-
|
148
|
+
|
149
149
|
rescue Errno::ECONNREFUSED, Errno::ETIMEDOUT, Errno::ENETUNREACH,
|
150
150
|
Errno::EHOSTUNREACH => e
|
151
151
|
@sock = nil
|
@@ -257,7 +257,7 @@ class MTik::Connection
|
|
257
257
|
sentence = get_sentence ## This call must be ATOMIC or re-entrant safety fails
|
258
258
|
|
259
259
|
## Check for '!fatal' before checking for a tag--'!fatal'
|
260
|
-
## is never(???) tagged:
|
260
|
+
## is never(???) tagged:
|
261
261
|
if sentence.key?('!fatal')
|
262
262
|
## FATAL ERROR has occured! (Or a '/quit' command was issued...)
|
263
263
|
if @data.length > 0
|
@@ -356,7 +356,7 @@ class MTik::Connection
|
|
356
356
|
## +args+:: Zero or more arguments to the command
|
357
357
|
## +callback+:: Proc/lambda code (or code block if not provided as
|
358
358
|
## an argument) to be called. (See the +await_completion+
|
359
|
-
##
|
359
|
+
##
|
360
360
|
def send_request(await_completion, command, *args, &callback)
|
361
361
|
if await_completion.is_a?(MTik::Request)
|
362
362
|
req = await_completion
|
@@ -525,16 +525,53 @@ class MTik::Connection
|
|
525
525
|
## +total+:: Final expected file size in bytes
|
526
526
|
## +bytes+:: Number of bytes transferred so far
|
527
527
|
## +request+:: The MTik::Request object
|
528
|
-
def fetch(url, filename, timeout=nil, &callback)
|
528
|
+
def fetch(url, filename=nil, timeout=nil, &callback)
|
529
|
+
require 'uri'
|
530
|
+
|
531
|
+
uri = URI(url)
|
532
|
+
filename = File.basename(uri.path) if filename.nil?
|
533
|
+
|
529
534
|
total = bytes = oldbytes = 0
|
530
535
|
status = ''
|
531
536
|
done = false
|
532
537
|
lastactivity = Time.now
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
+
|
539
|
+
## RouterOS versions 4.9 and prior (not sure if this version cut-off
|
540
|
+
## is exactly right) would accept the url parameter, but failed to
|
541
|
+
## download the files. So for versions older than this, we'll use
|
542
|
+
## the mode/src-path/port parameters instead if possible.
|
543
|
+
if !@os_version.nil? && lambda {|a,b|
|
544
|
+
sr = %r{(?:\.|rc|beta|alpha)}
|
545
|
+
a = a.split(sr).map{|i| i.to_i}
|
546
|
+
b = b.split(sr).map{|i| i.to_i}
|
547
|
+
i = 0
|
548
|
+
while i < a.size && i < b.size
|
549
|
+
return -1 if a[i] < b[i]
|
550
|
+
return 1 if a[i] > b[i]
|
551
|
+
i += 1
|
552
|
+
end
|
553
|
+
return a.size <=> b.size
|
554
|
+
}.call(@os_version, '4.9') < 1
|
555
|
+
command = [
|
556
|
+
'/tool/fetch', '=mode=' + uri.scheme,
|
557
|
+
'=src-path=' + uri.path + (uri.query.size > 0 ? '?' + uri.query : ''),
|
558
|
+
'=dst-path=' + filename
|
559
|
+
]
|
560
|
+
case uri.scheme
|
561
|
+
when 'http'
|
562
|
+
command << '=port=80'
|
563
|
+
when 'https'
|
564
|
+
command << '=port=443'
|
565
|
+
end
|
566
|
+
else
|
567
|
+
command = [
|
568
|
+
'/tool/fetch',
|
569
|
+
'=url=' + url,
|
570
|
+
'=dst-path=' + filename
|
571
|
+
]
|
572
|
+
end
|
573
|
+
|
574
|
+
req = get_reply_each(command[0], *command[1..-1]) do |r, s|
|
538
575
|
if s.key?('!re') && !done
|
539
576
|
unless s.key?('status')
|
540
577
|
raise MTik::Error.new("Unknown response to '/tool/fetch': missing 'status' in response.")
|
@@ -624,7 +661,7 @@ class MTik::Connection
|
|
624
661
|
else
|
625
662
|
raise MTik::Error.new("Invalid settings match class '#{keyitem}' (expected Array, Regexp, or String)")
|
626
663
|
end
|
627
|
-
|
664
|
+
|
628
665
|
if s.key?(key)
|
629
666
|
## A key matches! && s[k] != v
|
630
667
|
oldv = s[k]
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mtik
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
5
|
-
prerelease:
|
4
|
+
version: 4.0.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Aaron D. Gifford
|
@@ -24,12 +23,12 @@ files:
|
|
24
23
|
- CHANGELOG.txt
|
25
24
|
- LICENSE.txt
|
26
25
|
- README.txt
|
27
|
-
- VERSION.txt
|
28
26
|
- Rakefile
|
29
|
-
-
|
27
|
+
- VERSION.txt
|
30
28
|
- bin/tikcli
|
31
29
|
- bin/tikcommand
|
32
30
|
- bin/tikfetch
|
31
|
+
- examples/tikjson.rb
|
33
32
|
- lib/mtik.rb
|
34
33
|
- lib/mtik/connection.rb
|
35
34
|
- lib/mtik/error.rb
|
@@ -39,26 +38,25 @@ files:
|
|
39
38
|
- lib/mtik/timeouterror.rb
|
40
39
|
homepage: http://www.aarongifford.com/computers/mtik/
|
41
40
|
licenses: []
|
41
|
+
metadata: {}
|
42
42
|
post_install_message:
|
43
43
|
rdoc_options: []
|
44
44
|
require_paths:
|
45
45
|
- lib
|
46
46
|
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
-
none: false
|
48
47
|
requirements:
|
49
|
-
- -
|
48
|
+
- - '>='
|
50
49
|
- !ruby/object:Gem::Version
|
51
50
|
version: '0'
|
52
51
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
-
none: false
|
54
52
|
requirements:
|
55
|
-
- -
|
53
|
+
- - '>='
|
56
54
|
- !ruby/object:Gem::Version
|
57
55
|
version: '0'
|
58
56
|
requirements: []
|
59
57
|
rubyforge_project: mtik
|
60
|
-
rubygems_version:
|
58
|
+
rubygems_version: 2.2.1
|
61
59
|
signing_key:
|
62
|
-
specification_version:
|
60
|
+
specification_version: 4
|
63
61
|
summary: MTik implements the MikroTik RouterOS API for use in Ruby.
|
64
62
|
test_files: []
|