fidgetingbits / IDArling

Collaborative Reverse Engineering plugin for IDA Pro & Hex-Rays
https://idarling.re
GNU General Public License v3.0
145 stars 19 forks source link

Manually disconnecting and reconnecting to a server doesn't trigger a JoinSession #36

Open paulfariello-syn opened 4 years ago

paulfariello-syn commented 4 years ago

Running IDArling on d4e823a5a (current master) with a standalone server.

Manually disconnecting and reconnecting to a server doesn't trigger a JoinSession, then IDArling is not usable since the joining user doesn't see the already connected user and the following stack trace append for each received packet (preventing any event to be propagated correctly).

Traceback (most recent call last):
  File "idarling/shared/sockets.py", line 302, in event
    self._dispatch()
  File "idarling/shared/sockets.py", line 320, in _dispatch
    elif not self.recv_packet(packet):
  File "idarling/network/client.py", line 80, in recv_packet
    self._handlers[packet.__class__](packet)
  File "idarling/network/client.py", line 134, in _handle_leave_session
    user = self._plugin.core.remove_user(packet.name)
  File "idarling/core/core.py", line 123, in remove_user
    user = self._users.pop(name)
KeyError: 'Bob'
saidelike commented 4 years ago

I don't seem to be able to replicate this.

I tried the following:

Right clicking on "Connected" to make it "Disconnected" in IDA taskbar (i.e. IDArling bar)

This is what I get in IDA console:

[idarling][INFO] Disconnecting...
[idarling][DEBUG] Disconnected
[idarling][INFO] Connecting to 10.w.w.w:yyyy...
[idarling][INFO] Connected
[idarling][DEBUG] Joining session
[idarling][DEBUG] Sending packet: ListDatabases.Query(group=testing-only, project=rawcap)
[idarling][DEBUG] Received packet: ListDatabases.Reply(databases=[Database(group_name=testing-only, project=rawcap, name=001, date=2020/03/16 12:16, tick=0)])
[idarling][DEBUG] Database is on the server
[idarling][DEBUG] Sending packet: JoinSession(group=testing-only, project=rawcap, database=001, tick=0, name=cedric, color=16775936, ea=120, silent=True)

And on the server side:

[idarling][DEBUG] (10.x.x.x:65258) Disconnected
[idarling][INFO] (10.x.x.x.x:65258) Disconnected
[idarling][INFO] (10.x.x.x.x:65259) Connected
[idarling][INFO] (10.x.x.x.x:65259) Connected
[idarling][DEBUG] (10.x.x.x.x:65259) Received packet: ListDatabases.Query(type=command, command_type=list_databases_query, group=testing-only, project=rawcap)
[idarling][INFO] (10.x.x.x:65259) Got list databases request
[idarling][DEBUG] (10.x.x.x:65259) Sending packet: ListDatabases.Reply(databases=[Database(group_name=testing-only, project=rawcap, name=001, date=2020/03/16 12:16, tick=0)])
[idarling][DEBUG] (10.x.x.x:65259) Received packet: JoinSession(type=command, command_type=join_session, group=testing-only, project=rawcap, database=001, tick=0, name=cedric, color=16775936, ea=120, silent=True)
[idarling][DEBUG] (10.x.x.x:65259) Sending 0 missed events...
[idarling][DEBUG] (10.x.x.x:65259) Done sending 0 missed events