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