Sha256: af2135cd38135ef21611d7a74f133f57a937b78583d230452fc1afe84f3a7cc5

Contents?: true

Size: 1.06 KB

Versions: 1

Compression:

Stored size: 1.06 KB

Contents

# frozen_string_literal: true

module Ftpd

  module GetsPeerAddress

    # Obtain the IP that the client connected _from_.
    #
    # How this is done depends upon which type of socket (SSL or not)
    # and what version of Ruby.
    #
    # * SSL socket
    #   * #peeraddr.  Uses BasicSocket.do_not_reverse_lookup.
    # * Ruby 1.8.7
    #   * #peeraddr, which does not take the "reverse lookup"
    #     argument, relying instead using
    #     BasicSocket.do_not_reverse_lookup.
    #   * #getpeername, which does not do a reverse lookup.  It is a
    #     little uglier than #peeraddr.
    # * Ruby >=1.9.3
    #   * #peeraddr, which takes the "reverse lookup" argument.
    #   * #getpeername - same as 1.8.7
    #
    # @return [String] IP address

    def peer_ip(socket)
      if socket.respond_to?(:getpeername)
        # Non SSL
        sockaddr = socket.getpeername
        _port, host = Socket.unpack_sockaddr_in(sockaddr)
        host
      else
        # SSL
        BasicSocket.do_not_reverse_lookup = true
        socket.peeraddr.last
      end
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ftpd-2.1.0 lib/ftpd/gets_peer_address.rb