From cf23cf96b3e8beb23d65dc503db7c69e5c258f80 Mon Sep 17 00:00:00 2001 From: Derek Dai Date: Fri, 30 Sep 2016 23:04:53 +0800 Subject: [PATCH] fix byte order of DHCP_SERVER_ID option If miraclecat is GO, miracle-dhcp runs as server, it send out SERVER_ID option in little endian, causes non-GO peer connect to wrong IP address, so RTSP connection can't be established. In scenario like, say Android (GO) <-> miracalcast (non-GO), the DHCP service is provided by Android, in this case, the SERVER_ID is in expected byte order (big endian). --- src/dhcp/server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dhcp/server.c b/src/dhcp/server.c index 3484920..b9c7be3 100644 --- a/src/dhcp/server.c +++ b/src/dhcp/server.c @@ -456,7 +456,7 @@ static void init_packet(GDHCPServer *dhcp_server, struct dhcp_packet *packet, packet->gateway_nip = client_packet->gateway_nip; packet->ciaddr = client_packet->ciaddr; dhcp_add_option_uint32(packet, DHCP_SERVER_ID, - dhcp_server->server_nip); + get_be32(&dhcp_server->server_nip)); } static void add_option(gpointer key, gpointer value, gpointer user_data) @@ -675,7 +675,7 @@ static gboolean listener_event(GIOChannel *channel, GIOCondition condition, server_id_option = dhcp_get_option(&packet, DHCP_SERVER_ID); if (server_id_option) { - uint32_t server_nid = get_be32(server_id_option); + uint32_t server_nid = get_unaligned((uint32_t *) server_id_option); if (server_nid != dhcp_server->server_nip) return TRUE;