smppex v2.1.0 SMPPEX.Pdu View Source
Module for working with Pdu struct representing parsed SMPP PDU
Link to this section Summary
Functions
Makes pdu
be reply to the reply_to_pdu
, i.e. assigns reply_to_pdu
’s
sequence_number
to pdu
Checks if Pdu is a bind request
Checks if Pdu is a bind response
Returns Pdu’s command_id
Returns Pdu’s symbolic command name as an atom or :unknown
if Pdu’s command_id
do not correspond to any real SMPP command
Returns Pdu’s command_status
Returns Pdu’s :destination_addr
, :dest_addr_ton
and :dest_addr_npi
fields
in a tuple
Get Pdu mandatory or optional(TLV) field by name or by integer id. If Pdu does not have the
field or field name is unknown, nil
is returned
Get Pdu mandatory field. If Pdu does not have the field, nil
is returned
Get the whole set of mandatory fields as a map
Construct a new Pdu from header, mandatory fields and optional(TLV) fields
Get Pdu optional(TLV) field by name or by integer id. If Pdu does not have the
field or field name is unknown, nil
is returned
Get the whole set of optional(TLV) fields as a map
Returns Pdu’s unique reference ref
Checks if Pdu is a response Pdu
Checks if two Pdus are copies of the same Pdu
Returns Pdu’s sequence_number
Sets Pdu mandatory field. New Pdu is returned
Sets Pdu optional field. New Pdu is returned
Returns Pdu’s :source_addr
, :source_addr_ton
and :source_addr_npi
fields
in a tuple
Checks if Pdu is a successful response Pdu
Link to this section Types
header :: {non_neg_integer, non_neg_integer, non_neg_integer} | non_neg_integer
t() :: %SMPPEX.Pdu{command_id: non_neg_integer, command_status: non_neg_integer, mandatory: map, optional: map, ref: reference, sequence_number: non_neg_integer}
Link to this section Functions
as_reply_to(pdu :: SMPPEX.Pdu.t, reply_to_pdu :: SMPPEX.Pdu.t) :: SMPPEX.Pdu.t
Makes pdu
be reply to the reply_to_pdu
, i.e. assigns reply_to_pdu
’s
sequence_number
to pdu
.
Examples
iex(1)> pdu1 = SMPPEX.Pdu.new({0x00000004, 0, 123})
iex(2)> pdu2 = SMPPEX.Pdu.new(0x80000004) |> SMPPEX.Pdu.as_reply_to(pdu1)
iex(3)> SMPPEX.Pdu.sequence_number(pdu2)
123
Checks if Pdu is a bind request.
Examples
iex(1)> pdu = SMPPEX.Pdu.new(4)
iex(2)> SMPPEX.Pdu.bind?(pdu)
false
iex(3)> pdu = SMPPEX.Pdu.new(1)
iex(4)> SMPPEX.Pdu.bind?(pdu)
true
Checks if Pdu is a bind response.
Examples
iex(1)> pdu = SMPPEX.Pdu.new(0x80000004)
iex(2)> SMPPEX.Pdu.bind_resp?(pdu)
false
iex(3)> pdu = SMPPEX.Pdu.new(0x80000001)
iex(4)> SMPPEX.Pdu.bind_resp?(pdu)
true
Returns Pdu’s command_id
.
Examples
iex(1)> pdu = SMPPEX.Pdu.new(1)
iex(2)> SMPPEX.Pdu.command_id(pdu)
1
Returns Pdu’s symbolic command name as an atom or :unknown
if Pdu’s command_id
do not correspond to any real SMPP command.
Examples
iex(1)> pdu = SMPPEX.Pdu.new(1)
iex(2)> SMPPEX.Pdu.command_name(pdu)
:bind_receiver
iex(3)> pdu = SMPPEX.Pdu.new(1111111)
iex(4)> SMPPEX.Pdu.command_name(pdu)
:unknown
Returns Pdu’s command_status
.
Examples
iex(1)> pdu = SMPPEX.Pdu.new({1, 4, 123})
iex(2)> SMPPEX.Pdu.command_status(pdu)
4
Returns Pdu’s :destination_addr
, :dest_addr_ton
and :dest_addr_npi
fields
in a tuple.
Examples
iex(1)> pdu = SMPPEX.Pdu.new(4, %{destination_addr: "to", dest_addr_ton: 1, dest_addr_npi: 2})
iex(2)> SMPPEX.Pdu.dest(pdu)
{"to", 1, 2}
Get Pdu mandatory or optional(TLV) field by name or by integer id. If Pdu does not have the
field or field name is unknown, nil
is returned.
Examples
iex(1)> pdu = SMPPEX.Pdu.new(4, %{short_message: "hi"}, %{0x0424 => "hello"})
iex(2)> SMPPEX.Pdu.field(pdu, :message_payload)
"hello"
iex(3)> SMPPEX.Pdu.field(pdu, 0x0424)
"hello"
iex(4)> SMPPEX.Pdu.field(pdu, :short_message)
"hi"
iex(5)> SMPPEX.Pdu.field(pdu, :unknown_name)
nil
Get Pdu mandatory field. If Pdu does not have the field, nil
is returned.
Examples
iex(1)> pdu = SMPPEX.Pdu.new({1, 4, 123}, %{system_id: "system_id"})
iex(2)> SMPPEX.Pdu.mandatory_field(pdu, :system_id)
"system_id"
iex(3)> SMPPEX.Pdu.mandatory_field(pdu, :short_message)
nil
Get the whole set of mandatory fields as a map.
Examples
iex(1)> pdu = SMPPEX.Pdu.new(4, %{short_message: "hi"}, %{0x0424 => "hello"})
iex(2)> SMPPEX.Pdu.mandatory_fields(pdu)
%{short_message: "hi"}
Construct a new Pdu from header, mandatory fields and optional(TLV) fields.
Header may be either an integer, then it is treated as command id,
or a tuple {command_id, command_status, sequence_number}
Each Pdu is created with a unique ref field, by which one can later trace Pdu’s identity.
Examples
iex(1)> SMPPEX.Pdu.new(1)
%SMPPEX.Pdu{command_id: 1, command_status: 0, mandatory: %{}, optional: %{},
ref: #Reference<0.0.3.215>, sequence_number: 0}
iex(2)> SMPPEX.Pdu.new({1, 0, 123}, %{system_id: "sid", password: "pass"}, %{})
%SMPPEX.Pdu{command_id: 1, command_status: 0,
mandatory: %{password: "pass", system_id: "sid"}, optional: %{},
ref: #Reference<0.0.3.219>, sequence_number: 123}
Get Pdu optional(TLV) field by name or by integer id. If Pdu does not have the
field or field name is unknown, nil
is returned.
Examples
iex(1)> pdu = SMPPEX.Pdu.new(4, %{}, %{0x0424 => "hello"})
iex(2)> SMPPEX.Pdu.optional_field(pdu, :message_payload)
"hello"
iex(3)> SMPPEX.Pdu.optional_field(pdu, 0x0424)
"hello"
iex(4)> SMPPEX.Pdu.optional_field(pdu, :receipted_message_id)
nil
iex(5)> SMPPEX.Pdu.optional_field(pdu, :unknown_tlv_name)
nil
Get the whole set of optional(TLV) fields as a map.
Examples
iex(1)> pdu = SMPPEX.Pdu.new(4, %{short_message: "hi"}, %{0x0424 => "hello"})
iex(2)> SMPPEX.Pdu.optional_fields(pdu)
%{0x0424 => "hello"}
Returns Pdu’s unique reference ref
.
Examples
iex(1)> pdu = SMPPEX.Pdu.new({1, 4, 123})
iex(2)> is_reference SMPPEX.Pdu.ref(pdu)
true
Checks if Pdu is a response Pdu.
Examples
iex(1)> pdu = SMPPEX.Pdu.new(4)
iex(2)> SMPPEX.Pdu.resp?(pdu)
false
iex(3)> pdu = SMPPEX.Pdu.new(0x80000004)
iex(4)> SMPPEX.Pdu.resp?(pdu)
true
Checks if two Pdus are copies of the same Pdu.
Examples
iex(1)> pdu1 = SMPPEX.Pdu.new(4)
iex(2)> pdu2 = SMPPEX.Pdu.new(4)
iex(3)> SMPPEX.Pdu.same?(pdu1, pdu2)
false
iex(4)> SMPPEX.Pdu.same?(pdu1, pdu1)
true
Returns Pdu’s sequence_number
.
Examples
iex(1)> pdu = SMPPEX.Pdu.new({1, 4, 123})
iex(2)> SMPPEX.Pdu.sequence_number(pdu)
123
Sets Pdu mandatory field. New Pdu is returned.
Examples
iex(1)> pdu = SMPPEX.Pdu.new({1, 4, 123}, %{system_id: "system_id"})
iex(2)> pdu1 = SMPPEX.Pdu.set_mandatory_field(pdu, :password, "pass")
iex(3)> SMPPEX.Pdu.mandatory_field(pdu1, :password)
"pass"
Sets Pdu optional field. New Pdu is returned.
Examples
iex(1)> pdu = SMPPEX.Pdu.new(4)
iex(2)> pdu1 = SMPPEX.Pdu.set_optional_field(pdu, :message_payload, "hello")
iex(3)> SMPPEX.Pdu.optional_field(pdu1, 0x0424)
"hello"
Returns Pdu’s :source_addr
, :source_addr_ton
and :source_addr_npi
fields
in a tuple.
Examples
iex(1)> pdu = SMPPEX.Pdu.new(4, %{source_addr: "from", source_addr_ton: 1, source_addr_npi: 2})
iex(2)> SMPPEX.Pdu.source(pdu)
{"from", 1, 2}