Looks pretty good.
Do we know the license of the CRC code? That's probably important.
I think the t_datahandler_payload struct can be streamlined a bit -
there's no real need for both request and response fields.
The convention is to put "t_" at the end btw... ie. uint32_t.
Also to use zero-length arrays for payloads.
typedef struct
{
char* request_id;
matahari_message_type_t payload_type;
unsigned long payload_length;
unsigned long payload_crc;
char payload[0];
} matahari_message_t;
I'd also advise adding a MH_ prefix to the members of the
matahari_message_type_t enum.
multiplexer_get_api_function() is probably ok for now, but we might
want to think about using a hash table to speed it up a bit.
[dropping the patch so that I don't hit the ML message size limit]