ji2p 0.0.3-jruby-java-universal-java-9
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/bin/bundle +15 -0
- data/bin/ctxirb +119 -0
- data/bin/simple_http_server +20 -0
- data/bin/simple_outproxy +96 -0
- data/lib/actor_system/actor.rb +10 -0
- data/lib/actor_system/concurrent/processor.rb +21 -0
- data/lib/actor_system/concurrent/worker.rb +13 -0
- data/lib/actor_system/core/minimal.rb +84 -0
- data/lib/actor_system/core/observable_implementation.rb +58 -0
- data/lib/actor_system/core/props.rb +45 -0
- data/lib/actor_system/dispatcher.rb +12 -0
- data/lib/actor_system/mailbox.rb +7 -0
- data/lib/actor_system/message.rb +60 -0
- data/lib/core_ext.rb +41 -0
- data/lib/gen_server.rb +57 -0
- data/lib/ji2p.rb +37 -0
- data/lib/ji2p/bundler.rb +165 -0
- data/lib/ji2p/cluster.rb +6 -0
- data/lib/ji2p/cluster/etcd.rb +5 -0
- data/lib/ji2p/cluster/etcd/version3.rb +6 -0
- data/lib/ji2p/cluster/kubernetes.rb +5 -0
- data/lib/ji2p/cluster/kubernetes/kube_api.rb +6 -0
- data/lib/ji2p/concurrent.rb +24 -0
- data/lib/ji2p/concurrent_executor.rb +56 -0
- data/lib/ji2p/config.rb +15 -0
- data/lib/ji2p/control.rb +15 -0
- data/lib/ji2p/control/client_manager.rb +14 -0
- data/lib/ji2p/control/dest.rb +34 -0
- data/lib/ji2p/control/keypair.rb +176 -0
- data/lib/ji2p/control/server.rb +80 -0
- data/lib/ji2p/control/socket_manager.rb +77 -0
- data/lib/ji2p/control/tunnel_manager.rb +62 -0
- data/lib/ji2p/environment.rb +35 -0
- data/lib/ji2p/package/gem_installer.rb +91 -0
- data/lib/ji2p/package/gemfile.rb +234 -0
- data/lib/ji2p/package/jar_dependencies.rb +23 -0
- data/lib/ji2p/package/proxy_support.rb +50 -0
- data/lib/ji2p/rspec.rb +16 -0
- data/lib/ji2p/server.rb +10 -0
- data/lib/ji2p/server/api.rb +14 -0
- data/lib/ji2p/server/database.rb +66 -0
- data/lib/ji2p/server/http.rb +69 -0
- data/lib/ji2p/server/http_server.rb +37 -0
- data/lib/ji2p/server/initializer.rb +4 -0
- data/lib/ji2p/server/launcher.rb +40 -0
- data/lib/ji2p/server/models.rb +9 -0
- data/lib/ji2p/server/models/base_record.rb +7 -0
- data/lib/ji2p/server/models/keypair.rb +32 -0
- data/lib/ji2p/server/models/tunnel.rb +4 -0
- data/lib/ji2p/startup.rb +12 -0
- data/lib/ji2p/startup/bootstrap.rb +60 -0
- data/lib/ji2p/startup/client_application.rb +20 -0
- data/lib/ji2p/startup/router_manager.rb +21 -0
- data/lib/ji2p/startup/sinatra_app.rb +61 -0
- data/lib/ji2p/startup/worker.rb +63 -0
- data/lib/ji2p/utils/blocking_queue.rb +32 -0
- data/lib/ji2p/utils/byte_value.rb +61 -0
- data/lib/ji2p/version.rb +3 -0
- data/lib/ji2p_jars.rb +16 -0
- data/lib/maybe.rb +148 -0
- data/lib/net/i2p/client/mstreaming/0.9.43/mstreaming-0.9.43.jar +0 -0
- data/lib/net/i2p/client/streaming/0.9.43/streaming-0.9.43.jar +0 -0
- data/lib/net/i2p/i2p/0.9.43/i2p-0.9.43.jar +0 -0
- data/lib/net/i2p/router/0.9.43/router-0.9.43.jar +0 -0
- metadata +392 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Ji2p
|
4
|
+
module Startup
|
5
|
+
class ClientApplication
|
6
|
+
java_import 'net.i2p.I2PAppContext'
|
7
|
+
|
8
|
+
def initialize name
|
9
|
+
@name = name
|
10
|
+
@ctx = Java::NetI2p::I2PAppContext.getGlobalContext
|
11
|
+
FileUtils.mkdir_p plugin_path unless File.exists? plugin_path
|
12
|
+
end
|
13
|
+
|
14
|
+
def plugin_path
|
15
|
+
@proot_path ||= File.expand_path("plugins/#{@name}", @ctx.getAppDir.getAbsolutePath)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'java'
|
2
|
+
|
3
|
+
module Ji2p::Startup
|
4
|
+
class RouterManager
|
5
|
+
@@router = nil
|
6
|
+
include_package 'net.i2p.router'
|
7
|
+
|
8
|
+
def self.start_router!
|
9
|
+
@@router = RouterLaunch.main ARGV if @@router.nil?
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.router_context
|
13
|
+
RouterContext.getCurrentContext
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.get_leases
|
17
|
+
ctx = RouterManager.router_context
|
18
|
+
ctx.netDb.get_leases.to_a
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
require 'sinatra/base'
|
3
|
+
#require 'sinatra/config_file'
|
4
|
+
require 'sinatra/contrib'
|
5
|
+
require 'sinatra/cookies'
|
6
|
+
require 'sinatra/json'
|
7
|
+
require 'sinatra/namespace'
|
8
|
+
require 'sinatra/reloader'
|
9
|
+
#require 'sinatra/webdav'
|
10
|
+
require 'better_errors'
|
11
|
+
require 'binding_of_caller'
|
12
|
+
|
13
|
+
module Ji2p
|
14
|
+
module Startup
|
15
|
+
class SinatraApp < Sinatra::Base
|
16
|
+
APP_ROOT = File.expand_path('../..', __dir__) unless defined? APP_ROOT
|
17
|
+
|
18
|
+
use Rack::Session::Cookie, :key => 'rack.session',
|
19
|
+
:domain => 'localhost',
|
20
|
+
:path => '/',
|
21
|
+
:expire_after => 2592000, # In seconds
|
22
|
+
:secret => 'kake'
|
23
|
+
|
24
|
+
set :environments, %w{development test production staging}
|
25
|
+
enable :sessions, :logging
|
26
|
+
set :sessions, true
|
27
|
+
set :logging, true
|
28
|
+
set :server, %w[puma webrick]
|
29
|
+
set :app_file, __FILE__
|
30
|
+
set :public_folder, Proc.new { File.join(APP_ROOT, 'public') }
|
31
|
+
set :protection, :session => true
|
32
|
+
unless ENV['APP_ENV'].nil?
|
33
|
+
set :environment, ENV['APP_ENV']
|
34
|
+
else
|
35
|
+
set :environment, :development
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
configure :development do
|
40
|
+
register Sinatra::Reloader
|
41
|
+
|
42
|
+
use BetterErrors::Middleware
|
43
|
+
BetterErrors.application_root = APP_ROOT
|
44
|
+
|
45
|
+
set :reload_stuff, true
|
46
|
+
end
|
47
|
+
|
48
|
+
register Sinatra::Namespace
|
49
|
+
#register Sinatra::ConfigFile
|
50
|
+
|
51
|
+
helpers Sinatra::Cookies
|
52
|
+
|
53
|
+
set :show_exceptions, false
|
54
|
+
|
55
|
+
get '/' do
|
56
|
+
json :sinatra => { :status => 'OK', :request => request.env.to_json }
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Ji2p
|
2
|
+
module Startup
|
3
|
+
class Worker
|
4
|
+
def self.start(num_threads:, queue_size:)
|
5
|
+
queue = SizedQueue.new(queue_size)
|
6
|
+
worker = new(num_threads: num_threads, queue: queue)
|
7
|
+
worker.spawn_threads
|
8
|
+
worker
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(num_threads:, queue:)
|
12
|
+
@num_threads = num_threads
|
13
|
+
@queue = queue
|
14
|
+
@threads = []
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :num_threads, :threads
|
18
|
+
private :threads
|
19
|
+
|
20
|
+
def spawn_threads
|
21
|
+
num_threads.times do
|
22
|
+
threads << Thread.new do
|
23
|
+
while running? || actions?
|
24
|
+
action_proc, action_payload = wait_for_action
|
25
|
+
action_proc.call(action_payload) if action_proc
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def enqueue(action, payload)
|
32
|
+
queue.push([action, payload])
|
33
|
+
end
|
34
|
+
|
35
|
+
def stop
|
36
|
+
queue.close
|
37
|
+
threads.each(&:exit)
|
38
|
+
threads.clear
|
39
|
+
true
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
attr_reader :queue, :threads
|
45
|
+
|
46
|
+
def actions?
|
47
|
+
!queue.empty?
|
48
|
+
end
|
49
|
+
|
50
|
+
def running?
|
51
|
+
!queue.closed?
|
52
|
+
end
|
53
|
+
|
54
|
+
def dequeue_action
|
55
|
+
queue.pop(true)
|
56
|
+
end
|
57
|
+
|
58
|
+
def wait_for_action
|
59
|
+
queue.pop(false)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'thread'
|
2
|
+
|
3
|
+
module Ji2p
|
4
|
+
module Utils
|
5
|
+
class BlockingQueue
|
6
|
+
attr_reader :queue, :mutex, :cv
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@queue = Array.new
|
10
|
+
@mutex = Mutex.new
|
11
|
+
@cv = ConditionVariable.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def push(ele)
|
15
|
+
@mutex.synchronize do
|
16
|
+
@queue.push ele
|
17
|
+
@cv.signal
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def pop
|
22
|
+
@mutex.synchronize do
|
23
|
+
while @queue.empty?
|
24
|
+
@cv.wait(@mutex)
|
25
|
+
end
|
26
|
+
|
27
|
+
@queue.pop
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Ji2p
|
2
|
+
module Utils
|
3
|
+
module ByteValue
|
4
|
+
module_function
|
5
|
+
|
6
|
+
B = 1
|
7
|
+
KB = B << 10
|
8
|
+
MB = B << 20
|
9
|
+
GB = B << 30
|
10
|
+
TB = B << 40
|
11
|
+
PB = B << 50
|
12
|
+
|
13
|
+
def parse(text)
|
14
|
+
if !text.is_a?(String)
|
15
|
+
raise ArgumentError, "ByteValue::parse takes a String, got a `#{text.class.name}`"
|
16
|
+
end
|
17
|
+
number = text.to_f
|
18
|
+
factor = multiplier(text)
|
19
|
+
|
20
|
+
(number * factor).to_i
|
21
|
+
end
|
22
|
+
|
23
|
+
def multiplier(text)
|
24
|
+
case text
|
25
|
+
when /(?:k|kb)$/
|
26
|
+
KB
|
27
|
+
when /(?:m|mb)$/
|
28
|
+
MB
|
29
|
+
when /(?:g|gb)$/
|
30
|
+
GB
|
31
|
+
when /(?:t|tb)$/
|
32
|
+
TB
|
33
|
+
when /(?:p|pb)$/
|
34
|
+
PB
|
35
|
+
when /(?:b)$/
|
36
|
+
B
|
37
|
+
else
|
38
|
+
raise ArgumentError, "Unknown bytes value '#{text}'"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def human_readable(number)
|
43
|
+
value, unit = if number > PB
|
44
|
+
[number / PB, "pb"]
|
45
|
+
elsif number > TB
|
46
|
+
[number / TB, "tb"]
|
47
|
+
elsif number > GB
|
48
|
+
[number / GB, "gb"]
|
49
|
+
elsif number > MB
|
50
|
+
[number / MB, "mb"]
|
51
|
+
elsif number > KB
|
52
|
+
[number / KB, "kb"]
|
53
|
+
else
|
54
|
+
[number, "b"]
|
55
|
+
end
|
56
|
+
|
57
|
+
format("%.2d%s", value, unit)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/ji2p/version.rb
ADDED
data/lib/ji2p_jars.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# this is a generated file, to avoid over-writing it just delete this comment
|
2
|
+
begin
|
3
|
+
require 'jar_dependencies'
|
4
|
+
rescue LoadError
|
5
|
+
require 'net/i2p/router/0.9.43/router-0.9.43.jar'
|
6
|
+
require 'net/i2p/client/mstreaming/0.9.43/mstreaming-0.9.43.jar'
|
7
|
+
require 'net/i2p/client/streaming/0.9.43/streaming-0.9.43.jar'
|
8
|
+
require 'net/i2p/i2p/0.9.43/i2p-0.9.43.jar'
|
9
|
+
end
|
10
|
+
|
11
|
+
if defined? Jars
|
12
|
+
require_jar 'net.i2p', 'router', '0.9.43'
|
13
|
+
require_jar 'net.i2p.client', 'mstreaming', '0.9.43'
|
14
|
+
require_jar 'net.i2p.client', 'streaming', '0.9.43'
|
15
|
+
require_jar 'net.i2p', 'i2p', '0.9.43'
|
16
|
+
end
|
data/lib/maybe.rb
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
class Object
|
2
|
+
def try(*a, &b)
|
3
|
+
if a.empty? && block_given?
|
4
|
+
yield self
|
5
|
+
else
|
6
|
+
public_send(*a, &b) if respond_to?(a.first)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class NilClass
|
12
|
+
def try(*args)
|
13
|
+
nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def method_missing(method, *args)
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Optional = Struct.new(:value) do
|
22
|
+
def and_then(&block)
|
23
|
+
if value.nil?
|
24
|
+
Optional.new(nil)
|
25
|
+
else
|
26
|
+
block.call(value)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def method_missing(*args, &block)
|
31
|
+
and_then do |value|
|
32
|
+
Optional.new(value.public_send(*args, &block))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
Many = Struct.new(:values) do
|
38
|
+
def and_then(&block)
|
39
|
+
Many.new(
|
40
|
+
values.map(&block).flat_map(&:values)
|
41
|
+
)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
Eventually = Struct.new(:block) do
|
46
|
+
def and_then(&block)
|
47
|
+
Eventually.new do |success|
|
48
|
+
run do |value|
|
49
|
+
block.call(value).run(&success)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
module Monad
|
56
|
+
def within(&block)
|
57
|
+
and_then do |value|
|
58
|
+
self.class.from_value(block.call(value))
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
Optional.include(Monad)
|
64
|
+
Many.include(Monad)
|
65
|
+
Eventually.include(Monad)
|
66
|
+
|
67
|
+
|
68
|
+
class Maybe
|
69
|
+
class Some
|
70
|
+
end
|
71
|
+
class None
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
module Functional
|
76
|
+
extend self
|
77
|
+
class Option
|
78
|
+
(Enumerable.instance_methods << :each).each do |enumerable_method|
|
79
|
+
define_method(enumerable_method) do |*args, &block|
|
80
|
+
res = enumerable_value.send(enumerable_method, *args, &block)
|
81
|
+
res.respond_to?(:each) ? Option(res.first) : res
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
alias_method :enumerable_value, :to_a
|
86
|
+
end
|
87
|
+
|
88
|
+
def Option(value)
|
89
|
+
if value.nil? || (value.respond_to?(:length) && value.length == 0)
|
90
|
+
None()
|
91
|
+
else
|
92
|
+
Some(value)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class None < Option
|
97
|
+
def get
|
98
|
+
fail 'No such element'
|
99
|
+
end
|
100
|
+
|
101
|
+
def or_else(default = nil)
|
102
|
+
block_given? ? yield : default
|
103
|
+
end
|
104
|
+
|
105
|
+
def method_missing(*)
|
106
|
+
self
|
107
|
+
end
|
108
|
+
|
109
|
+
private
|
110
|
+
def enumerable_value
|
111
|
+
[]
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def None
|
116
|
+
None.new
|
117
|
+
end
|
118
|
+
|
119
|
+
class Some < Option
|
120
|
+
def initialize(value)
|
121
|
+
@value = value
|
122
|
+
end
|
123
|
+
|
124
|
+
def get
|
125
|
+
value
|
126
|
+
end
|
127
|
+
|
128
|
+
def or_else(*)
|
129
|
+
value
|
130
|
+
end
|
131
|
+
|
132
|
+
def method_missing(method_sym, *args, &block)
|
133
|
+
map { |value| value.send(method_sym, *args, &block) }
|
134
|
+
end
|
135
|
+
|
136
|
+
private
|
137
|
+
attr_reader :value
|
138
|
+
|
139
|
+
def enumerable_value
|
140
|
+
[value]
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def Some(value)
|
145
|
+
Some.new(value)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|