2 * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.Runtime.InteropServices;
20 using Tizen.Internals.Errors;
21 using Tizen.Applications;
22 using System.Reflection;
24 internal static partial class Interop
26 internal static partial class LibRPCPort
28 internal enum ErrorCode
30 None = Tizen.Internals.Errors.ErrorCode.None,
31 InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter,
32 OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory,
33 PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied,
34 IoError = Tizen.Internals.Errors.ErrorCode.IoError,
37 internal enum PortType
43 internal static partial class Parcel
45 //int rpc_port_parcel_create(rpc_port_parcel_h *h);
46 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_create")]
47 internal static extern ErrorCode Create(out IntPtr handle);
49 //int rpc_port_parcel_create_from_port(rpc_port_parcel_h *h, rpc_port_h port);
50 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_create_from_port")]
51 internal static extern ErrorCode CreateFromPort(out IntPtr parcelHandle, IntPtr portHandle);
53 //int rpc_port_parcel_send(rpc_port_parcel_h h, rpc_port_h port);
54 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_send")]
55 internal static extern ErrorCode Send(IntPtr parcelHandle, IntPtr portHandle);
57 //int rpc_port_parcel_destroy(rpc_port_parcel_h h);
58 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_destroy")]
59 internal static extern ErrorCode Destroy(IntPtr handle);
61 //int rpc_port_parcel_write_byte(rpc_port_parcel_h h, char b);
62 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_write_byte")]
63 internal static extern ErrorCode WriteByte(IntPtr parcelHandle, byte b);
65 //int rpc_port_parcel_write_int16(rpc_port_parcel_h h, short i);
66 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_write_int16")]
67 internal static extern ErrorCode WriteInt16(IntPtr parcelHandle, short i);
69 //int rpc_port_parcel_write_int32(rpc_port_parcel_h h, int i);
70 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_write_int32")]
71 internal static extern ErrorCode WriteInt32(IntPtr parcelHandle, int i);
73 //int rpc_port_parcel_write_int64(rpc_port_parcel_h h, int i);
74 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_write_int64")]
75 internal static extern ErrorCode WriteInt64(IntPtr parcelHandle, long i);
77 //int rpc_port_parcel_write_float(rpc_port_parcel_h h, float f);
78 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_write_float")]
79 internal static extern ErrorCode WriteFloat(IntPtr parcelHandle, float f);
81 //int rpc_port_parcel_write_double(rpc_port_parcel_h h, double d);
82 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_write_double")]
83 internal static extern ErrorCode WriteDouble(IntPtr parcelHandle, double d);
85 //int rpc_port_parcel_write_string(rpc_port_parcel_h h, const char* str);
86 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_write_string")]
87 internal static extern ErrorCode WriteString(IntPtr parcelHandle, string str);
89 //int rpc_port_parcel_write_bool(rpc_port_parcel_h h, bool b);
90 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_write_bool")]
91 internal static extern ErrorCode WriteBool(IntPtr parcelHandle, bool b);
93 //int rpc_port_parcel_write_bundle(rpc_port_parcel_h h, bundle* b);
94 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_write_bundle")]
95 internal static extern ErrorCode WriteBundle(IntPtr parcelHandle, IntPtr b);
97 //int rpc_port_parcel_write_array_count(rpc_port_parcel_h h, int count);
98 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_write_array_count")]
99 internal static extern ErrorCode WriteArrayCount(IntPtr parcelHandle, int count);
101 //int rpc_port_parcel_read_byte(rpc_port_parcel_h h, char* b);
102 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_read_byte")]
103 internal static extern ErrorCode ReadByte(IntPtr parcelHandle, out byte b);
105 //int rpc_port_parcel_read_int16(rpc_port_parcel_h h, short *i);
106 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_read_int16")]
107 internal static extern ErrorCode ReadInt16(IntPtr parcelHandle, out short i);
109 //int rpc_port_parcel_read_int32(rpc_port_parcel_h h, int* i);
110 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_read_int32")]
111 internal static extern ErrorCode ReadInt32(IntPtr parcelHandle, out int i);
113 //int rpc_port_parcel_read_int64(rpc_port_parcel_h h, long long* i);
114 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_read_int64")]
115 internal static extern ErrorCode ReadInt64(IntPtr parcelHandle, out long i);
117 //int rpc_port_parcel_read_float(rpc_port_parcel_h h, float *f);
118 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_read_float")]
119 internal static extern ErrorCode ReadFloat(IntPtr parcelHandle, out float f);
121 //int rpc_port_parcel_read_double(rpc_port_parcel_h h, double *d);
122 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_read_double")]
123 internal static extern ErrorCode ReadDouble(IntPtr parcelHandle, out double f);
125 //int rpc_port_parcel_read_string(rpc_port_parcel_h h, char** str);
126 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_read_string")]
127 internal static extern ErrorCode ReadString(IntPtr parcelHandle, out string str);
129 //int rpc_port_parcel_read_bool(rpc_port_parcel_h h, bool *b);
130 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_read_bool")]
131 internal static extern ErrorCode ReadBool(IntPtr parcelHandle, out bool b);
133 //int rpc_port_parcel_read_bundle(rpc_port_parcel_h h, bundle** b);
134 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_read_bundle")]
135 internal static extern ErrorCode ReadBundle(IntPtr parcelHandle, out IntPtr b);
137 //int rpc_port_parcel_read_array_count(rpc_port_parcel_h h, int *count);
138 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_read_array_count")]
139 internal static extern ErrorCode ReadArrayCount(IntPtr parcelHandle, out int count);
141 //int rpc_port_parcel_burst_read(rpc_port_parcel_h h, unsigned char *buf, unsigned int size);
142 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_burst_read")]
143 internal static extern ErrorCode Read(IntPtr parcelHandle, [In, Out] byte[] buf, int size);
145 //int rpc_port_parcel_burst_write(rpc_port_parcel_h h, const unsigned char *buf, unsigned int size);
146 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_burst_write")]
147 internal static extern ErrorCode Write(IntPtr parcelHandle, byte[] buf, int size);
149 //int rpc_port_parcel_get_header(rpc_port_parcel_h h, rpc_port_parcel_header_h *header);
150 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_get_header")]
151 internal static extern ErrorCode GetHeader(IntPtr parcelHandle, out IntPtr ParcelHeaderHandle);
153 //int rpc_port_parcel_header_set_tag(rpc_port_parcel_header_h header, const char *tag);
154 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_header_set_tag")]
155 internal static extern ErrorCode SetTag(IntPtr parcelHeaderHandle, string tag);
157 //int rpc_port_parcel_header_get_tag(rpc_port_parcel_header_h header, char **tag);
158 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_header_get_tag")]
159 internal static extern ErrorCode GetTag(IntPtr parcelHeaderHandle, out string tag);
161 //int rpc_port_parcel_header_set_seq_num(rpc_port_parcel_header_h header, int seq_num);
162 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_header_set_seq_num")]
163 internal static extern ErrorCode SetSeqNum(IntPtr parcelHeaderHandle, int seq_num);
165 //int rpc_port_parcel_header_get_seq_num(rpc_port_parcel_header_h header, int *seq_num);
166 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_header_get_seq_num")]
167 internal static extern ErrorCode GetSeqNum(IntPtr parcelHeaderHandle, out int seq_num);
169 //int rpc_port_parcel_header_get_timestamp(rpc_port_parcel_header_h header, struct timespec *timestamp);
170 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_header_get_timestamp")]
171 internal static extern ErrorCode GetTimeStamp(IntPtr parcelHeaderHandle, ref Libc.TimeStamp time);
173 //int rpc_port_parcel_get_raw(rpc_port_parcel_h h, void **raw, unsigned int *size);
174 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_get_raw")]
175 internal static extern ErrorCode GetRaw(IntPtr parcelHandle, out IntPtr raw, out uint size);
177 //int rpc_port_parcel_create_from_raw(rpc_port_parcel_h *h, const void *raw, unsigned int size);
178 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_parcel_create_from_raw")]
179 internal static extern ErrorCode CreateFromRaw(out IntPtr parcelHandle, byte[] raw, uint size);
182 internal static partial class Proxy
184 //typedef void (*rpc_port_proxy_connected_event_cb)(const char *ep, const char* port_name, rpc_port_h port, void* data);
185 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
186 internal delegate void ConnectedEventCallback(string endPoint, string port_name, IntPtr port, IntPtr data);
188 //typedef void (*rpc_port_proxy_disconnected_event_cb)(const char *ep, const char* port_name, void* data);
189 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
190 internal delegate void DisconnectedEventCallback(string endPoint, string port_name, IntPtr data);
192 //typedef void (*rpc_port_proxy_rejected_event_cb) (const char* ep, const char* port_name, void* data);
193 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
194 internal delegate void RejectedEventCallback(string endPoint, string port_name, IntPtr data);
196 //typedef void (*rpc_port_proxy_received_event_cb) (const char* ep, const char* port_name, void* data);
197 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
198 internal delegate void ReceivedEventCallback(string endPoint, string port_name, IntPtr data);
200 //int rpc_port_proxy_create(rpc_port_proxy_h *h);
201 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_proxy_create")]
202 internal static extern ErrorCode Create(out IntPtr handle);
204 //int rpc_port_proxy_destroy(rpc_port_proxy_h h);
205 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_proxy_destroy")]
206 internal static extern ErrorCode Destroy(IntPtr handle);
208 //int rpc_port_proxy_connect(rpc_port_proxy_h h, const char *appid, const char* port);
209 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_proxy_connect")]
210 internal static extern ErrorCode Connect(IntPtr handle, string appId, string port);
212 //int rpc_port_proxy_add_connected_event_cb(rpc_port_proxy_h h, rpc_port_proxy_connected_event_cb cb, void* data);
213 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_proxy_add_connected_event_cb")]
214 internal static extern ErrorCode AddConnectedEventCb(IntPtr handle, ConnectedEventCallback cb, IntPtr data);
216 //int rpc_port_proxy_add_disconnected_event_cb(rpc_port_proxy_h h, rpc_port_proxy_disconnected_event_cb cb, void* data);
217 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_proxy_add_disconnected_event_cb")]
218 internal static extern ErrorCode AddDisconnectedEventCb(IntPtr handle, DisconnectedEventCallback cb, IntPtr data);
220 //int rpc_port_proxy_add_rejected_event_cb(rpc_port_proxy_h h, rpc_port_proxy_rejected_event_cb cb, void* data);
221 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_proxy_add_rejected_event_cb")]
222 internal static extern ErrorCode AddRejectedEventCb(IntPtr handle, RejectedEventCallback cb, IntPtr data);
224 //int rpc_port_proxy_add_received_event_cb(rpc_port_proxy_h h, rpc_port_proxy_received_event_cb cb, void* data);
225 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_proxy_add_received_event_cb")]
226 internal static extern ErrorCode AddReceivedEventCb(IntPtr handle, ReceivedEventCallback cb, IntPtr data);
228 //int rpc_port_proxy_get_port(rpc_port_proxy_h h, rpc_port_port_type_e type, rpc_port_h* port);
229 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_proxy_get_port")]
230 internal static extern ErrorCode GetPort(IntPtr handle, PortType t, out IntPtr port);
232 //int rpc_port_proxy_connect_sync(rpc_port_proxy_h h, const char* appid, const char* port);
233 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_proxy_connect_sync")]
234 internal static extern ErrorCode ConnectSync(IntPtr handle, string appId, string port);
237 internal static partial class Stub
239 //typedef void (*rpc_port_stub_connected_event_cb)(const char *sender, const char *instance, void* data);
240 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
241 internal delegate void ConnectedEventCallback(string sender, string instance, IntPtr data);
243 //typedef void (* rpc_port_stub_disconnected_event_cb) (const char* sender, const char *instance, void* data);
244 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
245 internal delegate void DisconnectedEventCallback(string sender, string instance, IntPtr data);
247 //typedef void (* rpc_port_stub_received_event_cb) (const char* sender, const char *instance, rpc_port_h port, void* data);
248 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
249 internal delegate int ReceivedEventCallback(string sender, string instance, IntPtr port, IntPtr data);
251 //int rpc_port_stub_create(rpc_port_stub_h* h, const char* port_name);
252 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_stub_create")]
253 internal static extern ErrorCode Create(out IntPtr handle, string portName);
255 //int rpc_port_stub_destroy(rpc_port_stub_h h);
256 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_stub_destroy")]
257 internal static extern ErrorCode Destroy(IntPtr handle);
259 //int rpc_port_stub_listen(rpc_port_stub_h h);
260 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_stub_listen")]
261 internal static extern ErrorCode Listen(IntPtr handle);
263 //int rpc_port_stub_add_connected_event_cb(rpc_port_stub_h h, rpc_port_stub_connected_event_cb cb, void* data);
264 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_stub_add_connected_event_cb")]
265 internal static extern ErrorCode AddConnectedEventCb(IntPtr handle, ConnectedEventCallback cb, IntPtr data);
267 //int rpc_port_stub_add_disconnected_event_cb(rpc_port_stub_h h, rpc_port_stub_disconnected_event_cb cb, void* data);
268 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_stub_add_disconnected_event_cb")]
269 internal static extern ErrorCode AddDisconnectedEventCb(IntPtr handle, DisconnectedEventCallback cb, IntPtr data);
271 //int rpc_port_stub_add_received_event_cb(rpc_port_stub_h h, rpc_port_stub_received_event_cb cb, void* data);
272 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_stub_add_received_event_cb")]
273 internal static extern ErrorCode AddReceivedEventCb(IntPtr handle, ReceivedEventCallback cb, IntPtr data);
275 //int rpc_port_stub_add_privilege(rpc_port_stub_h h, const char *privilege);
276 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_stub_add_privilege")]
277 internal static extern ErrorCode AddPrivilege(IntPtr handle, string privilege);
279 //int rpc_port_stub_set_trusted(rpc_port_stub_h h, const bool trusted);
280 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_stub_set_trusted")]
281 internal static extern ErrorCode SetTrusted(IntPtr handle, bool trusted);
283 //int rpc_port_stub_get_port(rpc_port_stub_h h, rpc_port_port_type_e type, const char* instance, rpc_port_h *port);
284 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_stub_get_port")]
285 internal static extern ErrorCode GetPort(IntPtr handle, PortType t, string instance, out IntPtr port);
288 internal static partial class Port
290 //int rpc_port_set_private_sharing_array(rpc_port_h port, const char* paths[], unsigned int size);
291 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_set_private_sharing_array")]
292 internal static extern ErrorCode SetPrivateSharingArray(IntPtr handle, string[] paths, uint size);
294 //int rpc_port_set_private_sharing(rpc_port_h port, const char* path);
295 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_set_private_sharing")]
296 internal static extern ErrorCode SetPrivateSharing(IntPtr handle, string path);
298 //int rpc_port_unset_private_sharing(rpc_port_h port);
299 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_unset_private_sharing")]
300 internal static extern ErrorCode UnsetPrivateSharing(IntPtr handle);
302 //int rpc_port_disconnect(rpc_port_h h);
303 [DllImport(Libraries.RpcPort, EntryPoint = "rpc_port_disconnect")]
304 internal static extern ErrorCode Disconnect(IntPtr handle);