Module: I2P

Defined in:
lib/i2p.rb,
lib/i2p/bob.rb,
lib/i2p/sam.rb,
lib/i2p/sdk.rb,
lib/i2p/hosts.rb,
lib/i2p/version.rb,
lib/i2p/data/key.rb,
lib/i2p/streaming.rb,
lib/i2p/bob/client.rb,
lib/i2p/bob/tunnel.rb,
lib/i2p/sam/client.rb,
lib/i2p/data/key_pair.rb,
lib/i2p/data/structure.rb,
lib/i2p/data/public_key.rb,
lib/i2p/data/certificate.rb,
lib/i2p/data/destination.rb,
lib/i2p/data/private_key.rb,
lib/i2p/data/signing_public_key.rb,
lib/i2p/data/signing_private_key.rb

Overview

Examples:

Checking whether an I2P router is running locally

I2P.available?      #=> true, if the I2P router is installed
I2P.running?        #=> true, if the I2P router is running

Starting and stopping the local I2P router daemon

I2P.start!          #=> executes `i2prouter start`
I2P.restart!        #=> executes `i2prouter restart`
I2P.stop!           #=> executes `i2prouter stop`

See Also:

Defined Under Namespace

Modules: BOB, SAM, SDK, Streaming, VERSION Classes: Certificate, Destination, Hosts, Key, KeyPair, PrivateKey, PublicKey, SigningPrivateKey, SigningPublicKey, Structure

Constant Summary collapse

PATH =

The path used to locate the i2prouter executable.

(ENV['I2P_PATH'] || ENV['PATH']).split(File::PATH_SEPARATOR)

Class Method Summary collapse

Class Method Details

.available?Boolean

Returns true if I2P is available, false otherwise.

This attempts to locate the i2prouter executable in the user’s current PATH environment.

Examples:

I2P.available?    #=> true

Returns:

  • (Boolean)


65
66
67
# File 'lib/i2p.rb', line 65

def self.available?
  !!program_path
end

.program_path(program_name = :i2prouter) ⇒ Pathname

Returns the path to the i2prouter executable.

Returns nil if the program could not be located in any of the directories denoted by the user’s current I2P_PATH or PATH environment variables.

Examples:

I2P.program_path  #=> "/opt/local/bin/i2prouter"

Parameters:

  • program_name (String, #to_s) (defaults to: :i2prouter)

Returns:

  • (Pathname)


166
167
168
169
170
171
172
173
174
175
176
# File 'lib/i2p.rb', line 166

def self.program_path(program_name = :i2prouter)
  program_name = program_name.to_s
  @program_paths ||= {}
  @program_paths[program_name] ||= begin
    PATH.find do |dir|
      if File.executable?(file = File.join(dir, program_name))
        break Pathname(file)
      end
    end
  end
end

.restart!Boolean

Restarts the local I2P router daemon, starting it in case it wasn’t already running.

Returns true if the I2P router daemon was successfully restarted, false otherwise.

This relies on being able to execute ‘i2prouter restart`, which requires the i2prouter executable to be located in the user’s current PATH environment.

Returns:

  • (Boolean)

Since:

  • 0.1.1



130
131
132
133
134
# File 'lib/i2p.rb', line 130

def self.restart!
  if available?
    /Starting I2P Service/ === `#{program_path} restart`
  end
end

.running?Boolean

Returns true if the I2P router is running locally, false otherwise.

This first attempts to call ‘i2prouter status` if the executable can be located in the user’s current PATH environment, falling back to attempting to establish a Simple Anonymous Messaging (SAM) protocol connection to the standard SAM port 7656 on localhost.

If I2P isn’t in the PATH and hasn’t been configured with SAM enabled, this will return false regardless of whether I2P actually is running or not.

Examples:

I2P.running?      #=> false

Returns:

  • (Boolean)


85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/i2p.rb', line 85

def self.running?
  if available?
    /is running/ === `#{program_path} status`.chomp
  else
    begin
      I2P::SAM::Client.open.disconnect
      true
    rescue Errno::ECONNREFUSED
      false
    end
  end
end

.start!Integer

Starts the local I2P router daemon.

Returns the process identifier (PID) if the I2P router daemon was successfully started, nil otherwise.

This relies on being able to execute ‘i2prouter start`, which requires the i2prouter executable to be located in the user’s current PATH environment.

Returns:

  • (Integer)

Since:

  • 0.1.1



110
111
112
113
114
115
# File 'lib/i2p.rb', line 110

def self.start!
  if available?
    `#{program_path} start` unless running?
    `#{program_path} status` =~ /is running \((\d+)\)/ ? $1.to_i : nil
  end
end

.stop!Boolean

Stops the local I2P router daemon.

Returns true if the I2P router daemon was successfully shut down, false otherwise.

This relies on being able to execute ‘i2prouter stop`, which requires the i2prouter executable to be located in the user’s current PATH environment.

Returns:

  • (Boolean)

Since:

  • 0.1.1



148
149
150
151
152
# File 'lib/i2p.rb', line 148

def self.stop!
  if available?
    /Stopped I2P Service/ === `#{program_path} stop`
  end
end