Merge "DO NOT MERGE: Support for parsing of "folded" RTSP header values" into ics-mr1

This commit is contained in:
Andreas Huber
2011-12-13 11:59:50 -08:00
committed by Android (Google) Code Review
2 changed files with 31 additions and 9 deletions

View File

@@ -79,13 +79,17 @@ ARTPAssembler::AssemblyStatus AAMRAssembler::assembleMore(
} }
static size_t getFrameSize(bool isWide, unsigned FT) { static size_t getFrameSize(bool isWide, unsigned FT) {
static const size_t kFrameSizeNB[8] = { static const size_t kFrameSizeNB[9] = {
95, 103, 118, 134, 148, 159, 204, 244 95, 103, 118, 134, 148, 159, 204, 244, 39
}; };
static const size_t kFrameSizeWB[9] = { static const size_t kFrameSizeWB[10] = {
132, 177, 253, 285, 317, 365, 397, 461, 477 132, 177, 253, 285, 317, 365, 397, 461, 477, 40
}; };
if (FT == 15) {
return 1;
}
size_t frameSize = isWide ? kFrameSizeWB[FT] : kFrameSizeNB[FT]; size_t frameSize = isWide ? kFrameSizeWB[FT] : kFrameSizeNB[FT];
// Round up bits to bytes and add 1 for the header byte. // Round up bits to bytes and add 1 for the header byte.
@@ -161,8 +165,8 @@ ARTPAssembler::AssemblyStatus AAMRAssembler::addPacket(
unsigned FT = (toc >> 3) & 0x0f; unsigned FT = (toc >> 3) & 0x0f;
if ((toc & 3) != 0 if ((toc & 3) != 0
|| (mIsWide && FT > 8) || (mIsWide && FT > 9 && FT != 15)
|| (!mIsWide && FT > 7)) { || (!mIsWide && FT > 8 && FT != 15)) {
queue->erase(queue->begin()); queue->erase(queue->begin());
++mNextExpectedSeqNo; ++mNextExpectedSeqNo;

View File

@@ -659,6 +659,7 @@ bool ARTSPConnection::receiveRTSPReponse() {
} }
AString line; AString line;
ssize_t lastDictIndex = -1;
for (;;) { for (;;) {
if (!receiveLine(&line)) { if (!receiveLine(&line)) {
break; break;
@@ -668,7 +669,21 @@ bool ARTSPConnection::receiveRTSPReponse() {
break; break;
} }
LOGV("line: %s", line.c_str()); LOGV("line: '%s'", line.c_str());
if (line.c_str()[0] == ' ' || line.c_str()[0] == '\t') {
// Support for folded header values.
if (lastDictIndex < 0) {
// First line cannot be a continuation of the previous one.
return false;
}
AString &value = response->mHeaders.editValueAt(lastDictIndex);
value.append(line);
continue;
}
ssize_t colonPos = line.find(":"); ssize_t colonPos = line.find(":");
if (colonPos < 0) { if (colonPos < 0) {
@@ -681,9 +696,12 @@ bool ARTSPConnection::receiveRTSPReponse() {
key.tolower(); key.tolower();
line.erase(0, colonPos + 1); line.erase(0, colonPos + 1);
line.trim();
response->mHeaders.add(key, line); lastDictIndex = response->mHeaders.add(key, line);
}
for (size_t i = 0; i < response->mHeaders.size(); ++i) {
response->mHeaders.editValueAt(i).trim();
} }
unsigned long contentLength = 0; unsigned long contentLength = 0;