The following exceptions are not declared in any raises() clause, therefore they cannot be raised! They should be removed or added to the right places.
Because the filtering language uses EventHeaders as filtering expressions (yeah, it sucks) we also use this field to pass timeout values into the EC filter.
: The class makes an extra copy of the events, we need to investigate if closer collaboration with its collocated EC could be used to remove that copy.
We don't need to provide a trivial filter, the object itself could short-circuit the filter() ---> push() cycle when the EC is properly configured, we need to explore this...
Marina Spivak made the following observation: these classes and implementation seem nearly identical to those in EC_Reactive_ConsumerControl.* The only differences are using consumer_admin collection vs supplier_admin, and calling disconnect_push_consumer vs disconnect_push_supplier ... Seems like it may be a good idea to change some naming and templatize...
The same templates should be used for the Notification and COS Event services.
Under some platforms, notably Linux, the fragmentation code in this method is woefully naive. The fragments are sent it a big burst, unfortunately, that can fill up the local kernel buffer before all the data is sent. In those circumstances some of the fragments are silently (gulp!) dropped by the kernel, check the documentation for sendto(2) specially the ENOBUFS error condition. There is no easy solution that I know off, except "pacing" the fragments, i.e. never sending more than a prescribed number of bytes per-second, sleeping before sending more or queueing them to send later via the reactor.
This class is an ACE_Service_Object, but the only reason for it is the need for easy configuration using files. Since ACE_Service_Object provides much more than that, we should look into replacing it with a more lightweight utility that would serve our needs.