findSoap function
Implementation
Future<Soap?> findSoap() async {
final udp = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 0);
Soap? url;
udp.listen((RawSocketEvent e) async {
final d = udp.receive();
if (d == null) return;
final msg =
String.fromCharCodes(d.data).replaceAll('\r\n', '\n').split('\n');
if (msg.isNotEmpty) {
final pos = msg.indexWhere((i) => i.contains('200 OK'));
if (pos >= 0) {
for (var i in msg.sublist(pos)) {
i = i.trim();
const location = 'LOCATION';
if (i.startsWith(location)) {
final pos = i.indexOf(':', location.length);
if (pos > 0) {
url = await controlUrl(i.substring(pos + 1).trim());
break;
}
}
}
}
}
//callback(false);
//udp.send(message.codeUnits, d.address, d.port);
});
var n = 3;
do {
udp.send(mSearch, InternetAddress('239.255.255.250'), 1900);
await sleep(1);
if (url != null) {
break;
}
} while (n-- > 0 && url == null);
udp.close();
return url;
}