Server: IAC WILL MSDP
Client: IAC DO MSDP
Client: IAC SB MSDP MSDP_VAR "SEND" MSDP_VAL "CONFIG:BLANK" IAC SE
Server: IAC SB MSDP MSDP_VAR "CONFIG:BLANK" MSDP_VAL "0" IAC SE
Client: IAC DONT MSDP
Server: IAC WONT MSDP
Client: IAC WILL MSDP
Server: IAC DO MSDP
Client: IAC SB MSDP MSDP_VAR "CONFIG:BLANK" MSDP_VAL "1" IAC SE
Client: IAC WONT MSDP
Server: IAC DONT MSDP
Client: IAC DO MSDP
Server: IAC WILL MSDP
Client: IAC SB MSDP MSDP_VAR "SEND" MSDP_VAL "CONFIG:BLANK" IAC SE
Server: IAC SB MSDP MSDP_VAR "CONFIG:BLANK" MSDP_VAL "1" IAC SE
Server: IAC WILL MSDP
Client: IAC DO MSDP
Server: IAC DO MSDP
Client: IAC WILL MSDP
Client: IAC SB MSDP MSDP_VAR "SEND" MSDP_VAL "CONFIG:BLANK" IAC SE
Server: IAC SB MSDP MSDP_VAR "CONFIG:BLANK" MSDP_VAL "0" IAC SE
Client: IAC SB MSDP MSDP_VAR "CONFIG:BLANK" MSDP_VAL "1" IAC SE
Client: IAC SB MSDP MSDP_VAR "SEND" MSDP_VAL "CONFIG:BLANK" IAC SE
Server: IAC SB MSDP MSDP_VAR "CONFIG:BLANK" MSDP_VAL "1" IAC SE
Well ATCP already sends messages in both directions, so you could use that as a reference. In the case of ATCP the server sends DO, but in this case I think WILL is more appropriate, as the server is doing most of the work.
The ATCP specification is oddly written, I get the feeling they never took a close look at how NEW-ENVIRON or TELNET in general works. As far as I can tell it'll be fairly easy for a server to send IAC DO MSDP IAC WILL MSDP. I must admit that I can't think of a good practical example of where this behavior is actually useful. The best thing that comes to mind is that a server wants to use MSDP for sending data, but use a different protocol (plain text for example) for receiving data.
It was more a reference to the observer pattern. But I don't think it needs to be part of the standard anyway - as far as MSDP is concerned, it's just another message.
Not necessarily, but it's important to standardize things somewhat so scripts won't need too much adjustment to work across servers.
SEND: Tell the server to send the specified variable/s once.
OBSERVE: Tell the server to send the specified variable/s every time it changes.
INPUT: Tell the server to parse the specified variable/s as input.
To keep a consistent tone and point of reference I strongly prefer: SEND, REPORT, and EXECUTE. Otherwise you go from telling the server what to do (SEND), to telling the server what the client is doing (OBSERVE), to what your data is (INPUT).
Same story as above, how about: IAC SB MSDP VAR "LIST" VAL "COMMANDS" IAC SE upon which the other party responds with: IAC SB MSDP VAR "COMMANDS" VAL "SEND" VAL "REPORT" VAL "EXECUTE" VAL "LIST" IAC SE
I'll go ahead and make some changes. If you're reading this Tyche, your feedback would be appreciated, and for that matter from anyone else who is interested.
I think many people on MudStandards would feel threatened by MSDP, not understanding that MSDP is not in competition with ATCP (or ZMP for that matter). MSDP is intended as a server->client_user data protocol, and ATCP more so as a server->client_developer master/slave protocol with package that define how the client should respond to the server.
I also think I'll get much more done discussing this with a handful of interested individuals rather than spending most of my time refuting baseless arguments/accusations by people who aren't really all that interested, or have conflicting interests. Also, MSDP specifically caters to the environment independent needs of TinTin++, and with me in charge of the specification there are the limitations of my objectivity, reasoning, and intelligence.
The plus side is that the actual protocol is very simple, and all the variables are merely suggestions.