Add internal APIs for parcel 90/217590/2
authorJunghoon Park <jh9216.park@samsung.com>
Tue, 12 Nov 2019 23:44:13 +0000 (08:44 +0900)
committerJunghoon Park <jh9216.park@samsung.com>
Wed, 13 Nov 2019 01:24:35 +0000 (10:24 +0900)
- int rpc_port_parcel_reset_reader(rpc_port_parcel_h h);
- int rpc_port_parcel_to_array(rpc_port_parcel_h h, void **array,
    unsigned int *size);
- int rpc_port_parcel_from_array(rpc_port_parcel_h h, const void *array,
    unsigned int size);

Change-Id: I62b659cb2c8b79e9f566303352dbb619ffd47300
Signed-off-by: Junghoon Park <jh9216.park@samsung.com>
src/parcel-internal.cc
src/parcel-internal.h
src/rpc-port-parcel.cc

index 3fce740..54f2d99 100644 (file)
@@ -151,4 +151,18 @@ void Parcel::Read(unsigned char* buf, unsigned int size) {
   reader_ += size;
 }
 
+void Parcel::ResetReader() {
+  reader_ = 0;
+}
+
+void Parcel::Clear() {
+  data_.clear();
+  reader_ = 0;
+}
+
+void Parcel::Reset(const unsigned char* buf, unsigned int size) {
+  Clear();
+  Write(buf, size);
+}
+
 }  // namespace rpc_port
index ac2290a..991fe17 100644 (file)
@@ -54,6 +54,9 @@ class Parcel {
   bundle* ReadBundle();
   int ReadArrayCount();
   const std::vector<unsigned char>& GetRaw();
+  void ResetReader();
+  void Clear();
+  void Reset(const unsigned char* buf, unsigned int size);
 
  private:
   template<typename T>
index 55c10b2..8ce15d3 100644 (file)
@@ -376,3 +376,45 @@ RPC_API int rpc_port_parcel_burst_write(rpc_port_parcel_h h,
 
   return RPC_PORT_ERROR_NONE;
 }
+
+RPC_API int rpc_port_parcel_reset_reader(rpc_port_parcel_h h) {
+  if (h == nullptr)
+    return RPC_PORT_ERROR_INVALID_PARAMETER;
+
+  Parcel* p = static_cast<Parcel*>(h);
+
+  p->ResetReader();
+
+  return RPC_PORT_ERROR_NONE;
+}
+
+RPC_API int rpc_port_parcel_to_array(rpc_port_parcel_h h, void **array,
+    unsigned int *size) {
+  if (h == nullptr || !array || !size)
+    return RPC_PORT_ERROR_INVALID_PARAMETER;
+
+  Parcel* p = static_cast<Parcel*>(h);
+
+  const auto& ptr = p->GetRaw();
+  void* array_ptr = malloc(ptr.size());
+  if (!array_ptr)
+    return RPC_PORT_ERROR_OUT_OF_MEMORY;
+
+  memcpy(array_ptr, ptr.data(), ptr.size());
+  *array = array_ptr;
+  *size = ptr.size();
+
+  return RPC_PORT_ERROR_NONE;
+}
+
+RPC_API int rpc_port_parcel_from_array(rpc_port_parcel_h h, const void *array,
+    unsigned int size) {
+  if (h == nullptr || !array || size == 0)
+    return RPC_PORT_ERROR_INVALID_PARAMETER;
+
+  Parcel* p = static_cast<Parcel*>(h);
+
+  p->Reset(reinterpret_cast<const unsigned char*>(array), size);
+
+  return RPC_PORT_ERROR_NONE;
+}
\ No newline at end of file