1e41f4b71Sopenharmony_ci# DSoftBus Subsystem ChangeLog
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci## IPC&RPC APIs support the exception handling mode and the selection of synchronous or asynchronous message sending by passing a Boolean value or a numeric value.
4e41f4b71Sopenharmony_ci1. Some IPC&RPC APIs of DSoftBus use service logic return values to indicate the error information, which does not comply with the API error code specifications of OpenHarmony.
5e41f4b71Sopenharmony_ci2. A Boolean value can be passed to specify the mode of sending information as asynchronous or synchronous.
6e41f4b71Sopenharmony_ci#### Change Impacts
7e41f4b71Sopenharmony_ci
8e41f4b71Sopenharmony_ciThis version is compatible with earlier versions and no adaptation is required. Newly added APIs can be called to support the following changes:
9e41f4b71Sopenharmony_ci1. Supports exception handling and return of error codes.
10e41f4b71Sopenharmony_ci2. Supports selection of synchronous or asynchronous message sending by passing a Boolean value or by passing 0 or a non-0 number.
11e41f4b71Sopenharmony_ci
12e41f4b71Sopenharmony_ci#### **Key API/Component Changes**
13e41f4b71Sopenharmony_ci
14e41f4b71Sopenharmony_ciFor adaptation to the unified API exception handling mode, related IPC&RPC APIs are deprecated, and corresponding new APIs and methods are added. The newly added APIs support unified error code handling specifications and function the same as the original APIs.
15e41f4b71Sopenharmony_ci|  Class| Deprecated API | New Class | New API |
16e41f4b71Sopenharmony_ci| ------------ | ------------ | ------------ | ------------ |
17e41f4b71Sopenharmony_ci| MessageParcel | static create(): MessageParcel | MessageSequence  | static create(): MessageSequence |
18e41f4b71Sopenharmony_ci| MessageParcel | reclaim(): void | MessageSequence | reclaim(): void |
19e41f4b71Sopenharmony_ci| MessageParcel | writeRemoteObject(object: IRemoteObject): boolean| MessageSequence |writeRemoteObject(object: IRemoteObject): void|
20e41f4b71Sopenharmony_ci| MessageParcel | readRemoteObject(): IRemoteObject | MessageSequence | readRemoteObject(): IRemoteObject |
21e41f4b71Sopenharmony_ci|  MessageParcel | writeInterfaceToken(token: string): boolean | MessageSequence | writeInterfaceToken(token: string): void |
22e41f4b71Sopenharmony_ci|  MessageParcel | readInterfaceToken(): string | MessageSequence | readInterfaceToken(): string |
23e41f4b71Sopenharmony_ci|  MessageParcel | getSize(): number | MessageSequence | getSize(): number |
24e41f4b71Sopenharmony_ci|  MessageParcel | getCapacity(): number | MessageSequence | getCapacity(): number|
25e41f4b71Sopenharmony_ci|  MessageParcel | setSize(size: number): boolean | MessageSequence | setCapacity(size: number): void |
26e41f4b71Sopenharmony_ci|  MessageParcel | getReadableBytes(): number | MessageSequence | getReadableBytes(): number |
27e41f4b71Sopenharmony_ci|  MessageParcel | getReadPosition(): number | MessageSequence | getReadPosition(): number |
28e41f4b71Sopenharmony_ci|  MessageParcel | getWritePosition(): number | MessageSequence | getWritePosition(): number |
29e41f4b71Sopenharmony_ci|  MessageParcel | rewindRead(pos: number): boolean | MessageSequence | rewindRead(pos: number): void |
30e41f4b71Sopenharmony_ci|  MessageParcel | rewindWrite(pos: number): boolean | MessageSequence  | rewindWrite(pos: number): void |
31e41f4b71Sopenharmony_ci|  MessageParcel | writeNoException(): void | MessageSequence | writeNoException(): void |
32e41f4b71Sopenharmony_ci|  MessageParcel | readException(): void | MessageSequence  | readException(): void |
33e41f4b71Sopenharmony_ci|  MessageParcel | writeByte(val: number): boolean | MessageSequence  | writeByte(val: number): void |
34e41f4b71Sopenharmony_ci|  MessageParcel | writeShort(val: number): boolean | MessageSequence | writeShort(val: number): void |
35e41f4b71Sopenharmony_ci|  MessageParcel | writeInt(val: number): boolean | MessageSequence | writeInt(val: number): void |
36e41f4b71Sopenharmony_ci|  MessageParcel | writeLong(val: number): boolean | MessageSequence | writeLong(val: number): void |
37e41f4b71Sopenharmony_ci|  MessageParcel | writeFloat(val: number): boolean | MessageSequence | writeFloat(val: number): void |
38e41f4b71Sopenharmony_ci|  MessageParcel | writeDouble(val: number): boolean | MessageSequence | writeDouble(val: number): void |
39e41f4b71Sopenharmony_ci|  MessageParcel | writeBoolean(val: boolean): boolean | MessageSequence | writeBoolean(val: boolean): void |
40e41f4b71Sopenharmony_ci|  MessageParcel | writeChar(val: number): boolean | MessageSequence | writeChar(val: number): void |
41e41f4b71Sopenharmony_ci|  MessageParcel | writeString(val: string): boolean | MessageSequence | writeString(val: string): void |
42e41f4b71Sopenharmony_ci|  MessageParcel | writeSequenceable(val: Sequenceable): boolean | MessageSequence | writeParcelable(val: Parcelable): void |
43e41f4b71Sopenharmony_ci|  MessageParcel | writeByteArray(byteArray: number[]): boolean | MessageSequence | writeByteArray(byteArray: number[]): void |
44e41f4b71Sopenharmony_ci|  MessageParcel | writeShortArray(shortArray: number[]): boolean | MessageSequence | writeShortArray(shortArray: number[]): void |
45e41f4b71Sopenharmony_ci|  MessageParcel | writeIntArray(intArray: number[]): boolean | MessageSequence | writeIntArray(intArray: number[]): void |
46e41f4b71Sopenharmony_ci|  MessageParcel | writeLongArray(longArray: number[]): boolean | MessageSequence | writeLongArray(longArray: number[]): void |
47e41f4b71Sopenharmony_ci|  MessageParcel | writeFloatArray(floatArray: number[]): boolean | MessageSequence | writeFloatArray(floatArray: number[]): void |
48e41f4b71Sopenharmony_ci|  MessageParcel | writeDoubleArray(doubleArray: number[]): boolean | MessageSequence | writeDoubleArray(doubleArray: number[]): void |
49e41f4b71Sopenharmony_ci|  MessageParcel | writeBooleanArray(booleanArray: boolean[]): boolean | MessageSequence | writeBooleanArray(booleanArray: boolean[]): void |
50e41f4b71Sopenharmony_ci|  MessageParcel | writeCharArray(charArray: number[]): boolean | MessageSequence | writeCharArray(charArray: number[]): void |
51e41f4b71Sopenharmony_ci|  MessageParcel | writeStringArray(stringArray: string[]): boolean | MessageSequence  | writeStringArray(stringArray: string[]): void |
52e41f4b71Sopenharmony_ci|  MessageParcel | writeSequenceableArray(sequenceableArray: Sequenceable[]): boolean | MessageSequence  | writeParcelableArray(sequenceableArray: Parcelable[]): void |
53e41f4b71Sopenharmony_ci|  MessageParcel | writeRemoteObjectArray(objectArray: IRemoteObject[]): boolean | MessageSequence  | writeRemoteObjectArray(objectArray: IRemoteObject[]): void |
54e41f4b71Sopenharmony_ci|  MessageParcel | readByte(): number | MessageSequence | readByte(): number |
55e41f4b71Sopenharmony_ci|  MessageParcel | readShort(): number | MessageSequence | readShort(): number |
56e41f4b71Sopenharmony_ci|  MessageParcel | readLong(): number | MessageSequence | readLong(): number |
57e41f4b71Sopenharmony_ci|  MessageParcel | readFloat(): number | MessageSequence | readFloat(): number |
58e41f4b71Sopenharmony_ci|  MessageParcel | readDouble(): number | MessageSequence | readDouble(): number |
59e41f4b71Sopenharmony_ci|  MessageParcel | readBoolean(): boolean | MessageSequence | readBoolean(): boolean |
60e41f4b71Sopenharmony_ci|  MessageParcel | readChar(): number | MessageSequence | readChar(): number |
61e41f4b71Sopenharmony_ci|  MessageParcel | readString(): string | MessageSequence | readString(): string |
62e41f4b71Sopenharmony_ci|  MessageParcel | readSequenceable(dataIn: Sequenceable) : boolean | MessageSequence | readSequenceable(dataIn: Parcelable) : void |
63e41f4b71Sopenharmony_ci|  MessageParcel | readByteArray(dataIn: number[]) : void | MessageSequence | readByteArray(dataIn: number[]) : void |
64e41f4b71Sopenharmony_ci|  MessageParcel | readByteArray(): number[] | MessageSequence | readByteArray(): number[] |
65e41f4b71Sopenharmony_ci|  MessageParcel | readShortArray(dataIn: number[]) : void | MessageSequence | readShortArray(dataIn: number[]) : void |
66e41f4b71Sopenharmony_ci|  MessageParcel | readShortArray(): number[] | MessageSequence | readShortArray(): number[] |
67e41f4b71Sopenharmony_ci|  MessageParcel | readIntArray(dataIn: number[]) : void | MessageSequence | readIntArray(dataIn: number[]) : void |
68e41f4b71Sopenharmony_ci|  MessageParcel | readIntArray() : number[] | MessageSequence | readIntArray() : number[] |
69e41f4b71Sopenharmony_ci|  MessageParcel | readLongArray(dataIn: number[]) : void | MessageSequence | readLongArray(dataIn: number[]) : void |
70e41f4b71Sopenharmony_ci|  MessageParcel | readLongArray(): number[] | MessageSequence | readLongArray(): number[] |
71e41f4b71Sopenharmony_ci|  MessageParcel | readFloatArray(dataIn: number[]) : void | MessageSequence | readFloatArray(dataIn: number[]) : void |
72e41f4b71Sopenharmony_ci|  MessageParcel | readFloatArray(): number[] | MessageSequence | readFloatArray(): number[] |
73e41f4b71Sopenharmony_ci|  MessageParcel | readDoubleArray(dataIn: number[]) : void | MessageSequence | readDoubleArray(dataIn: number[]) : void |
74e41f4b71Sopenharmony_ci|  MessageParcel | readDoubleArray(): number[] | MessageSequence | readDoubleArray(): number[] |
75e41f4b71Sopenharmony_ci|  MessageParcel | readBooleanArray(dataIn: boolean[]) : void | MessageSequence | readBooleanArray(dataIn: boolean[]) : void |
76e41f4b71Sopenharmony_ci|  MessageParcel | readBooleanArray(): boolean[] | MessageSequence | readBooleanArray(): boolean[] |
77e41f4b71Sopenharmony_ci|  MessageParcel | readCharArray(dataIn: number[]) : void | MessageSequence | readCharArray(dataIn: number[]) : void |
78e41f4b71Sopenharmony_ci|  MessageParcel | readCharArray(): number[] | MessageSequence | readCharArray(): number[] |
79e41f4b71Sopenharmony_ci|  MessageParcel | readStringArray(dataIn: string[]) : void | MessageSequence | readStringArray(dataIn: string[]) : void |
80e41f4b71Sopenharmony_ci|  MessageParcel | readStringArray(): string[] | MessageSequence | readStringArray(): string[] |
81e41f4b71Sopenharmony_ci| MessageParcel | readSequenceableArray(sequenceableArray: Sequenceable[]): void | MessageSequence | readSequenceableArray(sequenceableArray: Parcelable[]): void |
82e41f4b71Sopenharmony_ci| MessageParcel | readRemoteObjectArray(objects: IRemoteObject[]): void | MessageSequence | readRemoteObjectArray(objects: IRemoteObject[]): void |
83e41f4b71Sopenharmony_ci| MessageParcel | readRemoteObjectArray(): IRemoteObject[] | MessageSequence | readRemoteObjectArray(): IRemoteObject[] |
84e41f4b71Sopenharmony_ci| MessageParcel | static closeFileDescriptor(fd: number): void | MessageSequence | static closeFileDescriptor(fd: number): void |
85e41f4b71Sopenharmony_ci| MessageParcel | static dupFileDescriptor(fd: number) :number | MessageSequence | static dupFileDescriptor(fd: number) :number |
86e41f4b71Sopenharmony_ci| MessageParcel | containFileDescriptors(): boolean | MessageSequence | containFileDescriptors(): boolean |
87e41f4b71Sopenharmony_ci| MessageParcel | writeFileDescriptor(fd: number): boolean | MessageSequence | writeFileDescriptor(fd: number): void |
88e41f4b71Sopenharmony_ci| MessageParcel | readFileDescriptor(): number | MessageSequence | readFileDescriptor(): number |
89e41f4b71Sopenharmony_ci| MessageParcel | writeAshmem(ashmem: Ashmem): boolean | MessageSequence | writeAshmem(ashmem: Ashmem): void |
90e41f4b71Sopenharmony_ci| MessageParcel | readAshmem(): Ashmem | MessageSequence | readAshmem(): Ashmem |
91e41f4b71Sopenharmony_ci| MessageParcel | writeRawData(rawData: number[], size: number): boolean | MessageSequence | writeRawData(rawData: number[], size: number): void |
92e41f4b71Sopenharmony_ci| MessageParcel | readRawData(size: number): number[] | MessageSequence | readRawData(size: number): number[] |
93e41f4b71Sopenharmony_ci| Sequenceable | marshalling(dataOut: MessageParcel): boolean | Parcelable | marshalling(dataOut: MessageSequence): boolean |
94e41f4b71Sopenharmony_ci| Sequenceable | unmarshalling(dataIn: MessageParcel) : boolean | Parcelable | unmarshalling(dataIn: MessageSequence) : boolean |
95e41f4b71Sopenharmony_ci| SendRequestResult | errCode: number | RequestResult | errCode: number |
96e41f4b71Sopenharmony_ci| SendRequestResult | code: number | RequestResult | code: number |
97e41f4b71Sopenharmony_ci| SendRequestResult | data: MessageParcel | RequestResult | data: MessageSequence |
98e41f4b71Sopenharmony_ci| SendRequestResult | reply: MessageParcel | RequestResult | reply: MessageSequence |
99e41f4b71Sopenharmony_ci| IRemoteObject | queryLocalInterface(descriptor: string): IRemoteBroker | NA | getLocalInterface(descriptor: string): IRemoteBroker |
100e41f4b71Sopenharmony_ci| IRemoteObject | getInterfaceDescriptor(): string | NA | getDescriptor(): string |
101e41f4b71Sopenharmony_ci| IRemoteObject | addDeathRecipient(recipient: DeathRecipient, flags: number): boolean | NA | registerDeathRecipient(recipient: DeathRecipient, flags: number): void |
102e41f4b71Sopenharmony_ci| IRemoteObject | removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean | NA | unregisterDeathRecipient(recipient: DeathRecipient, flags: number): void |
103e41f4b71Sopenharmony_ci| IRemoteObject | NA | NA | sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise<RequestResult> |
104e41f4b71Sopenharmony_ci| IRemoteObject | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback<SendRequestResult>): void | NA | sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption,callback: AsyncCallback<RequestResult>): void |
105e41f4b71Sopenharmony_ci| MessageOption | NA | NA | isAsync(): boolean |
106e41f4b71Sopenharmony_ci| MessageOption | NA | NA | setAsync(async: boolean): void |
107e41f4b71Sopenharmony_ci| MessageOption | NA | NA | constructor(async?: boolean) |
108e41f4b71Sopenharmony_ci| RemoteObject | queryLocalInterface(descriptor: string): IRemoteBroker | NA | getLocalInterface(descriptor: string): IRemoteBroker |
109e41f4b71Sopenharmony_ci| RemoteObject | attachLocalInterface(localInterface: IRemoteBroker, descriptor: string): void  | NA | modifyLocalInterface(localInterface: IRemoteBroker, descriptor: string): void |
110e41f4b71Sopenharmony_ci| RemoteObject | getInterfaceDescriptor(): string | NA | getDescriptor(): string |
111e41f4b71Sopenharmony_ci| RemoteObject | onRemoteRequestEx(code : number, data : MessageParcel, reply: MessageParcel, options : MessageOption): boolean&nbsp;\|&nbsp;Promise<boolean> | NA | onRemoteMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): boolean&nbsp;\|&nbsp;Promise<boolean> |
112e41f4b71Sopenharmony_ci| RemoteObject | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise<SendRequestResult> | NA | sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise<RequestResult> |
113e41f4b71Sopenharmony_ci| RemoteObject | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback<SendRequestResult>): void | NA | sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback<RequestResult>): void |
114e41f4b71Sopenharmony_ci| RemoteProxy | queryLocalInterface(interface: string): IRemoteBroker | NA | getLocalInterface(descriptor: string): IRemoteBroker |
115e41f4b71Sopenharmony_ci| RemoteProxy | getInterfaceDescriptor(): string | NA | getDescriptor(): string |
116e41f4b71Sopenharmony_ci| RemoteProxy | addDeathRecipient(recipient: DeathRecipient, flags: number): boolean | NA | registerDeathRecipient(recipient: DeathRecipient, flags: number): void |
117e41f4b71Sopenharmony_ci| RemoteProxy | removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean | NA | unregisterDeathRecipient(recipient: DeathRecipient, flags: number): void |
118e41f4b71Sopenharmony_ci| RemoteProxy | NA | NA | sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise<RequestResult> |
119e41f4b71Sopenharmony_ci| RemoteProxy | sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback<SendRequestResult>): void | NA | sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback<RequestResult>): void |
120e41f4b71Sopenharmony_ci| IPCSkeleton | static flushCommands(object: IRemoteObject): number | NA | static flushCmdBuffer(object: IRemoteObject): void |
121e41f4b71Sopenharmony_ci| IPCSkeleton | static setCallingIdentity(identity: string): boolean | NA | static restoreCallingIdentity(identity: string): void |
122e41f4b71Sopenharmony_ci| Ashmem | static createAshmem(name: string, size: number): Ashmem | NA | static create(name: string, size: number): Ashmem |
123e41f4b71Sopenharmony_ci| Ashmem  | static createAshmemFromExisting(ashmem: Ashmem): Ashmem | NA | static create(ashmem: Ashmem): Ashmem |
124e41f4b71Sopenharmony_ci| Ashmem  | mapAshmem(mapType: number): boolean | NA | mapTypedAshmem(mapType: number): void |
125e41f4b71Sopenharmony_ci| Ashmem  | mapReadAndWriteAshmem(): boolean | NA | mapReadWriteAshmem(): void |
126e41f4b71Sopenharmony_ci| Ashmem  | mapReadOnlyAshmem(): boolean | NA | mapReadonlyAshmem(): void |
127e41f4b71Sopenharmony_ci| Ashmem  | setProtection(protectionType: number): boolean | NA | setProtectionType(protectionType: number): void |
128e41f4b71Sopenharmony_ci| Ashmem  | writeToAshmem(buf: number[], size: number, offset: number): boolean | NA | writeAshmem(buf: number[], size: number, offset: number): void |
129e41f4b71Sopenharmony_ci| Ashmem  | readFromAshmem(size: number, offset: number): number[] | NA | readAshmem(size: number, offset: number): number[] |
130e41f4b71Sopenharmony_ci
131e41f4b71Sopenharmony_ci#### Adaptation Guide
132e41f4b71Sopenharmony_ci
133e41f4b71Sopenharmony_ciThe newly added APIs return error codes and corresponding error information by throwing exceptions. Take the **create** API in **MessageParcel** as an example. The sample code is as follows:
134e41f4b71Sopenharmony_ci```js
135e41f4b71Sopenharmony_ciimport rpc from '@ohos.rpc'
136e41f4b71Sopenharmony_ci
137e41f4b71Sopenharmony_citry {
138e41f4b71Sopenharmony_ci    var data = rpc.MessageParcel.create();
139e41f4b71Sopenharmony_ci    data.reclaim();
140e41f4b71Sopenharmony_ci} catch (error) {
141e41f4b71Sopenharmony_ci    console.info("create meassageParcel failed, errorCode = " + error.errCode);
142e41f4b71Sopenharmony_ci    console.info("create meassageParcel failed, errorMessage = " + error.errorMessage);
143e41f4b71Sopenharmony_ci}
144e41f4b71Sopenharmony_ci```
145e41f4b71Sopenharmony_ciFor details about sample code of more APIs, see [RPC API reference](../../../application-dev/reference/apis/js-apis-rpc.md).
146