View Source SMPPEX.Pdu (smppex v3.2.3)
Module for working with Pdu struct representing parsed SMPP PDU
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.
Types
@type header() :: {non_neg_integer(), non_neg_integer(), non_neg_integer()} | non_neg_integer()
@type t() :: %SMPPEX.Pdu{ command_id: non_neg_integer(), command_status: non_neg_integer(), mandatory: map(), optional: map(), ref: reference(), sequence_number: non_neg_integer() }
Functions
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
@spec command_id(t()) :: non_neg_integer()
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
@spec command_status(t()) :: non_neg_integer()
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
@spec sequence_number(t()) :: non_neg_integer()
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}
Checks if Pdu is a successful response Pdu.
Examples
iex(1)> pdu = SMPPEX.Pdu.new({0x80000004, 1, 0})
iex(2)> SMPPEX.Pdu.success_resp?(pdu)
false
iex(3)> pdu = SMPPEX.Pdu.new({0x80000004, 0, 0})
iex(4)> SMPPEX.Pdu.success_resp?(pdu)
true