I'm writing a renderer proxy which passes CP invocations to the real renderer and passes renderer event notifications to the CP.
If your are proxying, then IMHO you should just pass on what you get.
This is the initial event notification (see section 4.1 of the UPnP Device Architecture specification). The initial event notification must be received and processed before other events can be processed. If the control point rejects the initial event, this would mean that eventing is completely disabled for this renderer.
No. It would only be disabled for that particular
service (ConnectionManager) on that renderer.
These evented state variables are a required part of the UPnP specification for ConnectionManager:1. Any device that claims to be a UPnP renderer (as MC does) should support them.
Yes. And all renderers that I have seen do actually support those state variables. But not all of them accurately support
eventing on those state variables...
This would work if the control point could safely assume that the value will never change.
Personally I would just call GetProtocolInfo every time just before I wanted to push something to the player.
But in reality is extremely unlikely that a renderer would suddenly change the list of formats that it can play; and if it did so, then it is quite likely that it would go bye-bye in between. Or ??
The problem with this is that some renderers don't send complete and correct protocol information, so a control point that does these checks might refuse to send a stream to a renderer even though the renderer would be able to handle the stream. Also, there is enormous confusion over which MIME types are correct for various stream types, which can cause a similar problem.
Yes. This is indeed the argument that many CP writers use as a justification for not calling GetProtocolInfo and just pushing whatever they darn well choose.