[fix] fix crash when a device disappears from network
This commit is contained in:
@@ -103,7 +103,7 @@ static void browse_callback(
|
|||||||
case AVAHI_BROWSER_REMOVE:
|
case AVAHI_BROWSER_REMOVE:
|
||||||
fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain);
|
fprintf(stderr, "(Browser) REMOVE: service '%s' of type '%s' in domain '%s'\n", name, type, domain);
|
||||||
//teleport_app_remove_peer(name);
|
//teleport_app_remove_peer(name);
|
||||||
teleport_peer_remove_peer(peerList, g_strdup(name));
|
teleport_peer_remove_peer_by_name(peerList, g_strdup(name));
|
||||||
break;
|
break;
|
||||||
case AVAHI_BROWSER_ALL_FOR_NOW:
|
case AVAHI_BROWSER_ALL_FOR_NOW:
|
||||||
case AVAHI_BROWSER_CACHE_EXHAUSTED:
|
case AVAHI_BROWSER_CACHE_EXHAUSTED:
|
||||||
|
|||||||
@@ -98,11 +98,11 @@ void teleport_peer_add_peer (TeleportPeer *self, gchar * name, gchar * ip, gint
|
|||||||
|
|
||||||
void teleport_peer_remove_peer (TeleportPeer *self, Peer *device)
|
void teleport_peer_remove_peer (TeleportPeer *self, Peer *device)
|
||||||
{
|
{
|
||||||
Peer element;
|
Peer *element;
|
||||||
gboolean found = FALSE;
|
gboolean found = FALSE;
|
||||||
//Maybe I could just compare the addresses
|
//Maybe I could just compare the addresses
|
||||||
for (int i = 0; i < self->list->len && !found; i++) {
|
for (int i = 0; i < self->list->len && !found; i++) {
|
||||||
Peer *element = g_array_index(self->list, Peer *, i);
|
element = g_array_index(self->list, Peer *, i);
|
||||||
if (g_strcmp0(element->name, device->name) == 0) {
|
if (g_strcmp0(element->name, device->name) == 0) {
|
||||||
found = TRUE;
|
found = TRUE;
|
||||||
g_array_remove_index(self->list, i);
|
g_array_remove_index(self->list, i);
|
||||||
@@ -111,3 +111,18 @@ void teleport_peer_remove_peer (TeleportPeer *self, Peer *device)
|
|||||||
g_signal_emit (self, signalIds[REMOVE], 0, device);
|
g_signal_emit (self, signalIds[REMOVE], 0, device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void teleport_peer_remove_peer_by_name (TeleportPeer *self, gchar *name)
|
||||||
|
{
|
||||||
|
|
||||||
|
g_print("Remove this device %s", name);
|
||||||
|
Peer *element;
|
||||||
|
gboolean found = FALSE;
|
||||||
|
for (int i = 0; i < self->list->len && !found; i++) {
|
||||||
|
element = g_array_index(self->list, Peer *, i);
|
||||||
|
if (g_strcmp0(element->name, name) == 0) {
|
||||||
|
found = TRUE;
|
||||||
|
g_array_remove_index(self->list, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g_signal_emit (self, signalIds[REMOVE], 0, element);
|
||||||
|
}
|
||||||
|
|||||||
@@ -18,5 +18,6 @@ gchar* teleport_peer_get_ip (TeleportPeer *self, gint index, GError **error);
|
|||||||
gint teleport_peer_get_port (TeleportPeer *self, gint index, GError **error);
|
gint teleport_peer_get_port (TeleportPeer *self, gint index, GError **error);
|
||||||
void teleport_peer_add_peer (TeleportPeer *self, gchar * name, gchar * ip, gint port);
|
void teleport_peer_add_peer (TeleportPeer *self, gchar * name, gchar * ip, gint port);
|
||||||
void teleport_peer_remove_peer (TeleportPeer *, Peer *);
|
void teleport_peer_remove_peer (TeleportPeer *, Peer *);
|
||||||
|
void teleport_peer_remove_peer_by_name (TeleportPeer *, gchar *);
|
||||||
|
|
||||||
#endif /* __TELEPORTPEER_H */
|
#endif /* __TELEPORTPEER_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user