Skip to content

Commit

Permalink
Merge pull request #17 from eProsima/request_header
Browse files Browse the repository at this point in the history
Don't type-erase request header
  • Loading branch information
jacquelinekay committed Mar 1, 2016
2 parents d952be2 + de21530 commit b19a0b4
Showing 1 changed file with 12 additions and 16 deletions.
28 changes: 12 additions & 16 deletions rmw_fastrtps_cpp/src/functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1262,12 +1262,12 @@ extern "C"
}

rmw_ret_t rmw_take_request(const rmw_service_t *service,
void *ros_request_header,
rmw_request_id_t *request_header,
void *ros_request,
bool *taken)
{
assert(service);
assert(ros_request_header);
assert(request_header);
assert(ros_request);
assert(taken);

Expand All @@ -1289,9 +1289,8 @@ extern "C"
info->request_type_support_->deserializeROSmessage(request.buffer_, ros_request);

// Get header
rmw_request_id_t &req_id = *(static_cast<rmw_request_id_t*>(ros_request_header));
memcpy(req_id.writer_guid, &request.sample_identity_.writer_guid(), sizeof(eprosima::fastrtps::rtps::GUID_t));
req_id.sequence_number = ((int64_t)request.sample_identity_.sequence_number().high) << 32 | request.sample_identity_.sequence_number().low;
memcpy(request_header->writer_guid, &request.sample_identity_.writer_guid(), sizeof(eprosima::fastrtps::rtps::GUID_t));
request_header->sequence_number = ((int64_t)request.sample_identity_.sequence_number().high) << 32 | request.sample_identity_.sequence_number().low;

info->request_type_support_->deleteData(request.buffer_);

Expand All @@ -1302,12 +1301,12 @@ extern "C"
}

rmw_ret_t rmw_take_response(const rmw_client_t *client,
void *ros_request_header,
rmw_request_id_t *request_header,
void *ros_response,
bool *taken)
{
assert(client);
assert(ros_request_header);
assert(request_header);
assert(ros_response);
assert(taken);

Expand All @@ -1322,15 +1321,13 @@ extern "C"
CustomClientInfo *info = (CustomClientInfo*)client->data;
assert(info);

rmw_request_id_t &req_id = *(static_cast<rmw_request_id_t*>(ros_request_header));

CustomClientResponse response = info->listener_->getResponse();

if(response.buffer_ != nullptr)
{
info->response_type_support_->deserializeROSmessage(response.buffer_, ros_response);

req_id.sequence_number = ((int64_t)response.sample_identity_.sequence_number().high) << 32 | response.sample_identity_.sequence_number().low;
request_header->sequence_number = ((int64_t)response.sample_identity_.sequence_number().high) << 32 | response.sample_identity_.sequence_number().low;

*taken = true;

Expand All @@ -1341,11 +1338,11 @@ extern "C"
}

rmw_ret_t rmw_send_response(const rmw_service_t *service,
void *ros_request_header,
rmw_request_id_t *request_header,
void *ros_response)
{
assert(service);
assert(ros_request_header);
assert(request_header);
assert(ros_response);

rmw_ret_t returnedValue = RMW_RET_ERROR;
Expand All @@ -1365,10 +1362,9 @@ extern "C"
{
info->response_type_support_->serializeROSmessage(ros_response, buffer);
eprosima::fastrtps::rtps::WriteParams wparams;
rmw_request_id_t &req_id = *(static_cast<rmw_request_id_t*>(ros_request_header));
memcpy(&wparams.related_sample_identity().writer_guid(), req_id.writer_guid, sizeof(eprosima::fastrtps::rtps::GUID_t));
wparams.related_sample_identity().sequence_number().high = (int32_t)((req_id.sequence_number & 0xFFFFFFFF00000000) >> 32);
wparams.related_sample_identity().sequence_number().low = (int32_t)(req_id.sequence_number & 0xFFFFFFFF);
memcpy(&wparams.related_sample_identity().writer_guid(), request_header->writer_guid, sizeof(eprosima::fastrtps::rtps::GUID_t));
wparams.related_sample_identity().sequence_number().high = (int32_t)((request_header->sequence_number & 0xFFFFFFFF00000000) >> 32);
wparams.related_sample_identity().sequence_number().low = (int32_t)(request_header->sequence_number & 0xFFFFFFFF);

if(info->response_publisher_->write((void*)buffer, wparams))
{
Expand Down

0 comments on commit b19a0b4

Please sign in to comment.