mirror of
https://github.com/fairwaves/openbts-2.8.git
synced 2025-10-23 07:42:01 +00:00
Potentially fixed a bug where a message sent from the CLI isn't responded to, gets cleared from the paging table and then segfaults as it has no invite attached.
git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@4882 19bc5d8c-e614-43d4-8b26-e1612bc8e597
This commit is contained in:
@@ -100,7 +100,8 @@ TransactionEntry::TransactionEntry(
|
||||
const L3CMServiceType& wService,
|
||||
const L3CallingPartyBCDNumber& wCalling,
|
||||
GSM::CallState wState,
|
||||
const char *wMessage)
|
||||
const char *wMessage,
|
||||
bool wFake)
|
||||
:mID(gTransactionTable.newID()),
|
||||
mSubscriber(wSubscriber),mService(wService),
|
||||
mL3TI(gTMSITable.nextL3TI(wSubscriber.digits())),
|
||||
@@ -110,7 +111,9 @@ TransactionEntry::TransactionEntry(
|
||||
mNumSQLTries(gConfig.getNum("Control.NumSQLTries")),
|
||||
mChannel(wChannel),
|
||||
mTerminationRequested(false),
|
||||
mRemoved(false)
|
||||
mRemoved(false),
|
||||
mFake(wFake)
|
||||
|
||||
{
|
||||
if (wMessage) mMessage.assign(wMessage); //strncpy(mMessage,wMessage,160);
|
||||
else mMessage.assign(""); //mMessage[0]='\0';
|
||||
@@ -134,7 +137,8 @@ TransactionEntry::TransactionEntry(
|
||||
mNumSQLTries(gConfig.getNum("Control.NumSQLTries")),
|
||||
mChannel(wChannel),
|
||||
mTerminationRequested(false),
|
||||
mRemoved(false)
|
||||
mRemoved(false),
|
||||
mFake(false)
|
||||
{
|
||||
assert(mSubscriber.type()==GSM::IMSIType);
|
||||
mMessage.assign(""); //mMessage[0]='\0';
|
||||
@@ -157,7 +161,8 @@ TransactionEntry::TransactionEntry(
|
||||
mNumSQLTries(2*gConfig.getNum("Control.NumSQLTries")),
|
||||
mChannel(wChannel),
|
||||
mTerminationRequested(false),
|
||||
mRemoved(false)
|
||||
mRemoved(false),
|
||||
mFake(false)
|
||||
{
|
||||
mMessage.assign(""); //mMessage[0]='\0';
|
||||
initTimers();
|
||||
@@ -180,7 +185,8 @@ TransactionEntry::TransactionEntry(
|
||||
mNumSQLTries(gConfig.getNum("Control.NumSQLTries")),
|
||||
mChannel(wChannel),
|
||||
mTerminationRequested(false),
|
||||
mRemoved(false)
|
||||
mRemoved(false),
|
||||
mFake(false)
|
||||
{
|
||||
assert(mSubscriber.type()==GSM::IMSIType);
|
||||
if (wMessage!=NULL) mMessage.assign(wMessage); //strncpy(mMessage,wMessage,160);
|
||||
@@ -202,7 +208,8 @@ TransactionEntry::TransactionEntry(
|
||||
mNumSQLTries(gConfig.getNum("Control.NumSQLTries")),
|
||||
mChannel(wChannel),
|
||||
mTerminationRequested(false),
|
||||
mRemoved(false)
|
||||
mRemoved(false),
|
||||
mFake(false)
|
||||
{
|
||||
assert(mSubscriber.type()==GSM::IMSIType);
|
||||
mMessage[0]='\0';
|
||||
@@ -955,7 +962,10 @@ bool TransactionTable::removePaging(unsigned key)
|
||||
if (itr==mTable.end()) return false;
|
||||
if (itr->second->removed()) return true;
|
||||
if (itr->second->GSMState()!=GSM::Paging) return false;
|
||||
itr->second->MODSendERROR(NULL, 480, "Temporarily Unavailable", true);
|
||||
//no one to respond to if we're fake
|
||||
if (!itr->second->fake()){
|
||||
itr->second->MODSendERROR(NULL, 480, "Temporarily Unavailable", true);
|
||||
}
|
||||
itr->second->remove();
|
||||
return true;
|
||||
}
|
||||
|
@@ -98,6 +98,8 @@ class TransactionEntry {
|
||||
|
||||
volatile bool mRemoved; ///< true if ready for removal
|
||||
|
||||
bool mFake; ///true if this is a fake message generated internally
|
||||
|
||||
public:
|
||||
|
||||
/** This form is used for MTC or MT-SMS with TI generated by the network. */
|
||||
@@ -107,7 +109,8 @@ class TransactionEntry {
|
||||
const GSM::L3CMServiceType& wService,
|
||||
const GSM::L3CallingPartyBCDNumber& wCalling,
|
||||
GSM::CallState wState = GSM::NullState,
|
||||
const char *wMessage = NULL);
|
||||
const char *wMessage = NULL,
|
||||
bool wFake=false);
|
||||
|
||||
/** This form is used for MOC, setting mGSMState to MOCInitiated. */
|
||||
TransactionEntry(const char* proxy,
|
||||
@@ -159,6 +162,8 @@ class TransactionEntry {
|
||||
|
||||
const GSM::L3CallingPartyBCDNumber& calling() const { return mCalling; }
|
||||
|
||||
bool fake() const {return mFake; }
|
||||
|
||||
const char* message() const { return mMessage.c_str(); }
|
||||
void message(const char *wMessage, size_t length);
|
||||
const char* messageType() const { return mContentType.c_str(); }
|
||||
|
Reference in New Issue
Block a user