I have changed trunk on my local fork to accept a callback on flow Control on a link. That way I can encapsulate my own Semaphore before calling a producer, or intercept flow control before routing on the HornetQ's server.
Right now the flow control is pretty much only done inside Proton meaning that either side will just keep sending forever until the memory was exausted.. with this sort of callback I could intercept what I needed and do the proper pauses accordingly. I didn't find this functionality anywhere else, in case the implementation is valid.. what's the right way to contribute this? (notice I didn't write a testcase yet as I'm still learning the way of things on the project.. but I'm doing pretty well already on hacking this). It's a simple change I know. But I believe I could have more to come... https://github.com/clebertsuconic/qpid-proton/commit/681b129963639cae52fd83d1abb453bedbdb3955