parse function

Map<String, dynamic> parse(
  1. String sdp
)

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;
}