Add context to the listresp packet construction
Currently, a LISTREQ responds with a LISTRESP packet, and includes all server sessions. We want it changed so that the client can pre-determine what servers it is looking for without having to fetch the entire server list, and then query each server.
Change the composition of the responded list to be ( in pseudo ):
for each server data item
for each client session filter attribute
if server contains attribute, and attribute matches filter value ( possibly regex ? )
add server to response list.
done
done
Make sure to have an option that implies "send me servers that have no attributes" in order to allow filtering setup, but account for old servers that have not set any attributes.
So for example:
- old cyphesis server registers, sets no attributes
- new cyphesis server registers, sets the following attributes:
GAME=Mason
SERVER=cyphesis
VERSION=0.2.23
- client sets filter attributes:
SERVER=cyphesis
- client sets option:
STRICTFILTER ( or something, this is not determined yet )
- client sends a LISTREQ packet, as normal.
Use Case 1: client has set STRICTFILTER
- LISTRESP only contains the new server that has the attribute set ( essentially treating missing criteria as a failed match )
Use Case 2: client has NOT set STRICTFILTER
- LISTRESP packet contains *BOTH* the new and old servers even though the old server doesn't match the criteria ( essentially missing criteria is treated as a match )
This gives the client option. Default to no strictfilter.