175
175
return (string) (*this)[SDP_SESSION][SDP_S];
178
bool SDP::ParseTransportLine(string raw, Variant &result) {
182
vector<string> parts;
183
split(raw, ";", parts);
185
//2. Construct the result
186
for (uint32_t i = 0; i < parts.size(); i++) {
187
string part = parts[i];
191
string::size_type pos = part.find('=');
192
if (pos == string::npos) {
193
result[lowerCase(part)] = (bool)true;
196
result[lowerCase(part.substr(0, pos))] = part.substr(pos + 1);
200
ADD_VECTOR_END(keys, "client_port");
201
ADD_VECTOR_END(keys, "server_port");
202
ADD_VECTOR_END(keys, "interleaved");
204
for (uint32_t i = 0; i < keys.size(); i++) {
205
string key = keys[i];
206
if (!result.HasKey(key))
209
raw = (string) result[key];
210
split(raw, "-", parts);
211
if ((parts.size() != 2) && (parts.size() != 1)) {
212
FATAL("Invalid transport line: %s", STR(raw));
218
if (parts.size() == 2) {
219
data = atoi(STR(parts[0]));
220
rtcp = atoi(STR(parts[1]));
221
if (((data % 2) != 0) || ((data + 1) != rtcp)) {
222
FATAL("Invalid transport line: %s", STR(raw));
225
all = format("%"PRIu16"-%"PRIu16, data, rtcp);
227
data = atoi(STR(parts[0]));
228
all = format("%"PRIu16, data);
232
FATAL("Invalid transport line: %s", STR(raw));
235
result.RemoveKey(key);
236
result[key]["data"] = (uint16_t) data;
237
result[key]["rtcp"] = (uint16_t) rtcp;
238
result[key]["all"] = all;
178
244
bool SDP::ParseSection(Variant &result, vector<string> &lines,
179
245
uint32_t start, uint32_t length) {
180
246
for (uint32_t i = 0; ((i + start) < lines.size()) && (i < length); i++) {