diff --git a/Control/CallControl.cpp b/Control/CallControl.cpp index 9a653f9..f10ae4a 100644 --- a/Control/CallControl.cpp +++ b/Control/CallControl.cpp @@ -714,6 +714,16 @@ void Control::MOCStarter(const GSM::L3CMServiceRequest* req, GSM::LogicalChannel // Get the Setup message. // GSM 04.08 5.2.1.2 GSM::L3Message* msg_setup = getMessage(LCH); + + // Check for abort, if so close and cancel + if (const GSM::L3CMServiceAbort *cmsab = dynamic_cast(msg_setup)) { + LOG(INFO) << "received CMServiceAbort, closing channel and clearing"; + //SIP Engine not started, just close the channel and exit + LCH->send(GSM::L3ChannelRelease()); + delete cmsab; + return; + } + const GSM::L3Setup *setup = dynamic_cast(msg_setup); if (!setup) { if (msg_setup) { diff --git a/GSM/GSML3MMMessages.cpp b/GSM/GSML3MMMessages.cpp index 96c3c2c..2f66e5d 100644 --- a/GSM/GSML3MMMessages.cpp +++ b/GSM/GSML3MMMessages.cpp @@ -88,6 +88,7 @@ L3MMMessage* GSM::L3MMFactory(L3MMMessage::MessageType MTI) switch (MTI) { case L3MMMessage::LocationUpdatingRequest: return new L3LocationUpdatingRequest; case L3MMMessage::IMSIDetachIndication: return new L3IMSIDetachIndication; + case L3MMMessage::CMServiceAbort: return new L3CMServiceAbort; case L3MMMessage::CMServiceRequest: return new L3CMServiceRequest; // Since we don't support re-establishment, don't bother parsing this. //case L3MMMessage::CMReestablishmentRequest: return new L3CMReestablishmentRequest; @@ -201,6 +202,13 @@ void L3IMSIDetachIndication::text(ostream& os) const +void L3CMServiceAbort::parseBody(const L3Frame& src, size_t &rp) +{ + //Nothing to parse -kurtis +} + + + void L3CMServiceReject::writeBody(L3Frame& dest, size_t &wp) const { mCause.writeV(dest,wp);