Sha256: 816542151abe84aadb8216b7b60ccbd679fd3891c4a91e09226d553af952ed6d

Contents?: true

Size: 1.69 KB

Versions: 22

Compression:

Stored size: 1.69 KB

Contents

require 'socket'
require 'openssl'
module Rhoconnect
  class Apple
    def self.ping(params)
      settings = get_config(Rhoconnect.base_directory)[Rhoconnect.environment]
      cert_file = File.join(Rhoconnect.base_directory,settings[:iphonecertfile])
      cert = File.read(cert_file) if File.exists?(cert_file)
    	passphrase = settings[:iphonepassphrase]
    	host = settings[:iphoneserver]
    	port = settings[:iphoneport] 
      begin
        ssl_ctx = OpenSSL::SSL::SSLContext.new
    		ssl_ctx.key = OpenSSL::PKey::RSA.new(cert, passphrase)
    		ssl_ctx.cert = OpenSSL::X509::Certificate.new(cert)

    		socket = TCPSocket.new(host, port)
    		ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_ctx)
    		ssl_socket.sync = true
    		ssl_socket.connect

    		ssl_socket.write(apn_message(params))
    		ssl_socket.close
    		socket.close
  		rescue SocketError => error
  		  log "Error while sending ping: #{error}"
  		  raise error
  		end
    end

    # Generates APNS package
  	def self.apn_message(params)
  		data = {}
  		data['aps'] = {}
  		data['aps']['alert'] = params['message'] if params['message'] 
  		data['aps']['badge'] = params['badge'].to_i if params['badge']
  		data['aps']['sound'] = params['sound'] if params['sound']
  		data['aps']['vibrate'] = params['vibrate'] if params['vibrate']
  		data['do_sync'] = params['sources'] if params['sources']
  		json = data.to_json
  		"\0\0 #{[params['device_pin'].delete(' ')].pack('H*')}\0#{json.length.chr}#{json}"
  	end
  end
  
  # Deprecated - use Apple instead
  class Iphone < Apple    
    def self.ping(params)
      log "DEPRECATION WARNING: 'iphone' is a deprecated device_type, use 'apple' instead"
      super(params)
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
rhoconnect-3.0.0.beta3 lib/rhoconnect/ping/apple.rb
rhoconnect-3.0.0.beta1 lib/rhoconnect/ping/apple.rb