class Smpp::Pdu::SubmitSm
Sending an MT message
Attributes
data_coding[R]
dest_addr_npi[R]
dest_addr_ton[R]
destination_addr[R]
esm_class[R]
optional_parameters[R]
priority_flag[R]
protocol_id[R]
registered_delivery[R]
replace_if_present_flag[R]
schedule_delivery_time[R]
service_type[R]
short_message[R]
sm_default_msg_id[R]
sm_length[R]
source_addr[R]
source_addr_npi[R]
source_addr_ton[R]
source_options[R]
udh[R]
validity_period[R]
Public Class Methods
from_wire_data(seq, status, body)
click to toggle source
# File lib/smpp/pdu/submit_sm.rb, line 60 def self.from_wire_data(seq, status, body) options = {} options[:service_type], options[:source_addr_ton], options[:source_addr_npi], source_addr, options[:dest_addr_ton], options[:dest_addr_npi], destination_addr, options[:esm_class], options[:protocol_id], options[:priority_flag], options[:schedule_delivery_time], options[:validity_period], options[:registered_delivery], options[:replace_if_present_flag], options[:data_coding], options[:sm_default_msg_id], options[:sm_length], remaining_bytes = body.unpack('Z*CCZ*CCZ*CCCZ*Z*CCCCCa*') short_message = remaining_bytes.slice!(0...options[:sm_length]) #everything left in remaining_bytes is 3.4 optional parameters options[:optional_parameters] = parse_optional_parameters(remaining_bytes) Smpp::Base.logger.debug "SubmitSM with source_addr=#{source_addr}, destination_addr=#{destination_addr}" new(source_addr, destination_addr, short_message, options, seq) end
new(source_addr, destination_addr, short_message, options={}, seq = nil)
click to toggle source
Note: short_message
(the SMS body) must be in iso-8859-1 format
Calls superclass method
Smpp::Pdu::Base::new
# File lib/smpp/pdu/submit_sm.rb, line 11 def initialize(source_addr, destination_addr, short_message, options={}, seq = nil) @msg_body = short_message @source_options = options @udh = options[:udh] @service_type = options[:service_type]? options[:service_type] :'' @source_addr_ton = options[:source_addr_ton]?options[:source_addr_ton]:0 # network specific @source_addr_npi = options[:source_addr_npi]?options[:source_addr_npi]:1 # unknown @source_addr = source_addr @dest_addr_ton = options[:dest_addr_ton]?options[:dest_addr_ton]:1 # international @dest_addr_npi = options[:dest_addr_npi]?options[:dest_addr_npi]:1 # unknown @destination_addr = destination_addr @esm_class = options[:esm_class]?options[:esm_class]:0 # default smsc mode @protocol_id = options[:protocol_id]?options[:protocol_id]:0 @priority_flag = options[:priority_flag]?options[:priority_flag]:0 @schedule_delivery_time = options[:schedule_delivery_time]?options[:schedule_delivery_time]:'' @validity_period = options[:validity_period]?options[:validity_period]:'' @registered_delivery = options[:registered_delivery]?options[:registered_delivery]:1 # we want delivery notifications @replace_if_present_flag = options[:replace_if_present_flag]?options[:replace_if_present_flag]:0 @data_coding = options[:data_coding]?options[:data_coding]:3 # iso-8859-1 @sm_default_msg_id = options[:sm_default_msg_id]?options[:sm_default_msg_id]:0 @short_message = short_message payload = @udh ? @udh + @short_message : @short_message @sm_length = payload.length @optional_parameters = options[:optional_parameters] # craft the string/byte buffer pdu_body = sprintf("%s\0%c%c%s\0%c%c%s\0%c%c%c%s\0%s\0%c%c%c%c%c%s", @service_type, @source_addr_ton, @source_addr_npi, @source_addr, @dest_addr_ton, @dest_addr_npi, @destination_addr, @esm_class, @protocol_id, @priority_flag, @schedule_delivery_time, @validity_period, @registered_delivery, @replace_if_present_flag, @data_coding, @sm_default_msg_id, @sm_length, payload.force_encoding('US-ASCII')).force_encoding('binary') if @optional_parameters pdu_body << optional_parameters_to_buffer(@optional_parameters) end seq ||= next_sequence_number super(SUBMIT_SM, 0, seq, pdu_body) end
Public Instance Methods
to_human()
click to toggle source
some special formatting is needed for SubmitSm
PDUs to show the actual message content
# File lib/smpp/pdu/submit_sm.rb, line 54 def to_human # convert header (4 bytes) to array of 4-byte ints a = @data.to_s.unpack('N4') sprintf("(%22s) len=%3d cmd=%8s status=%1d seq=%03d (%s)", self.class.to_s[11..-1], a[0], a[1].to_s(16), a[2], a[3], @msg_body[0..30]) end