<h3>Description</h3>
<p>Consuming messages without message body fails due to a JSON parsing error:</p>
<pre><code>ERROR: kazoo [kz_json.c:287]: kz_json_parse(): Error parsing json: unexpected end of data
ERROR: kazoo [kz_json.c:288]: kz_json_parse():
ERROR: kazoo [kz_amqp.c:2960]: kz_amqp_send_worker_event(): error parsing json body 
</code></pre>
<p>This makes it unable to consume messages from RabbitMQ's event exchange plugin ( <a href="https://www.rabbitmq.com/event-exchange.html" rel="nofollow">https://www.rabbitmq.com/event-exchange.html</a> ), as the documentatin states: <strong>"The message body is always blank."</strong></p>
<h3>Possible Solutions</h3>
<p>As a possible fix I tried following change in kz_amqp.c:</p>
<pre><code>void kz_amqp_send_worker_event(kz_amqp_server_ptr server_ptr, amqp_envelope_t* envelope, kz_amqp_bind_ptr bind)
{
    char buffer[100];
    kz_amqp_cmd_ptr cmd = NULL;
    kz_amqp_consumer_delivery_ptr ptr = NULL;
    json_obj_ptr json_obj = NULL;
    json_object* JObj = NULL;
    str* message_id = NULL;
    int idx = envelope->channel-1;
    int worker = 0;
    int _kz_server_id = server_ptr->id;
    int msg_size = envelope->message.body.len;
   
//begin of changes
    int routingkey_size = envelope->routing_key.len;
   
    if (msg_size == 0 && routingkey_size > 0 ) {
        char *routingkey_data = pkg_malloc(routingkey_size + 1);
        memset(routingkey_data, 0, routingkey_size + 1);
        memcpy(routingkey_data, (char*)envelope->routing_key.bytes, routingkey_size);
      
        LM_DBG("Message size: %d\n", msg_size);
        LM_DBG("Routing Key: %s\n", routingkey_data);

        char *pos = strchr(routingkey_data,'.');
        while (pos){
            *pos = '_';
            pos = strchr(pos,'.');
        }
       
        LM_DBG("New Routing Key: %s\n", routingkey_data);
        sprintf(buffer, "kazoo:%s", routingkey_data);

        if(kz_amqp_consumer_fire_event(buffer) != 0) {
            LM_ERR("kazoo:%s not found", routingkey_data);
        }

        pkg_free(routingkey_data);
        return;
    }

    char *json_data = pkg_malloc(msg_size + 1);
    if(!json_data) {
               LM_ERR("no more package memory available. needed %d\n", msg_size + 1);
               return;
    }

    char *json_data = pkg_malloc(msg_size + 1);
//end of changes

    if(!json_data) {
               LM_ERR("no more package memory available. needed %d\n", msg_size + 1);
               return;
    }
</code></pre>
<p>The change is rather simple: If there is no message-body supplied, the event-route <em>kazoo:<binding_key></em> is called (after replacing any '.' with '_' in the routing_key).</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/kamailio/kamailio/issues/1837">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AF36ZeQLGHxUFKtqERvPw2HwGjINFsxnks5vKfOLgaJpZM4akFHR">mute the thread</a>.<img src="https://github.com/notifications/beacon/AF36ZaQDukuVW8ugCVYOBbzzlooduvPMks5vKfOLgaJpZM4akFHR.gif" height="1" width="1" alt="" /></p>
<script type="application/json" data-scope="inboxmarkup">{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/kamailio/kamailio","title":"kamailio/kamailio","subtitle":"GitHub repository","main_image_url":"https://github.githubassets.com/images/email/message_cards/header.png","avatar_image_url":"https://github.githubassets.com/images/email/message_cards/avatar.png","action":{"name":"Open in GitHub","url":"https://github.com/kamailio/kamailio"}},"updates":{"snippets":[{"icon":"DESCRIPTION","message":"kazoo: consuming of events fails if message has no body (#1837)"}],"action":{"name":"View Issue","url":"https://github.com/kamailio/kamailio/issues/1837"}}}</script>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/kamailio/kamailio/issues/1837",
"url": "https://github.com/kamailio/kamailio/issues/1837",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>