Class: Kibuvits_krl171bt4_io

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/kibuvits_ruby_library_krl171bt4_.rb

Overview

write_2_console

Constant Summary collapse

@@cache =
Hash.new

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeKibuvits_krl171bt4_io



6978
6979
# File 'lib/kibuvits_ruby_library_krl171bt4_.rb', line 6978

def initialize
end

Class Method Details

.create_empty_ht_stdstreamsObject

create_empty_ht_stdstreams



6990
6991
6992
6993
# File 'lib/kibuvits_ruby_library_krl171bt4_.rb', line 6990

def Kibuvits_krl171bt4_io.create_empty_ht_stdstreams
   ht_stdstreams=Kibuvits_krl171bt4_io.instance.create_empty_ht_stdstreams
   return ht_stdstreams
end

.s_localhost_IP_addressObject

s_localhost_IP_address



7105
7106
7107
7108
# File 'lib/kibuvits_ruby_library_krl171bt4_.rb', line 7105

def Kibuvits_krl171bt4_io.s_localhost_IP_address
   s_out=Kibuvits_krl171bt4_io.instance.s_localhost_IP_address
   return s_out
end

.s_one_of_the_public_IP_addresses_or_a_loopback_if_unconnectedObject

s_one_of_the_public_IP_addresses_or_a_loopback_if_unconnected



7077
7078
7079
7080
# File 'lib/kibuvits_ruby_library_krl171bt4_.rb', line 7077

def Kibuvits_krl171bt4_io.s_one_of_the_public_IP_addresses_or_a_loopback_if_unconnected
   s_out=Kibuvits_krl171bt4_io.instance.s_one_of_the_public_IP_addresses_or_a_loopback_if_unconnected
   return s_out
end

Instance Method Details

#create_empty_ht_stdstreamsObject




6983
6984
6985
6986
6987
6988
# File 'lib/kibuvits_ruby_library_krl171bt4_.rb', line 6983

def create_empty_ht_stdstreams
   ht_stdstreams=Hash.new
   ht_stdstreams[$kibuvits_krl171bt4_lc_s_stdout]=$kibuvits_krl171bt4_lc_emptystring
   ht_stdstreams[$kibuvits_krl171bt4_lc_s_stderr]=$kibuvits_krl171bt4_lc_emptystring
   return ht_stdstreams
end

#s_localhost_IP_addressObject

Returns “127.0.0.1” or “::1”, depending on the value of the s_one_of_the_public_IP_addresses_or_a_loopback_if_unconnected()



7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
# File 'lib/kibuvits_ruby_library_krl171bt4_.rb', line 7085

def s_localhost_IP_address
   if !defined? @s_localhost_IP_address_cache
      s_ip_address=s_one_of_the_public_IP_addresses_or_a_loopback_if_unconnected
      s_0=nil
      if (s_ip_address.gsub(/[\d]/,$kibuvits_krl171bt4_lc_emptystring)).length==3
         s_0="127.0.0.1"
      else
         if s_ip_address==$kibuvits_krl171bt4_lc_s_localhost
            kibuvits_krl171bt4_throw("s_ip_addresss == \"localhost\", \n"+
            "but it should be an IP-address.\n"+
            "GUID='555016d5-9a01-4796-a2ce-c13290a118e7'\n\n")
         end # if
         s_0="::1" # IPv6 version of the loop-back interface
      end # if
      @s_localhost_IP_address_cache=s_0.freeze
   end # if
   s_out=@s_localhost_IP_address_cache
   return s_out
end

#s_one_of_the_public_IP_addresses_or_a_loopback_if_unconnectedObject

A computer might have multiple network cards, like WiFi card, mobile internet USB-stick, etc.

If only loop-back interfaces are found, a random “localhost” loop-back IP-addrss is returned.

Action priorities:

highest_priority) Return a non-loop-back IPv4 address
  lower_priority) Return a non-loop-back IPv6 address
  lower_priority) Return a loop-back IPv4 address
  lower_priority) Return a loop-back IPv6 address
 lowest_priority) Throw an exception

The reason, why IPv4 is preferred to IPv6 is that IPv6 addresses are assigned to interfaces on LAN even, when the actual internet connection is available only through an IPv4 address.

On the other hand, just like NAT almost solved the IPv4 address space problem by mapping LANipAddress:whateverport1_to_WANipAddress:someport2 it is possible to increase the number of end-point addresses even further by adding a software layer, like ApplicationName_LANipAddress:whateverport1, where the ApplicationName might depict a multiplexer/demultiplexer. That is to say, the IPv4 addresses are likely to go a pretty long way.



7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
# File 'lib/kibuvits_ruby_library_krl171bt4_.rb', line 7025

def s_one_of_the_public_IP_addresses_or_a_loopback_if_unconnected
   if !defined? $kibuvits_krl171bt4_inclusionconstannt_kibuvits_krl171bt4_io_s_one_of_the_public_IP_addresses_or_a_loopback_if_unconnected
      # The interpreter is sometimes picky, if real
      # Ruby constants are  in a function.
      require "socket"
      $kibuvits_krl171bt4_inclusionconstannt_kibuvits_krl171bt4_io_s_one_of_the_public_IP_addresses_or_a_loopback_if_unconnected=true
   end # if
   ar_doable=Array.new(5,false) # actions by priority
   #ar_doable[4]=true # throw, if all else fails, outcommented due to a hack
   ar_data=Array.new(5,nil)
   # Credits go to to:
   # http://stackoverflow.com/questions/5029427/ruby-get-local-ip-nix
   ar_addrinfo=Socket.ip_address_list
   ar_addrinfo.each do |ob_addrinfo|
      if ob_addrinfo.ipv6?
         next if ob_addrinfo.ipv6_multicast?
         if ob_addrinfo.ipv6_loopback?
            ar_doable[3]=true
            ar_data[3]=ob_addrinfo.ip_address
            next
         end # if
         next if ar_doable[1]
         ar_doable[1]=true
         ar_data[1]=ob_addrinfo.ip_address
      else
         if ob_addrinfo.ipv4?
            next if ob_addrinfo.ipv4_multicast?
            if ob_addrinfo.ipv4_loopback?
               ar_doable[2]=true
               ar_data[2]=ob_addrinfo.ip_address
               next
            end # if
            next if ar_doable[0]
            ar_doable[0]=true
            ar_data[0]=ob_addrinfo.ip_address
         else
            kibuvits_krl171bt4_throw("ob_addrinfo.to_s=="+ob_addrinfo.to_s+
            "\n GUID='d45ca622-f195-4351-a5fe-c13290a118e7'\n\n")
         end # if
      end # if
   end # loop
   i_n=ar_doable.size-1 # The last option is throwing.
   i_n.times do |i_ix|
      if ar_doable[i_ix]
         s_out=ar_data[i_ix]
         return s_out
      end # if
   end # loop
   kibuvits_krl171bt4_throw("ar_addrinfo.to_s=="+ar_addrinfo.to_s+
   "\n GUID='55ca1ad1-454f-4653-b1ee-c13290a118e7'\n\n")
end