Re: SMPP's network_error_code TLV

Alexander Malysh <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <[email protected]>
Hi Victor,

I don't know how I should make clearer for you (Type=OctetString Length=3).
This is from the latest SMPP spec v5.0:



Am 04.08.2010 um 21:36 schrieb Victor Luchitz:

> Please be so kind point me to a place in the SPEC that says that says
> that this TLV should be encoded and decoded in the way bearerbox does.
> 
> Seriously, intead of properly parsing a legitimate value of 0x0300ff
> for this tag, bearerbox simply drops it with message
> "SMPP: Optional field network_error_code with invalid length dropped."
> upon encountering the second octet, which is treated as a
> null-termination char. It's also impossible to write a value such as
> 0x0300ff from smppbox for the same reason, the tag is simply dropped.
> 
> I strongly encourage you to drop the "holier than thou" attitude
> regarding your reading of the SMPP spec.
> 
> 2010/8/4 Alexander Malysh <[email protected]>:
>> Hi,
>> 
>> you can pack every integer in one octet as long as integer not greater 256.
>> And I saw very much SMSCs that make use of this TLV and they use it as described in SMPP spec and me.
>> 
>> Thanks,
>> Alexander Malysh
>> 
>> Am 04.08.2010 um 19:28 schrieb Rene Kluwen:
>> 
>>> Sorry, forgot to copy the list.
>>> 
>>> -----Original Message-----
>>> From: Rene Kluwen [mailto:[email protected]]
>>> Sent: Wednesday, 04 August, 2010 19:25
>>> To: '[email protected]'
>>> Subject: RE: SMPP's network_error_code TLV
>>> 
>>> I am looking at the foopics link now.
>>> 
>>> They have error type as 1 octet and Error code as 2 octets.
>>> 
>>> Doesn't that prove Alex is right?
>>> 
>>> I mean if it was the other way around, you would get:
>>> 
>>> Error type: 0x0300
>>> Error code: 0xff
>>> 
>>> == Rene
>>> 
>>> 
>>> -----Original Message-----
>>> From: [email protected] [mailto:[email protected]]
>>> Sent: Wednesday, 04 August, 2010 19:13
>>> To: Rene Kluwen
>>> Subject: Re: SMPP's network_error_code TLV
>>> 
>>> I'm not going to give up on this easily :)
>>> 
>>> http://www.foopics.com/showfull/e58a2be383ae3c219822d4f3f9b97763
>>> 
>>> Considering how Wireshark parses this TLV, SMPP spec's definition of
>>> "Integer" - "An unsigned value with the defined number of octets. The
>>> octets will always be transmitted MSB first (Big Endian)" and
>>> considering the fact that passing integer values as printable characters
>>> is such a waste of precious bits that no one would need such a TLV, I
>>> still hold my opinion as valid :)
>>> 
>>> On 04.08.2010 19:10, Rene Kluwen wrote:
>>>> That's clear. So what does Integer mean here? Network byte order? Or the other way around.
>>>> In case the field is defined as C-string, then I presume printable ascii character. But maybe I am wrong here.
>>>> This because, reading the specs they mean the first "Integer" is one octet and the second "Integer" two octets.
>>>> 
>>>> But still (also according to your own reasoning) I think Alex is right.
>>>> 
>>>> == Rene
>>>> 
>>>> -----Original Message-----
>>>> From: [email protected] [mailto:[email protected]] On Behalf Of Victor Luchitz
>>>> Sent: Wednesday, 04 August, 2010 17:00
>>>> To: Kannel Devel
>>>> Subject: Re: Re: SMPP's network_error_code TLV
>>>> 
>>>> The term "octet" is used to avoid usage of the vague term "byte",
>>>> which is architecture/machine dependent. One can define "byte" as 5
>>>> oits and that'd be perfectly valid.
>>>> 
>>>> What I'm trying to say is that "octet" != "printable ascii character"
>>>> 
>>>> 2010/8/4 Rene Kluwen<[email protected]>:
>>>>> Victor,
>>>>> 
>>>>> I think the "Integer" types that you write below are an error in de SMPP specification.
>>>>> Even you wrote yourself (see below): " single-octet network code and two-octets error code".
>>>>> 
>>>>> So it should contain (copied from specs):
>>>>> 
>>>>> The _first octet_ indicates the network type.
>>>>> The following values are defined:
>>>>> 1 = ANSI-136
>>>>> 2 = IS-95
>>>>> 3 = GSM
>>>>> 4 = Reserved
>>>>> All other values reserved.
>>>>> The remaining _two octets_ specify the actual
>>>>> network error code appropriate to the
>>>>> network type.
>>>>> 
>>>>> So I tend to agree with Alex more.
>>>>> 
>>>>> Now what strikes me is that the value is defines as a C-string. Which leaves no space anymore for the terminating '\0'!
>>>>> 
>>>>> =-= Rene
>>>>> 
>>>>> 
>>>>> -----Original Message-----
>>>>> From: [email protected] [mailto:[email protected]] On Behalf Of Victor Luchitz
>>>>> Sent: Wednesday, 04 August, 2010 15:33
>>>>> To: Kannel Devel
>>>>> Subject: Re: Re: SMPP's network_error_code TLV
>>>>> 
>>>>> Nope, I think do understand the SMPP spec correctly.
>>>>> 
>>>>> Description for this field (page 152 of SMPP v3.4 Issue 2 spec) says
>>>>> the following:
>>>>> 
>>>>> Sub-field Size Type
>>>>> Network Type 1 Integer
>>>>> Error Code 2 Integer
>>>>> 
>>>>> Note that the spec explicitly defines those subfields as integers, not
>>>>> octet strings. Besides the "3ff" representation is vague since the
>>>>> spec doesn't mention the integer values are allowed to be passed in
>>>>> hex format. And how would you transmit an error code>  0xff if you
>>>>> still reserved to using octet strings?
>>>>> 
>>>>> All of the above wouldn't matter if we didn't have at least one client
>>>>> expecting the network_error_code to contain proper integer values.
>>>>> 
>>>>> 2010/8/4 Alexander Malysh<[email protected]>:
>>>>>> Hi Victor,
>>>>>> 
>>>>>> seems you misunderstand SMPP spec.
>>>>>> 
>>>>>> network_error_code is Octetstring with a size of 3.
>>>>>> The first Octet is network type and the rest is error code.
>>>>>> 
>>>>>> So for you example (GSM and error code 0xff)m it would be: 3ff
>>>>>> 
>>>>>> Thanks,
>>>>>> Alexander Malysh
>>>>>> 
>>>>>> Am 02.08.2010 um 09:37 schrieb Victor Luchitz:
>>>>>> 
>>>>>>> Hello.
>>>>>>> 
>>>>>>> SMPP smsc handles the network_error_code TLV as 3-octets C-string,
>>>>>>> which seems to be in accordance with the spec, at least at the first
>>>>>>> glance. However, the spec also further refines this tag is a set of
>>>>>>> two independent integer values: single-octet network code and
>>>>>>> two-octets error code.
>>>>>>> For example, a value of 0x0300ff (in hex) is a perfectly valid value
>>>>>>> for this tag, representing an error with code 0xff in a GSM network.
>>>>>>> I'm not 100% sure bearerbox wouldn't choke on reading such a value
>>>>>>> (since the supposed string is prematurely terminated), but what I am
>>>>>>> sure is that one can't write a value such as 0x0300ff into this tag if
>>>>>>> it's represented as a C-string. So, to able to fully use this TLV in
>>>>>>> say, smppbox, this TLV has to be represented as a 3-octets integer
>>>>>>> value. That renders this tag unusable for the err: field in SMPP
>>>>>>> delivery receipts but it was never intended to be used as such despite
>>>>>>> bearing a similar name.
>>>>>>> 
>>>>>>> So I'm attaching a patch that changes representation of the
>>>>>>> network_error_code TLV to a 3-octets integer and removes its usage for
>>>>>>> in handle_dlr.
>>>>>>> 
>>>>>>> --
>>>>>>> Best regards,
>>>>>>>  Victor Luchitz
>>>>>>> <network_error_code.patch>
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Best regards,
>>>>>  Victor Luchitz
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Best regards,
>>>>>  Victor Luchitz
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>>> --
>>> Best regards,
>>>   Victor Luchitz
>>> 
>>> 
>>> 
>>> 
>> 
>> 
> 
> 
> 
> -- 
> Best regards,
>  Victor Luchitz
>
PastedGraphic-1.pdf (application/pdf, 75.9 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.