class PduSms::Phone

Attributes

number_plan_identifier[R]
type_number[R]

Public Instance Methods

get_phone_number() click to toggle source
# File lib/pdu_sms/phone.rb, line 11
def get_phone_number
  if @number_plan_identifier == ID_INTERNATIONAL
    '+%s' % @phone_number
  else
    '%s' % @phone_number
  end
end

Protected Instance Methods

_auto_detect(phone_number) click to toggle source
# File lib/pdu_sms/phone.rb, line 21
def _auto_detect(phone_number)
  if /^\+\d+$/ === phone_number
    @number_plan_identifier = ID_INTERNATIONAL
    @type_number = TP_ISDN
  elsif /^\d+$/ === phone_number
    @number_plan_identifier = ID_UNKNOWN
    @type_number = TP_ISDN
  elsif Helpers.is_7bit?(phone_number)
    @number_plan_identifier = ID_ALPHANUMERIC
    @type_number = TP_UNKNOWN
  else
    raise PacketDataUnitError, 'Could not automatically determine the type of phone number'
  end
  self
end
_check_phone?() click to toggle source
# File lib/pdu_sms/phone.rb, line 37
def _check_phone?
  if @number_plan_identifier == ID_ALPHANUMERIC
    Helpers.is_7bit?(@phone_number)
  else
    /^\d+$/ === @phone_number
  end
end
_get_hex_type_and_phone() click to toggle source
# File lib/pdu_sms/phone.rb, line 45
def _get_hex_type_and_phone
  if @number_plan_identifier == ID_ALPHANUMERIC
    '%s%s' % [_type_of_address_hex, Helpers.encode_7bit(@phone_number)]
  else
    '%s%s' % [_type_of_address_hex, _convert_to_bcd_format]
  end
end
_set_phone_number(phone_number, number_play_identifier=false, type_number=false) click to toggle source
# File lib/pdu_sms/phone.rb, line 53
def _set_phone_number(phone_number, number_play_identifier=false, type_number=false)
  if number_play_identifier == false or type_number == false
    _auto_detect(phone_number)
  else
    raise ArgumentError, 'Incorrect type of phone number' unless (TP_UNKNOWN..TP_RESERVED).include?(type_number)
    raise ArgumentError, 'Invalid type id telephone' unless (ID_UNKNOWN..ID_RESERVED).include?(number_play_identifier)
    @type_number = type_number
    @number_plan_identifier = number_play_identifier
  end

  if @number_plan_identifier == ID_INTERNATIONAL and phone_number[0] == '+'
    @phone_number = phone_number[1..-1]
  else
    @phone_number = phone_number
  end

  unless _check_phone?
    @phone_number = ''
    raise ArgumentError, 'Phone number is invalid'
  end
  self
end

Private Instance Methods

_convert_to_bcd_format() click to toggle source
# File lib/pdu_sms/phone.rb, line 87
def _convert_to_bcd_format
  if @phone_number[0] == ?+
    clear_phone = @phone_number[1..-1]
  else
    clear_phone = @phone_number
  end
  if clear_phone.length % 2 != 0
    clear_phone += 'F'
  end
  Helpers.encode_bcd(clear_phone)
end
_convert_to_normal_format(bcd) click to toggle source
# File lib/pdu_sms/phone.rb, line 99
def _convert_to_normal_format(bcd)
  @phone_number = ''
  if bcd.length < 4
    raise ArgumentError, 'Wrong format'
  end
  raise ArgumentError, 'Incorrect number plan identifier' unless (128..255).include?(bcd[0..1].to_i(16))
  number_type = '%08b' % bcd[0..1].to_i(16)
  @number_plan_identifier = number_type[1..3].to_i(2)
  @type_number = number_type[4..7].to_i(2)
  if @number_plan_identifier == ID_ALPHANUMERIC
    @phone_number = Helpers.decode_7bit(bcd[2..-1])
  else
    @phone_number = Helpers.decode_bcd(bcd[2..-1])[/[fF]$/] ? Helpers.decode_bcd(bcd[2..-1])[0..-2] : Helpers.decode_bcd(bcd[2..-1])
  end
  self
end
_set_hex_type_and_phone(bcd) click to toggle source
# File lib/pdu_sms/phone.rb, line 78
def _set_hex_type_and_phone(bcd)
  _convert_to_normal_format bcd
  unless _check_phone?
    @phone_number = ''
    raise ArgumentError, 'Phone number is invalid'
  end
  self
end
_type_of_address_hex() click to toggle source
# File lib/pdu_sms/phone.rb, line 116
def _type_of_address_hex
  '%02X' % ('1%03b%04b' % [@number_plan_identifier, @type_number]).to_i(2)
end