Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Open sidebar
savoirfairelinux
jami-daemon
Commits
0d5c264e
Commit
0d5c264e
authored
Aug 06, 2012
by
Tristan Matthews
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* #14340: daemon: check that transport selector was created before using.
Fixes abort() on failed registration.
parent
aa88a421
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
13 additions
and
8 deletions
+13
-8
daemon/src/sip/siptransport.cpp
daemon/src/sip/siptransport.cpp
+2
-2
daemon/src/sip/siptransport.h
daemon/src/sip/siptransport.h
+2
-1
daemon/src/sip/sipvoiplink.cpp
daemon/src/sip/sipvoiplink.cpp
+9
-5
No files found.
daemon/src/sip/siptransport.cpp
View file @
0d5c264e
...
...
@@ -448,7 +448,7 @@ SipTransport::createUdpTransport(const std::string &interface, unsigned int port
return
transport
;
}
pjsip_tpselector
*
SipTransport
::
init
TransportSelector
(
pjsip_transport
*
transport
,
pj_pool_t
*
tp_pool
)
const
pjsip_tpselector
*
SipTransport
::
create
TransportSelector
(
pjsip_transport
*
transport
,
pj_pool_t
*
tp_pool
)
const
{
RETURN_IF_FAIL
(
transport
!=
NULL
,
NULL
,
"Transport is not initialized"
);
pjsip_tpselector
*
tp
=
(
pjsip_tpselector
*
)
pj_pool_zalloc
(
tp_pool
,
sizeof
(
pjsip_tpselector
));
...
...
@@ -543,7 +543,7 @@ void SipTransport::findLocalAddressFromTransport(pjsip_transport *transport, pjs
// initialize a transport selector
// TODO Need to determine why we exclude TLS here...
// if (transportType == PJSIP_TRANSPORT_UDP and transport_)
pjsip_tpselector
*
tp_sel
=
init
TransportSelector
(
transport
,
pool_
);
pjsip_tpselector
*
tp_sel
=
create
TransportSelector
(
transport
,
pool_
);
RETURN_IF_NULL
(
tp_sel
,
"Could not initialize transport selector, using local address %s:%s"
,
addr
.
c_str
(),
port
.
c_str
());
pj_str_t
localAddress
=
{
0
,
0
};
...
...
daemon/src/sip/siptransport.h
View file @
0d5c264e
...
...
@@ -104,7 +104,8 @@ class SipTransport {
*
* @return A pointer to the transport selector structure
*/
pjsip_tpselector
*
initTransportSelector
(
pjsip_transport
*
transport
,
pj_pool_t
*
tp_pool
)
const
;
pjsip_tpselector
*
createTransportSelector
(
pjsip_transport
*
transport
,
pj_pool_t
*
tp_pool
)
const
;
/**
* This function unset the transport for a given account.
...
...
daemon/src/sip/sipvoiplink.cpp
View file @
0d5c264e
...
...
@@ -279,7 +279,7 @@ pj_bool_t transaction_request_cb(pjsip_rx_data *rdata)
?
account
->
getPublishedAddress
()
:
addrToUse
;
pjsip_tpselector
*
tp
=
SIPVoIPLink
::
instance
()
->
sipTransport
.
init
TransportSelector
(
account
->
transport_
,
call
->
getMemoryPool
());
pjsip_tpselector
*
tp
_sel
=
SIPVoIPLink
::
instance
()
->
sipTransport
.
create
TransportSelector
(
account
->
transport_
,
call
->
getMemoryPool
());
char
tmp
[
PJSIP_MAX_URL_SIZE
];
size_t
length
=
pjsip_uri_print
(
PJSIP_URI_IN_FROMTO_HDR
,
sip_from_uri
,
tmp
,
PJSIP_MAX_URL_SIZE
);
...
...
@@ -350,7 +350,7 @@ pj_bool_t transaction_request_cb(pjsip_rx_data *rdata)
pjsip_inv_create_uas
(
dialog
,
rdata
,
call
->
getLocalSDP
()
->
getLocalSdpSession
(),
0
,
&
call
->
inv
);
if
(
pjsip_dlg_set_transport
(
dialog
,
tp
)
!=
PJ_SUCCESS
)
{
if
(
pjsip_dlg_set_transport
(
dialog
,
tp
_sel
)
!=
PJ_SUCCESS
)
{
ERROR
(
"Could not set transport for dialog"
);
delete
call
;
return
PJ_FALSE
;
...
...
@@ -633,7 +633,11 @@ void SIPVoIPLink::sendRegister(Account *a)
if
(
pjsip_regc_register
(
regc
,
PJ_TRUE
,
&
tdata
)
!=
PJ_SUCCESS
)
throw
VoipLinkException
(
"Unable to initialize transaction data for account registration"
);
if
(
pjsip_regc_set_transport
(
regc
,
sipTransport
.
initTransportSelector
(
account
->
transport_
,
pool_
))
!=
PJ_SUCCESS
)
pjsip_tpselector
*
tp_sel
=
sipTransport
.
createTransportSelector
(
account
->
transport_
,
pool_
);
if
(
tp_sel
==
NULL
)
throw
VoipLinkException
(
"Unable to create transport selector"
);
if
(
pjsip_regc_set_transport
(
regc
,
tp_sel
)
!=
PJ_SUCCESS
)
throw
VoipLinkException
(
"Unable to set transport"
);
// decrease transport's ref count, counter incrementation is managed when acquiring transport
...
...
@@ -1304,9 +1308,9 @@ SIPVoIPLink::SIPStartCall(SIPCall *call)
return
false
;
}
pjsip_tpselector
*
tp
=
sipTransport
.
init
TransportSelector
(
account
->
transport_
,
call
->
inv
->
pool
);
pjsip_tpselector
*
tp
_sel
=
sipTransport
.
create
TransportSelector
(
account
->
transport_
,
call
->
inv
->
pool
);
if
(
pjsip_dlg_set_transport
(
dialog
,
tp
)
!=
PJ_SUCCESS
)
{
if
(
pjsip_dlg_set_transport
(
dialog
,
tp
_sel
)
!=
PJ_SUCCESS
)
{
ERROR
(
"Unable to associate transport fir invite session dialog"
);
return
false
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment