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