summaryrefslogtreecommitdiffstats
path: root/src/device/device_network.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/device/device_network.cpp')
-rw-r--r--src/device/device_network.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/device/device_network.cpp b/src/device/device_network.cpp
index e526519..bd8467b 100644
--- a/src/device/device_network.cpp
+++ b/src/device/device_network.cpp
@@ -63,13 +63,17 @@ int udp_flush(void)
size_t udp_get_data(char *buf, size_t size)
{
size_t ret;
+
+ state.udp.parsePacket();
+
if ((ret = state.udp.available())) {
state.udp.read(buf, size);
}
+
return ret;
}
-void discover_client(const int port)
+IPAddress *discover_client(const int port)
{
IPAddress bcastip(255, 255, 255, 255);
char buffer[128] = {0};
@@ -92,20 +96,19 @@ void discover_client(const int port)
delay(5);
expected_s = sizeof(field.head) + sizeof(heartbeat_server);
- while (state.udp.parsePacket()) {
- if (state.udp.available() >= expected_s) {
- state.udp.read(buffer, sizeof(buffer));
- tlv_get(buffer, &field, NULL);
- if (field.head.type == HEARTBEAT && !(strcmp(heartbeat_server, field.data))) {
- state.daemon_ip = state.udp.remoteIP();
- ++state.acquired;
- }
+ if (udp_get_data(buffer, sizeof(buffer)) >= expected_s) {
+ tlv_get(buffer, &field, NULL);
+ if (field.head.type == HEARTBEAT && !(strcmp(heartbeat_server, field.data))) {
+ state.daemon_ip = state.udp.remoteIP();
+ ++state.acquired;
}
}
delay(95);
} while (!state.acquired);
tlv_packet_destroy(&pack);
+
+ return &state.daemon_ip;
}
IPAddress *get_daemon_address(void)