Server.addEarlyHandler

Adds an "early" handler to @server for requests under @path. Note that "normal" and "early" handlers are matched up together, so if you add a normal handler for "/foo" and an early handler for "/foo/bar", then a request to "/foo/bar" (or any path below it) will run only the early handler. (But if you add both handlers at the same path, then both will get run.)

For requests under @path (that have not already been assigned a status code by a #SoupAuthDomain or a signal handler), @callback will be invoked after receiving the request headers, but before receiving the request body; the message's #SoupMessage:method and #SoupMessage:request-headers fields will be filled in.

Early handlers are generally used for processing requests with request bodies in a streaming fashion. If you determine that the request will contain a message body, normally you would call soup_message_body_set_accumulate() on the message's #SoupMessage:request-body to turn off request-body accumulation, and connect to the message's #SoupMessage::got-chunk signal to process each chunk as it comes in.

To complete the message processing after the full message body has been read, you can either also connect to #SoupMessage::got-body, or else you can register a non-early handler for @path as well. As long as you have not set the #SoupMessage:status-code by the time #SoupMessage::got-body is emitted, the non-early handler will be run as well.

class Server
void
addEarlyHandler
(
string path
,,
void* userData
,
GDestroyNotify destroy
)

Parameters

path string

the toplevel path for the handler

callback SoupServerCallback

callback to invoke for requests under @path

userData void*

data for @callback

destroy GDestroyNotify

destroy notifier to free @user_data

Meta

Since

2.50