laforge
/
openbts-osmo
Archived
1
0
Fork 0

Transparently pass TP-UHDI (User-Data-Header-Indicator) from SMS-SUBMIT to SMS-DELIVER.

Among other things this allows us to correctly pass-through concatenated SMS messages.
This commit is contained in:
Alexander Chemeris 2010-11-05 21:45:19 +03:00 committed by Thomas Tsou
parent 63202cbf24
commit ef988a4b2f
2 changed files with 10 additions and 8 deletions

View File

@ -536,7 +536,6 @@ size_t TLUserData::length() const
// The reported value includes the length byte itself. // The reported value includes the length byte itself.
// The length() method only needs to work for formats supported // The length() method only needs to work for formats supported
// by the write() method. // by the write() method.
assert(!mUDHI); // We don't support user headers.
assert(mDCS<0x100); // Someone forgot to initialize the DCS. assert(mDCS<0x100); // Someone forgot to initialize the DCS.
size_t sum = 1; // Start by counting the TP-User-Data-Length byte. size_t sum = 1; // Start by counting the TP-User-Data-Length byte.
#if 1 #if 1
@ -677,10 +676,12 @@ size_t TLSubmit::bodyLength() const
void TLSubmit::parseBody(const TLFrame& src, size_t& rp) void TLSubmit::parseBody(const TLFrame& src, size_t& rp)
{ {
bool udhi;
parseRD(src); parseRD(src);
parseVPF(src); parseVPF(src);
parseRP(src); parseRP(src);
parseUDHI(src); udhi = parseUDHI(src);
parseSRR(src); parseSRR(src);
mMR = src.readField(rp,8); mMR = src.readField(rp,8);
mDA.parse(src,rp); mDA.parse(src,rp);
@ -689,6 +690,7 @@ void TLSubmit::parseBody(const TLFrame& src, size_t& rp)
mVP.VPF(mVPF); mVP.VPF(mVPF);
mVP.parse(src,rp); mVP.parse(src,rp);
mUD.DCS(mDCS); mUD.DCS(mDCS);
mUD.UDHI(udhi);
mUD.parse(src,rp); mUD.parse(src,rp);
} }
@ -699,7 +701,7 @@ void TLSubmit::text(ostream& os) const
os << " RD=" << mRD; os << " RD=" << mRD;
os << " VPF=" << mVPF; os << " VPF=" << mVPF;
os << " RP=" << mRP; os << " RP=" << mRP;
os << " UDHI=" << mUDHI; os << " UDHI=" << mUD.UDHI();
os << " SRR=" << mSRR; os << " SRR=" << mSRR;
os << " MR=" << mMR; os << " MR=" << mMR;
os << " DA=(" << mDA << ")"; os << " DA=(" << mDA << ")";
@ -721,7 +723,7 @@ void TLDeliver::writeBody(TLFrame& dest, size_t& wp) const
{ {
writeMMS(dest); writeMMS(dest);
writeRP(dest); writeRP(dest);
writeUDHI(dest); writeUDHI(dest, mUD.UDHI());
writeSRI(dest); writeSRI(dest);
mOA.write(dest,wp); mOA.write(dest,wp);
dest.writeField(wp,mPID,8); dest.writeField(wp,mPID,8);

View File

@ -259,7 +259,7 @@ class TLMessage {
bool mSRR; ///< status report request bool mSRR; ///< status report request
bool mSRI; ///< status report indication bool mSRI; ///< status report indication
bool mSRQ; ///< status report qualifier bool mSRQ; ///< status report qualifier
bool mUDHI; ///< user-data header-indicator // bool mUDHI; ///< user-data header-indicator. Stored in TLUserData.
bool mRP; ///< reply path bool mRP; ///< reply path
//@} //@}
@ -279,7 +279,7 @@ class TLMessage {
}; };
TLMessage() TLMessage()
:mMMS(false),mSRI(false),mUDHI(false),mRP(true) :mMMS(false),mSRI(false),mRP(true)
{} {}
virtual ~TLMessage(){} virtual ~TLMessage(){}
@ -320,8 +320,8 @@ class TLMessage {
void parseSRI(const TLFrame& fm) { mSRI=fm[2]; } void parseSRI(const TLFrame& fm) { mSRI=fm[2]; }
void writeSRQ(TLFrame& fm) const { fm[2]=mSRQ; } void writeSRQ(TLFrame& fm) const { fm[2]=mSRQ; }
void parseSRQ(const TLFrame& fm) { mSRQ=fm[2]; } void parseSRQ(const TLFrame& fm) { mSRQ=fm[2]; }
void writeUDHI(TLFrame& fm) const { fm[1]=mUDHI; } void writeUDHI(TLFrame& fm, bool udhi) const { fm[1]=udhi; }
void parseUDHI(const TLFrame& fm) { mUDHI=fm[1]; } bool parseUDHI(const TLFrame& fm) { return fm[1]; }
void writeRP(TLFrame& fm) const { fm[0]=mRP; } void writeRP(TLFrame& fm) const { fm[0]=mRP; }
void parseRP(const TLFrame& fm) { mRP=fm[0]; } void parseRP(const TLFrame& fm) { mRP=fm[0]; }
void writeUnused(TLFrame& fm) const { fm.fill(0,3,2); } ///< Fill unused bits with 0s void writeUnused(TLFrame& fm) const { fm.fill(0,3,2); } ///< Fill unused bits with 0s