Known issues - HelloZeroNet/Plugin-PeerMessage GitHub Wiki

"SystemPing" problem

Pretend there are two peers. Let's call them A and B. Now pretend A has PeerMessage plugin and B hasn't.

Now see what happens if A wants to broadcast a message. Pretend he chooses B as one of the peers. He sends a message to B via peerBroadcast peer command (see Internals). However, B doesn't have the plugin, so he doesn't know about this peer command. So he decides that the command is invalid and adds ban points to A. Oops.

Now pretend that most peers don't have the plugin. E.g. B, C, D, E, F, etc. Now A wants to broadcast a message. Pretend he (randomly) chooses B, C, D, E and F. Those peers don't have the plugin and don't know how to broadcast message to others. So A is now the only peer who has the message. Oops.

Currently this is fixed by making a site called "hub", to/from which messages are sent/received. The hub is downloaded by the main site (called "merger site") only if the plugin is enabled (see serverInfo docs). See also: Tutorials ‐ Hubs.

The story of "SystemPing" name

I think the first guy to use SystemPing word was @Thunder33345 (see here). Basically, the idea was the following:

The problem is: we need to detect which peers have the plugin. We can't ask them whether they have it, because it would break anonymity. Secondly: hasThisPlugin command would be handled by the plugin itself, so it wouldn't be known by other peers! Banpoints. Oops.

So the peers have to tell us whether they have the plugin theirselves. Here comes SystemPing. We'll broadcast SystemPing everywhere. Maybe UDP broadcast. Maybe using another command (like fileGet), but with some weird arguments, so the peers wouldn't add banpoints, but would be able to understand that that peer has the plugin. Now the peers who get SystemPing would reply with SystemPong.

However, this would be hardly implementable, and, if there were commands which wouldn't add banpoints if the result is wrong, it would be a big security issue. (Google "spam").