Trickle message implementation
On the science app API, boinc_send_trickle_up() creates a file 'trickle_up.xml' in the slot directory and signals the core client via shared memory. When the core client gets this signal, or when the application exits, it moves the file from 'slot/trickle_up.xml' to 'project/trickle_up_resultname_time.xml'.
When the core client sends an RPC to a server, it scans the project directory for these trickle-up files includes them in the request, and appends '.sent' to their filenames. On successful RPC completion it deletes trickle-up files that were sent earlier.
On the server, messages are stored in database tables 'msg_from_host' and 'msg_to_host'. The scheduling server extracts trickle messages from the request message and inserts them in the msg_from_host table. If the 'trickle_down' flag in the configuration is set, it scans the database for trickle-down messages for this host and includes them in the reply message, setting the 'handled' flag in the DB record.
The client parses trickle-down messages in the scheduler reply, creates files of the form trickle_down_createtime_id in the slot directory, and signals the app via shared memory that a message is available.