handleControlRequest method

Future handleControlRequest(
  1. HttpRequest request
)

Implementation

Future handleControlRequest(HttpRequest request) async {
  final bytes =
      await request.fold(<int>[], (List<int> a, List<int> b) => a..addAll(b));
  final xml = XmlDocument.parse(utf8.decode(bytes));
  final root = xml.rootElement;
  final body = root.firstChild;
  var service = device.findService(request.uri.pathSegments.last);

  service ??=
      device.findService(Uri.decodeComponent(request.uri.pathSegments.last));

  if (service == null) {
    request.response.statusCode = HttpStatus.notFound;
    await request.response.close();
    return;
  }

  for (XmlNode node in body!.children) {
    if (node is XmlElement) {
      final name = node.name.local;
      UpnpHostAction act;
      try {
        act = service.actions.firstWhere((x) => x.name == name);
      } catch (e) {
        request.response.statusCode = HttpStatus.badRequest;
        await request.response.close();
        return;
      }

      if (act.handler != null) {
        // TODO(kaendfinger): make this have inputs and outputs.
        await act.handler!({});
        request.response.statusCode = HttpStatus.ok;
        await request.response.close();
        return;
      }
    }
  }
}