Merge "DO NOT MERGE: Support for parsing of "folded" RTSP header values" into ics-mr1
This commit is contained in:
committed by
Android (Google) Code Review
commit
3ab6300840
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user