service_handle->service_type = convert_string_to_type(service_type);
service_handle->is_local = is_local;
service_handle->connection_state = CONV_SERVICE_CONNECTION_STATE_CONNECTED;
+ conv_channel_h channel_handle = NULL;
+ conv_payload_h payload_handle = NULL;
- conv_channel_h channel_handle = new(std::nothrow) _conv_channel_handle();
- IF_FAIL_VOID_TAG(channel_handle, _E, "Memory allocation failed");
+ if (!channel.isEmpty()) {
+ channel_handle = new(std::nothrow) _conv_channel_handle();
+ IF_FAIL_VOID_TAG(channel_handle, _E, "Memory allocation failed");
+ channel_handle->jchannel = channel;
+ }
- channel_handle->jchannel = channel;
+ if (!payload.isEmpty() || binary_length > 0) {
+ payload_handle = new(std::nothrow) _conv_payload_handle();
+ IF_FAIL_VOID_TAG(payload_handle, _E, "Memory allocation failed");
- conv_payload_h payload_handle = new(std::nothrow) _conv_payload_handle();
- IF_FAIL_VOID_TAG(payload_handle, _E, "Memory allocation failed");
+ payload_handle->jpayload = payload;
+ payload_handle->binary_length = binary_length;
+ payload_handle->binary = binary;
+ }
- payload_handle->jpayload = payload;
- payload_handle->binary_length = binary_length;
- payload_handle->binary = binary;
conv_error_e conv_error = (conv_error_e)error;
-
callback_info->cb(service_handle, channel_handle, conv_error, payload_handle, callback_info->user_data);
- delete payload_handle;
- delete channel_handle;
+ if (payload_handle) {
+ delete payload_handle;
+ }
+ if (channel_handle) {
+ delete channel_handle;
+ }
delete service_handle;
}