class ApnsProviderApi::Connection

Attributes

certificate[R]

def_delegators :@stream, :headers, :data

http2client[R]

def_delegators :@stream, :headers, :data

passphrase[R]

def_delegators :@stream, :headers, :data

socket[R]

def_delegators :@stream, :headers, :data

ssl[R]

def_delegators :@stream, :headers, :data

Public Class Methods

new(uri, certificate, passphrase) click to toggle source
# File lib/apns_provider_api/connection.rb, line 26
def initialize(uri, certificate, passphrase)
  @uri = URI(uri)
  @certificate = certificate
  @passphrase = passphrase
  @http2client = HTTP2::Client.new
  events
  @http2client
end
open(uri, certificate, passphrase) { |connection| ... } click to toggle source
# File lib/apns_provider_api/connection.rb, line 14
def open(uri, certificate, passphrase)
  return unless block_given?

  connection = new(uri, certificate, passphrase)
  connection.open

  yield connection

  connection.close
end

Public Instance Methods

close() click to toggle source
# File lib/apns_provider_api/connection.rb, line 53
def close
  return false if closed?
  @socket.close
  @socket = nil

  @ssl.close
  @ssl = nil

end
closed?() click to toggle source
# File lib/apns_provider_api/connection.rb, line 63
def closed?
  not open?
end
events() click to toggle source
# File lib/apns_provider_api/connection.rb, line 71
def events
  @http2client.on(:frame) do |bytes|
    # puts "Sending bytes: #{bytes.unpack("H*").first}"
    ssl.print bytes
    ssl.flush
  end
end
new_stream() click to toggle source
# File lib/apns_provider_api/connection.rb, line 67
def new_stream
  @http2client.new_stream
end
open() click to toggle source
# File lib/apns_provider_api/connection.rb, line 35
def open
  return false if open?

  @socket = TCPSocket.new(@uri.host, @uri.port)
  context = OpenSSL::SSL::SSLContext.new
  context.key = OpenSSL::PKey::RSA.new(@certificate, @passphrase)
  context.cert = OpenSSL::X509::Certificate.new(certificate)

  @ssl = OpenSSL::SSL::SSLSocket.new(@socket, context)
  @ssl.sync_close = true
  @ssl.hostname = @uri.hostname
  @ssl.connect
end
open?() click to toggle source
# File lib/apns_provider_api/connection.rb, line 49
def open?
  not (@ssl and @socket).nil?
end