return static_cast<parcel_h>(const_cast<tizen_base::Parcel*>(&handle_));
}
+void Parcel::SetRawParcel(tizen_base::Parcel* raw_parcel) {
+ raw_parcel_.reset(raw_parcel);
+}
+
+tizen_base::Parcel* Parcel::GetRawParcel() const {
+ return raw_parcel_.get();
+}
+
} // namespace internal
} // namespace rpc_port
#include <parcel.h>
#include <parcel.hh>
-
#include <parcelable.hh>
+#include <memory>
+
#include "parcel-header-internal.hh"
namespace rpc_port {
const ParcelHeader* GetParcelHeader();
parcel_h GetHandle() const;
+ void SetRawParcel(tizen_base::Parcel* raw_parcel);
+ tizen_base::Parcel* GetRawParcel() const;
+
private:
ParcelHeader header_;
tizen_base::Parcel handle_;
+ std::unique_ptr<tizen_base::Parcel> raw_parcel_ { nullptr };
};
} // namespace internal
return RPC_PORT_ERROR_INVALID_PARAMETER;
auto* parcel = static_cast<internal::Parcel*>(h);
- void* raw = nullptr;
- uint32_t raw_size = 0;
- parcel_get_raw(parcel->GetHandle(), &raw, &raw_size);
+ tizen_base::Parcel raw_parcel;
+ raw_parcel.WriteParcelable(*parcel);
+ void* raw = raw_parcel.GetData();
+ uint32_t raw_size = raw_parcel.GetDataSize();;
if (raw_size == 0) {
_E("raw_size is zero");
return RPC_PORT_ERROR_IO_ERROR;
auto* parcel = static_cast<internal::Parcel*>(h);
uint32_t valid_size = size & UINT32_MAX;
- parcel_reset(parcel->GetHandle(), array, valid_size);
+ tizen_base::Parcel raw_parcel(array, valid_size);
+ raw_parcel.ReadParcelable(parcel);
return RPC_PORT_ERROR_NONE;
}
return RPC_PORT_ERROR_INVALID_PARAMETER;
auto* parcel = static_cast<internal::Parcel*>(h);
- void* raw_data = nullptr;
- uint32_t raw_size = 0;
- parcel_get_raw(parcel->GetHandle(), &raw_data, &raw_size);
+ auto* raw_parcel = new (std::nothrow) tizen_base::Parcel();
+ if (raw_parcel != nullptr) {
+ raw_parcel->WriteParcelable(*parcel);
+ parcel->SetRawParcel(raw_parcel);
+ *raw = raw_parcel->GetData();
+ *size = static_cast<unsigned int>(raw_parcel->GetDataSize());
+ } else {
+ _E("Out of memory");
+ *raw = nullptr;
+ *size = 0;
+ }
- *raw = raw_data;
- *size = static_cast<unsigned int>(raw_size);
return RPC_PORT_ERROR_NONE;
}