parse function
Implementation
Map<String, dynamic> parse(String sdp) {
Map<String, dynamic> session = Map<String, dynamic>();
var medias = [];
var location =
session; // points at where properties go under (one of the above)
// parse lines we understand
LineSplitter().convert(sdp).forEach((l) {
if (l != '') {
var type = l[0];
var content = l.substring(2);
if (type == 'm') {
Map<String, dynamic> media = createMap();
media['rtp'] = [];
media['fmtp'] = [];
location = media; // point at latest media line
medias.add(media);
}
if (grammar[type] != null) {
for (var j = 0; j < grammar[type]!.length; j += 1) {
var obj = grammar[type]![j];
if (obj['reg'] == null) {
if (obj['name'] != null) {
location[obj['name'] as String] = content;
} else {
print("trying to add null key");
}
continue;
}
if (obj['reg'] is RegExp) {
if ((obj['reg'] as RegExp).hasMatch(content)) {
parseReg(obj, location, content);
return;
}
} else if (RegExp(obj['reg'] as String).hasMatch(content)) {
parseReg(obj, location, content);
return;
}
}
if (location['invalid'] == null) {
location['invalid'] = [];
}
Map tmp = createMap();
tmp['value'] = content;
location['invalid'].add(tmp);
} else {
print("ERROR unknown grammer type " + type);
}
}
});
session['media'] = medias; // link it up
return session;
}