[ 
https://issues.apache.org/jira/browse/CAMEL-26014?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen reassigned CAMEL-26014:
-----------------------------------

    Assignee: Claus Ibsen

> camel-smpp - the body of the producer: a stream is sent empty, the 8-bit 
> options, InOut and unknown commands
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26014
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26014
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-smpp
>    Affects Versions: 4.18.0, 4.22.0, 4.23.0
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.24.0
>
>
> Found while checking the body types of the smpp component for the catalog 
> (CAMEL-24961).
> h4. 1. A stream body is sent as an empty short message, and no body fails 
> with a NullPointerException
> For SubmitSm (the default), SubmitMulti and ReplaceSm, the smpp producer 
> converts the body to a String more than once: in {{determineAlphabet}} and 
> again in {{getShortMessage}} ({{SmppSmCommand}}, main 56aa5f4970a6, lines 92, 
> 113 and 165). The first conversion reads a stream body to its end, and the 
> stream is not reset in between, so the short message is empty. A body that is 
> null fails with a NullPointerException at line 114 ({{Cannot invoke 
> "String.getBytes(java.nio.charset.Charset)" because "body" is null}}), rather 
> than with an error that says the body is missing.
> Checked on 4.24.0-SNAPSHOT with {{camel run}} against the jSMPP 
> SMPPServerSimulator that the camel-smpp integration tests use:
> * a body that is a ByteArrayInputStream of "Hello stream": the delivery 
> receipt has an empty text;
> * the same text as a java.io.File: the receipt has "Hello file";
> * no body: the NullPointerException above.
> *Proposed change*: convert the body once, and fail with an 
> InvalidPayloadException when there is none.
> h4. 2. The 8-bit dataCoding and alphabet options do not send a byte array as 
> it is, as the headers do
> The smpp producer sends a byte array body as it is only when the 
> {{CamelSmppDataCoding}} header, or else the {{CamelSmppAlphabet}} header, is 
> an 8-bit value ({{SmppSmCommand.has8bitDataCoding}}, main 56aa5f4970a6, lines 
> 118-126). The endpoint options {{dataCoding}} and {{alphabet}} with the same 
> value do not do this: the body is converted to a String in the charset of the 
> exchange and encoded with the {{encoding}} option, so bytes that are not text 
> become {{?}}, while the data_coding of the PDU says 8-bit.
> Checked on 4.24.0-SNAPSHOT with {{camel run}} against the jSMPP simulator, 
> with a body of the bytes {{41 42 E9 FF}}:
> * with the header {{CamelSmppDataCoding=4}}: the simulator receives the four 
> bytes as they are;
> * with the endpoint options {{dataCoding=4&alphabet=4}}: it receives {{AB??}}.
> *Proposed change*: take the endpoint options into account when deciding to 
> send the bytes as they are, after the headers.
> h4. 3. After an InOut send the message has no body and loses its headers
> All six commands of the smpp producer put their result headers on 
> {{ExchangeHelper.getResultMessage(exchange)}} (for example 
> {{SmppSubmitSmCommand}}, main 56aa5f4970a6, line 97). When the exchange is 
> InOut, that is a new, empty message, so after the send the message has no 
> body, and the headers set before the send are gone; only the result headers, 
> such as {{CamelSmppId}}, are left. A route that answers an HTTP request with 
> the SMS it sent answers with an empty body.
> Checked on 4.24.0-SNAPSHOT with {{camel run}} against the jSMPP simulator: a 
> header {{marker}}, the body "Hello inout" and {{to: smpp://...}} with 
> {{pattern: InOut}}: after the send the body is null, {{marker}} is gone, and 
> {{CamelSmppId}} is set. With InOnly, the body and the headers stay.
> *Proposed change*: set the result headers on the message of the exchange, as 
> InOnly does.
> h4. 4. A CamelSmppCommand value that is not a command sends the body as an SMS
> The smpp producer picks the command from the {{CamelSmppCommand}} header, and 
> a value it does not know means SubmitSm ({{SmppCommandType.fromExchange}}, 
> main 56aa5f4970a6, line 97). So a misspelled command, such as {{querySm}} for 
> {{QuerySm}}, sends the body as an SMS.
> Checked on 4.24.0-SNAPSHOT with {{camel run}} against the jSMPP simulator: 
> {{CamelSmppCommand=querySm}} with the body "typo sends an SMS": the simulator 
> logs "Receiving submit_sm 'typo sends an SMS'".
> *Proposed change*: fail for a value that is not a command, and keep SubmitSm 
> for a missing header.
> _Claude Code on behalf of davsclaus_



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to