Hello, developers
I try to use pjsip_endpt_send_raw with last callback parameter:
pjsip_tp_send_callback but this callback is never called.
void TransportPjSipImpl_send_callback(void *token, pjsip_tx_data *tdata,
pj_ssize_t bytes_sent)
{
csDebug(0, "AAAAAA");
}
...
status = pjsip_endpt_send_raw(m_Endpoint, transportType, &selector, szSip,
length, addr, addrLen, reinterpret_cast<void*>(nCallId),
TransportPjSipImpl_send_callback);
Could you possibly help me with this situation?
Sincerely,
Oleg Linkin
Hi,
at first check, that pjsip_endpt_send_raw return PJ_SUCCESS.
If not, check the return value.
Because the function passed the cb along to send_msg, check the source code snippet taken from pjsip_transport.c
/* Send to transport */
status = tr->send_msg(tr, tdata, addr, addr_len,
tdata, &send_raw_callback);
if (status != PJ_EPENDING) {
/* callback will not be called, so destroy tdata now. */
So, when reading the docs (https://www.pjsip.org/pjsip/docs/html/group__PJSIP__ENDPT__STATELESS.htm#ga5ebe940444f71bdc00aa1f927a9a3677)
it's clearly stated: (check the Returns section)
This is a low-level function to send raw data to a destination.
See also pjsip_endpt_send_raw_to_uri().
Parameters
endpt The SIP endpoint instance.
tp_type Transport type.
sel Optional pointer to transport selector instance if application wants to use a specific transport instance rather then letting transport manager finds the suitable transport..
raw_data The data to be sent.
data_len The length of the data.
addr Destination address.
addr_len Length of destination address.
token Arbitrary token to be returned back to callback.
cb Optional callback to be called to notify caller about the completion status of the pending send operation.
Returns
If the message has been sent successfully, this function will return PJ_SUCCESS and the callback will not be called. If message cannot be sent immediately, this function will return PJ_EPENDING, and application will be notified later about the completion via the callback. Any statuses other than PJ_SUCCESS or PJ_EPENDING indicates immediate failure, and in this case the callback will not be called.
So, you have to check the return value.
If you get "PJ_SUCCESS", then the callback won't be called !
Rgds
Franz
Von: pjsip pjsip-bounces@lists.pjsip.org im Auftrag von Oleg Linkin oleg.linkin@idt.net
Gesendet: Mittwoch, 22. Jänner 2020 15:14
An: pjsip@lists.pjsip.org
Betreff: [pjsip] BUG: pjsip_endpt_send_raw doesn't call pjsip_tp_send_callback
Hello, developers
I try to use pjsip_endpt_send_raw with last callback parameter:
pjsip_tp_send_callback but this callback is never called.
void TransportPjSipImpl_send_callback(void *token, pjsip_tx_data *tdata,
pj_ssize_t bytes_sent)
{
csDebug(0, "AAAAAA");
}
...
status = pjsip_endpt_send_raw(m_Endpoint, transportType, &selector, szSip,
length, addr, addrLen, reinterpret_cast<void*>(nCallId),
TransportPjSipImpl_send_callback);
Could you possibly help me with this situation?
Sincerely,
Oleg Linkin
Visit our blog: http://blog.pjsip.org
pjsip mailing list
pjsip@lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
Thank you for you help. It was my fault.
В письме от среда, 22 января 2020 г. 23:03:41 +03 пользователь Skale Franz
написал:
Hi,
at first check, that pjsip_endpt_send_raw return PJ_SUCCESS.
If not, check the return value.
Because the function passed the cb along to send_msg, check the source code
snippet taken from pjsip_transport.c /* Send to transport */
status = tr->send_msg(tr, tdata, addr, addr_len,
tdata, &send_raw_callback);
if (status != PJ_EPENDING) {
/* callback will not be called, so destroy tdata now. */
So, when reading the docs
(https://www.pjsip.org/pjsip/docs/html/group__PJSIP__ENDPT__STATELESS.htm#g
a5ebe940444f71bdc00aa1f927a9a3677)
it's clearly stated: (check the Returns section)
This is a low-level function to send raw data to a destination.
See also pjsip_endpt_send_raw_to_uri().
Parameters
endpt The SIP endpoint instance.
tp_type Transport type.
sel Optional pointer to transport selector instance if application
wants
to use a specific transport instance rather then letting transport manager
finds the suitable transport.. raw_data The data to be sent.
data_len The length of the data.
addr Destination address.
addr_len Length of destination address.
token Arbitrary token to be returned back to callback.
cb Optional callback to be called to notify caller about the
completion
status of the pending send operation.
Returns
If the message has been sent successfully, this function will return
PJ_SUCCESS and the callback will not be called. If message cannot be sent
immediately, this function will return PJ_EPENDING, and application will be
notified later about the completion via the callback. Any statuses other
than PJ_SUCCESS or PJ_EPENDING indicates immediate failure, and in this
case the callback will not be called.
So, you have to check the return value.
If you get "PJ_SUCCESS", then the callback won't be called !
Rgds
Franz
Von: pjsip pjsip-bounces@lists.pjsip.org im Auftrag von Oleg Linkin
oleg.linkin@idt.net Gesendet: Mittwoch, 22. Jänner 2020 15:14
An: pjsip@lists.pjsip.org
Betreff: [pjsip] BUG: pjsip_endpt_send_raw doesn't call
pjsip_tp_send_callback
Hello, developers
I try to use pjsip_endpt_send_raw with last callback parameter:
pjsip_tp_send_callback but this callback is never called.
void TransportPjSipImpl_send_callback(void *token, pjsip_tx_data *tdata,
pj_ssize_t bytes_sent)
{
csDebug(0, "AAAAAA");
}
...
status = pjsip_endpt_send_raw(m_Endpoint, transportType, &selector, szSip,
length, addr, addrLen, reinterpret_cast<void*>(nCallId),
TransportPjSipImpl_send_callback);
Could you possibly help me with this situation?
Sincerely,
Oleg Linkin
Visit our blog: http://blog.pjsip.org
pjsip mailing list
pjsip@lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
Visit our blog: http://blog.pjsip.org
pjsip mailing list
pjsip@lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org