1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 /** 17 * @addtogroup OHIPCParcel 18 * @{ 19 * 20 * @brief Defines C interfaces for IPC serialization and deserialization. 21 * 22 * @syscap SystemCapability.Communication.IPC.Core 23 * @since 12 24 */ 25 26 /** 27 * @file ipc_cparcel.h 28 * 29 * @brief Defines C interfaces for IPC serialization and deserialization. 30 * 31 * @library libipc_capi.so 32 * @kit IPCKit 33 * @syscap SystemCapability.Communication.IPC.Core 34 * @since 12 35 */ 36 37 #ifndef CAPI_INCLUDE_IPC_CPARCEL_H 38 #define CAPI_INCLUDE_IPC_CPARCEL_H 39 40 #include <stdint.h> 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 /** 47 * @brief Defines an IPC serialized object. 48 * 49 * @syscap SystemCapability.Communication.IPC.Core 50 * @since 12 51 */ 52 struct OHIPCParcel; 53 54 /** 55 * @brief Typedef an IPC serialized object. 56 * 57 * @syscap SystemCapability.Communication.IPC.Core 58 * @since 12 59 */ 60 typedef struct OHIPCParcel OHIPCParcel; 61 62 /** 63 * @brief Defines an IPC remote proxy object. 64 * 65 * @syscap SystemCapability.Communication.IPC.Core 66 * @since 12 67 */ 68 struct OHIPCRemoteProxy; 69 70 /** 71 * @brief Typedef an IPC remote proxy object. 72 * 73 * @syscap SystemCapability.Communication.IPC.Core 74 * @since 12 75 */ 76 typedef struct OHIPCRemoteProxy OHIPCRemoteProxy; 77 78 /** 79 * @brief Defines an IPC remote service object. 80 * 81 * @syscap SystemCapability.Communication.IPC.Core 82 * @since 12 83 */ 84 struct OHIPCRemoteStub; 85 86 /** 87 * @brief Typedef an IPC remote service object. 88 * 89 * @syscap SystemCapability.Communication.IPC.Core 90 * @since 12 91 */ 92 typedef struct OHIPCRemoteStub OHIPCRemoteStub; 93 94 /** 95 * @brief Allocates memory. 96 * 97 * @syscap SystemCapability.Communication.IPC.Core 98 * @param len Length of the memory to allocate. 99 * @return Returns the address of the memory allocated if the operation is successful; returns NULL otherwise. 100 * @since 12 101 */ 102 typedef void* (*OH_IPC_MemAllocator)(int32_t len); 103 104 /** 105 * @brief Creates an <b>OHIPCParcel</b> object, which cannot exceed 204,800 bytes. 106 * 107 * @syscap SystemCapability.Communication.IPC.Core 108 * @return Returns the pointer to the <b>OHIPCParcel</b> object created if the operation is successful; 109 * returns NULL otherwise. 110 * @since 12 111 */ 112 OHIPCParcel* OH_IPCParcel_Create(void); 113 114 /** 115 * @brief Destroys an <b>OHIPCParcel</b> object. 116 * 117 * @syscap SystemCapability.Communication.IPC.Core 118 * @param parcel Pointer to the <b>OHIPCParcel</b> object to destroy. 119 * @since 12 120 */ 121 void OH_IPCParcel_Destroy(OHIPCParcel *parcel); 122 123 /** 124 * @brief Obtains the size of the data contained in an <b>OHIPCParcel</b> object. 125 * 126 * @syscap SystemCapability.Communication.IPC.Core 127 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 128 * @return Returns the data size obtained if the operation is successful.\n 129 * Returns <b>-1</b> if invalid parameters are found. 130 * @since 12 131 */ 132 int OH_IPCParcel_GetDataSize(const OHIPCParcel *parcel); 133 134 /** 135 * @brief Obtains the number of bytes that can be written to an <b>OHIPCParcel</b> object. 136 * 137 * @syscap SystemCapability.Communication.IPC.Core 138 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 139 * @return Returns the number of bytes that can be written to the <b>OHIPCParcel</b> object. \n 140 * Returns <b>-1</b> if invalid parameters are found. 141 * @since 12 142 */ 143 int OH_IPCParcel_GetWritableBytes(const OHIPCParcel *parcel); 144 145 /** 146 * @brief Obtains the number of bytes that can be read from an <b>OHIPCParcel</b> object. 147 * 148 * @syscap SystemCapability.Communication.IPC.Core 149 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 150 * @return Returns the number of bytes that can be read from the <b>OHIPCParcel</b> object. \n 151 * Returns <b>-1</b> if invalid parameters are found. 152 * @since 12 153 */ 154 int OH_IPCParcel_GetReadableBytes(const OHIPCParcel *parcel); 155 156 /** 157 * @brief Obtains the position where data is read in an <b>OHIPCParcel</b> object. 158 * 159 * @syscap SystemCapability.Communication.IPC.Core 160 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 161 * @return Returns the position obtained if the operation is successful. \n 162 * Returns <b>-1</b> if invalid parameters are found. 163 * @since 12 164 */ 165 int OH_IPCParcel_GetReadPosition(const OHIPCParcel *parcel); 166 167 /** 168 * @brief Obtains the position where data is written in an <b>OHIPCParcel</b> object. 169 * 170 * @syscap SystemCapability.Communication.IPC.Core 171 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 172 * @return Returns the position obtained if the operation is successful. \n 173 * Returns <b>-1</b> if invalid parameters are found. 174 * @since 12 175 */ 176 int OH_IPCParcel_GetWritePosition(const OHIPCParcel *parcel); 177 178 /** 179 * @brief Resets the position to read data in an IPC parcel. 180 * 181 * @syscap SystemCapability.Communication.IPC.Core 182 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 183 * @param newReadPos New position to read data. The value ranges from <b>0</b> to the current data size. 184 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 185 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. 186 * @since 12 187 */ 188 int OH_IPCParcel_RewindReadPosition(OHIPCParcel *parcel, uint32_t newReadPos); 189 190 /** 191 * @brief Resets the position to write data in an <b>OHIPCParcel</b> object. 192 * 193 * @syscap SystemCapability.Communication.IPC.Core 194 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 195 * @param newWritePos New position to write data. The value ranges from <b>0</b> to the current data size. 196 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 197 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. 198 * @since 12 199 */ 200 int OH_IPCParcel_RewindWritePosition(OHIPCParcel *parcel, uint32_t newWritePos); 201 202 /** 203 * @brief Writes an int8_t value to an <b>OHIPCParcel</b> object. 204 * 205 * @syscap SystemCapability.Communication.IPC.Core 206 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 207 * @param value Value to write. 208 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 209 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 210 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the data write operation fails. 211 * @since 12 212 */ 213 int OH_IPCParcel_WriteInt8(OHIPCParcel *parcel, int8_t value); 214 215 /** 216 * @brief Reads an int8_t value from an <b>OHIPCParcel</b> object. 217 * 218 * @syscap SystemCapability.Communication.IPC.Core 219 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 220 * @param value Pointer to the data to read. It cannot be NULL. 221 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 222 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 223 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_READ_ERROR} if the read operation fails. 224 * @since 12 225 */ 226 int OH_IPCParcel_ReadInt8(const OHIPCParcel *parcel, int8_t *value); 227 228 /** 229 * @brief Writes an int16_t value to an <b>OHIPCParcel</b> object. 230 * 231 * @syscap SystemCapability.Communication.IPC.Core 232 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 233 * @param value Value to write. 234 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 235 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 236 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the data write operation fails. 237 * @since 12 238 */ 239 int OH_IPCParcel_WriteInt16(OHIPCParcel *parcel, int16_t value); 240 241 /** 242 * @brief Reads an int16_t value from an <b>OHIPCParcel</b> object. 243 * 244 * @syscap SystemCapability.Communication.IPC.Core 245 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 246 * @param value Pointer to the data to read. It cannot be NULL. 247 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 248 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 249 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_READ_ERROR} if the read operation fails. 250 * @since 12 251 */ 252 int OH_IPCParcel_ReadInt16(const OHIPCParcel *parcel, int16_t *value); 253 254 /** 255 * @brief Writes an int32_t value to an <b>OHIPCParcel</b> object. 256 * 257 * @syscap SystemCapability.Communication.IPC.Core 258 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 259 * @param value Value to write. 260 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 261 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 262 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the data write operation fails. 263 * @since 12 264 */ 265 int OH_IPCParcel_WriteInt32(OHIPCParcel *parcel, int32_t value); 266 267 /** 268 * @brief Reads an int32_t value from an <b>OHIPCParcel</b> object. 269 * 270 * @syscap SystemCapability.Communication.IPC.Core 271 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 272 * @param value Pointer to the data to read. It cannot be NULL. 273 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 274 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 275 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_READ_ERROR} if the read operation fails. 276 * @since 12 277 */ 278 int OH_IPCParcel_ReadInt32(const OHIPCParcel *parcel, int32_t *value); 279 280 /** 281 * @brief Writes an int64_t value to an <b>OHIPCParcel</b> object. 282 * 283 * @syscap SystemCapability.Communication.IPC.Core 284 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 285 * @param value Value to write. 286 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 287 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 288 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the data write operation fails. 289 * @since 12 290 */ 291 int OH_IPCParcel_WriteInt64(OHIPCParcel *parcel, int64_t value); 292 293 /** 294 * @brief Reads an int64_t value from an <b>OHIPCParcel</b> object. 295 * 296 * @syscap SystemCapability.Communication.IPC.Core 297 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 298 * @param value Pointer to the data to read. It cannot be NULL. 299 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 300 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 301 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_READ_ERROR} if the read operation fails. 302 * @since 12 303 */ 304 int OH_IPCParcel_ReadInt64(const OHIPCParcel *parcel, int64_t *value); 305 306 /** 307 * @brief Writes a float value to an <b>OHIPCParcel</b> object. 308 * 309 * @syscap SystemCapability.Communication.IPC.Core 310 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 311 * @param value Value to write. 312 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 313 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 314 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the data write operation fails. 315 * @since 12 316 */ 317 int OH_IPCParcel_WriteFloat(OHIPCParcel *parcel, float value); 318 319 /** 320 * @brief Reads a float value from an <b>OHIPCParcel</b> object. 321 * 322 * @syscap SystemCapability.Communication.IPC.Core 323 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 324 * @param value Pointer to the data to read. It cannot be NULL. 325 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 326 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 327 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_READ_ERROR} if the read operation fails. 328 * @since 12 329 */ 330 int OH_IPCParcel_ReadFloat(const OHIPCParcel *parcel, float *value); 331 332 /** 333 * @brief Writes a double value to an <b>OHIPCParcel</b> object. 334 * 335 * @syscap SystemCapability.Communication.IPC.Core 336 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 337 * @param value Value to write. 338 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 339 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 340 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the data write operation fails. 341 * @since 12 342 */ 343 int OH_IPCParcel_WriteDouble(OHIPCParcel *parcel, double value); 344 345 /** 346 * @brief Reads a double value from an <b>OHIPCParcel</b> object. 347 * 348 * @syscap SystemCapability.Communication.IPC.Core 349 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 350 * @param value Pointer to the data to read. It cannot be NULL. 351 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 352 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 353 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_READ_ERROR} if the read operation fails. 354 * @since 12 355 */ 356 int OH_IPCParcel_ReadDouble(const OHIPCParcel *parcel, double *value); 357 358 /** 359 * @brief Writes a string including a string terminator to an <b>OHIPCParcel</b> object. 360 * 361 * @syscap SystemCapability.Communication.IPC.Core 362 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 363 * @param str String to write, which cannot be NULL. 364 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 365 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 366 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the data write operation fails. 367 * @since 12 368 */ 369 int OH_IPCParcel_WriteString(OHIPCParcel *parcel, const char *str); 370 371 /** 372 * @brief Reads a string from an <b>OHIPCParcel</b> object. You can obtain the length of the string from <b>strlen</b>. 373 * 374 * @syscap SystemCapability.Communication.IPC.Core 375 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 376 * @return Returns the address of the string read if the operation is successful; 377 * returns NULL if the operation fails or invalid parameters are found. 378 * @since 12 379 */ 380 const char* OH_IPCParcel_ReadString(const OHIPCParcel *parcel); 381 382 /** 383 * @brief Writes data of the specified length from the memory to an <b>OHIPCParcel</b> object. 384 * 385 * @syscap SystemCapability.Communication.IPC.Core 386 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 387 * @param buffer Pointer to the address of the memory information to write. 388 * @param len Length of the data to write. 389 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 390 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 391 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the data write operation fails. 392 * @since 12 393 */ 394 int OH_IPCParcel_WriteBuffer(OHIPCParcel *parcel, const uint8_t *buffer, int32_t len); 395 396 /** 397 * @brief Reads memory information of the specified length from an <b>OHIPCParcel</b> object. 398 * 399 * @syscap SystemCapability.Communication.IPC.Core 400 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 401 * @param len Length of the memory to be read. 402 * @return Returns the memory address read if the operation is successful; 403 * returns NULL if invalid parameters are found or <b>len</b> exceeds the readable length of <b>parcel</b>. 404 * @since 12 405 */ 406 const uint8_t* OH_IPCParcel_ReadBuffer(const OHIPCParcel *parcel, int32_t len); 407 408 /** 409 * @brief Writes an <b>OHIPCRemoteStub</b> object to an <b>OHIPCParcel</b> object. 410 * 411 * @syscap SystemCapability.Communication.IPC.Core 412 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 413 * @param stub Pointer to the <b>OHIPCRemoteStub</b> object to write. It cannot be NULL. 414 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 415 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 416 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the data write operation fails. 417 * @since 12 418 */ 419 int OH_IPCParcel_WriteRemoteStub(OHIPCParcel *parcel, const OHIPCRemoteStub *stub); 420 421 /** 422 * @brief Reads the <b>OHIPCRemoteStub</b> object from an <b>OHIPCParcel</b> object. 423 * 424 * @syscap SystemCapability.Communication.IPC.Core 425 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 426 * @return Returns the pointer to the <b>OHIPCRemoteStub</b> object read if the operation is successful; 427 * returns NULL otherwise. 428 * @since 12 429 */ 430 OHIPCRemoteStub* OH_IPCParcel_ReadRemoteStub(const OHIPCParcel *parcel); 431 432 /** 433 * @brief Writes an <b>OHIPCRemoteProxy</b> object to an <b>OHIPCParcel</b> object. 434 * 435 * @syscap SystemCapability.Communication.IPC.Core 436 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 437 * @param proxy Pointer to the <b>OHIPCRemoteProxy</b> object to write. It cannot be NULL. 438 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 439 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 440 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the data write operation fails. 441 * @since 12 442 */ 443 int OH_IPCParcel_WriteRemoteProxy(OHIPCParcel *parcel, const OHIPCRemoteProxy *proxy); 444 445 /** 446 * @brief Reads the <b>OHIPCRemoteProxy</b> object from an <b>OHIPCParcel</b> object. 447 * 448 * @syscap SystemCapability.Communication.IPC.Core 449 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 450 * @return Returns the pointer to the <b>OHIPCRemoteProxy</b> object read if the operation is successful; 451 * returns NULL otherwise. 452 * @since 12 453 */ 454 OHIPCRemoteProxy* OH_IPCParcel_ReadRemoteProxy(const OHIPCParcel *parcel); 455 456 /** 457 * @brief Writes a file descriptor to an <b>OHIPCParcel</b> object. 458 * 459 * @syscap SystemCapability.Communication.IPC.Core 460 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 461 * @param fd File descriptor to write. 462 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 463 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 464 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the data write operation fails. 465 * @since 12 466 */ 467 int OH_IPCParcel_WriteFileDescriptor(OHIPCParcel *parcel, int32_t fd); 468 469 /** 470 * @brief Reads a file descriptor from an <b>OHIPCParcel</b> object. 471 * 472 * @syscap SystemCapability.Communication.IPC.Core 473 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 474 * @param fd Pointer to the file descriptor to read. It cannot be NULL. 475 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 476 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 477 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_READ_ERROR} if the read operation fails. 478 * @since 12 479 */ 480 int OH_IPCParcel_ReadFileDescriptor(const OHIPCParcel *parcel, int32_t *fd); 481 482 /** 483 * @brief Appends data to an <b>OHIPCParcel</b> object. 484 * 485 * @syscap SystemCapability.Communication.IPC.Core 486 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 487 * @param data Pointer to the data to append. It cannot be NULL. 488 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 489 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 490 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the operation fails. 491 * @since 12 492 */ 493 int OH_IPCParcel_Append(OHIPCParcel *parcel, const OHIPCParcel *data); 494 495 /** 496 * @brief Writes an interface token to an <b>OHIPCParcel</b> object for interface identity verification. 497 * 498 * @syscap SystemCapability.Communication.IPC.Core 499 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 500 * @param token Pointer to the interface token to write. It cannot be NULL. 501 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 502 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 503 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_WRITE_ERROR} if the data write operation fails. 504 * @since 12 505 */ 506 int OH_IPCParcel_WriteInterfaceToken(OHIPCParcel *parcel, const char *token); 507 508 /** 509 * @brief Reads an interface token from an <b>OHIPCParcel</b> object for interface identity verification. 510 * 511 * @syscap SystemCapability.Communication.IPC.Core 512 * @param parcel Pointer to the target <b>OHIPCParcel</b> object. It cannot be NULL. 513 * @param token Pointer to the address of the memory for storing the interface token. 514 * The memory is allocated by the allocator provided by the user and needs to be released. This pointer cannot be NULL. 515 * If an error code is returned, you still need to check whether the memory is empty and release the memory. 516 * Otherwise, memory leaks may occur. 517 * @param len Pointer to the length of the interface token read, including the terminator. It cannot be NULL. 518 * @param allocator Memory allocator specified by the user for allocating memory for <b>token</b>. It cannot be NULL. 519 * @return Returns {@link OH_IPC_ErrorCode#OH_IPC_SUCCESS} if the operation is successful. \n 520 * Returns {@link OH_IPC_ErrorCode#OH_IPC_CHECK_PARAM_ERROR} if invalid parameters are found. \n 521 * Returns {@link OH_IPC_ErrorCode#OH_IPC_PARCEL_READ_ERROR} if the read operation fails. 522 * @since 12 523 */ 524 int OH_IPCParcel_ReadInterfaceToken(const OHIPCParcel *parcel, char **token, int32_t *len, 525 OH_IPC_MemAllocator allocator); 526 527 #ifdef __cplusplus 528 } 529 #endif 530 531 /** @} */ 532 #endif 533