b/f: in bye() don't do send_200_ack while iterating over uac_trans

send_200_ack erases the transaction, which may lead to fault when
iterating is continued
sayer/1.4-spce2.6
Stefan Sayer 15 years ago
parent 12a1315515
commit bcd4ab8547

@ -793,19 +793,26 @@ int AmSipDialog::bye(const string& hdrs, int flags)
switch(status){
case Disconnecting:
case Connected:
for (TransMap::iterator it=uac_trans.begin();
it != uac_trans.end(); it++) {
if (it->second.method == "INVITE"){
// finish any UAC transaction before sending BYE
send_200_ack(it->second);
}
case Connected: {
// collect INVITE UAC transactions
vector<AmSipTransaction> ack_trans;
for (TransMap::iterator it=uac_trans.begin(); it != uac_trans.end(); it++) {
if (it->second.method == "INVITE"){
ack_trans.push_back(it->second);
}
if (AmConfig::WaitForByeTransaction)
status = Disconnecting;
else
status = Disconnected;
return sendRequest("BYE", "", "", hdrs, flags);
}
// finish any UAC transaction before sending BYE
for (vector<AmSipTransaction>::iterator it=
ack_trans.begin(); it != ack_trans.end(); it++) {
send_200_ack(*it);
}
if (AmConfig::WaitForByeTransaction)
status = Disconnecting;
else
status = Disconnected;
return sendRequest("BYE", "", "", hdrs, flags);
}
case Pending:
status = Disconnecting;

Loading…
Cancel
Save