Fixed zero length sms message in both text and 3gpp mode. Fixed many crahses along the way. Changes were made in openbts and smqueue. Fixed issue with loading smqueue from back up file. All cases of plain text and 3gpp are working now. Improved logging in smqueue. Fixed error where data was be sent in 3gpp mode when text was selected.

This commit is contained in:
svangundy 2014-03-31 12:34:00 +02:00 committed by Michael Iedema
parent 778aa50799
commit 7c1ebc3899
2 changed files with 29 additions and 22 deletions

View File

@ -31,6 +31,7 @@
#include <stdio.h>
#include <sstream>
#include <string.h>
#include <Logger.h>
using namespace std;
@ -54,14 +55,11 @@ BitVector::BitVector(const char *valString)
}
uint64_t BitVector::peekField(size_t readIndex, unsigned length) const
{
uint64_t accum = 0;
char *dp = mStart + readIndex;
assert(dp+length <= mEnd);
for (unsigned i=0; i<length; i++) {
accum = (accum<<1) | ((*dp++) & 0x01);
}
@ -95,35 +93,40 @@ uint64_t BitVector::readField(size_t& readIndex, unsigned length) const
uint64_t BitVector::readFieldReversed(size_t& readIndex, unsigned length) const
{
const uint64_t retVal = peekFieldReversed(readIndex,length);
readIndex += length;
return retVal;
}
}
void BitVector::fillField(size_t writeIndex, uint64_t value, unsigned length)
{
char *dpBase = mStart + writeIndex;
char *dp = dpBase + length - 1;
assert(dp < mEnd);
while (dp>=dpBase) {
*dp-- = value & 0x01;
value >>= 1;
if (length != 0) {
char *dpBase = mStart + writeIndex;
char *dp = dpBase + length - 1;
assert(dp < mEnd);
while (dp>=dpBase) {
*dp-- = value & 0x01;
value >>= 1;
}
}
}
void BitVector::fillFieldReversed(size_t writeIndex, uint64_t value, unsigned length)
{
char *dp = mStart + writeIndex;
char *dpEnd = dp + length - 1;
assert(dpEnd < mEnd);
while (dp<=dpEnd) {
*dp++ = value & 0x01;
value >>= 1;
if (length != 0) {
char *dp = mStart + writeIndex;
char *dpEnd = dp + length - 1;
assert(dpEnd < mEnd);
while (dp<=dpEnd) {
*dp++ = value & 0x01;
value >>= 1;
}
}
}
@ -132,15 +135,19 @@ void BitVector::fillFieldReversed(size_t writeIndex, uint64_t value, unsigned le
void BitVector::writeField(size_t& writeIndex, uint64_t value, unsigned length)
{
fillField(writeIndex,value,length);
writeIndex += length;
if (length != 0) {
fillField(writeIndex,value,length);
writeIndex += length;
}
}
void BitVector::writeFieldReversed(size_t& writeIndex, uint64_t value, unsigned length)
{
fillFieldReversed(writeIndex,value,length);
writeIndex += length;
if (length != 0) {
fillFieldReversed(writeIndex,value,length);
writeIndex += length;
}
}

View File

@ -140,7 +140,7 @@ template <class T> class VectorBase
void vInit(size_t elements)
{
mData = elements ? new T[elements] : NULL;
mStart = mData;
mStart = mData; // This is where mStart get set to zero
mEnd = mStart + elements;
}