frida 16.7.13 → 16.7.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/README.md +1 -10
  2. package/build/BSDmakefile +6 -0
  3. package/build/Makefile +10 -0
  4. package/build/src/frida.d.ts +364 -0
  5. package/build/src/frida.js +962 -0
  6. package/build/src/frida_binding.d.ts +938 -0
  7. package/meson.build +34 -67
  8. package/package.json +30 -20
  9. package/scripts/fetch-abi-bits.py +15 -65
  10. package/scripts/install.js +5 -4
  11. package/src/addon.def +3 -0
  12. package/src/addon.symbols +2 -1
  13. package/src/addon.version +4 -0
  14. package/src/frida_bindgen/__init__.py +0 -0
  15. package/src/frida_bindgen/__main__.py +4 -0
  16. package/src/frida_bindgen/__pycache__/__init__.cpython-312.pyc +0 -0
  17. package/src/frida_bindgen/__pycache__/__main__.cpython-312.pyc +0 -0
  18. package/src/frida_bindgen/__pycache__/cli.cpython-312.pyc +0 -0
  19. package/src/frida_bindgen/__pycache__/codegen.cpython-312.pyc +0 -0
  20. package/src/frida_bindgen/__pycache__/customization.cpython-312.pyc +0 -0
  21. package/src/frida_bindgen/__pycache__/loader.cpython-312.pyc +0 -0
  22. package/src/frida_bindgen/__pycache__/model.cpython-312.pyc +0 -0
  23. package/src/frida_bindgen/assets/codegen_helpers.c +1970 -0
  24. package/src/frida_bindgen/assets/codegen_helpers.ts +100 -0
  25. package/src/frida_bindgen/assets/codegen_prototypes.h +78 -0
  26. package/src/frida_bindgen/assets/codegen_types.h +57 -0
  27. package/src/frida_bindgen/assets/customization_facade.exports +13 -0
  28. package/src/frida_bindgen/assets/customization_facade.ts +157 -0
  29. package/src/frida_bindgen/assets/customization_helpers.imports +2 -0
  30. package/src/frida_bindgen/assets/customization_helpers.ts +396 -0
  31. package/src/frida_bindgen/cli.py +96 -0
  32. package/src/frida_bindgen/codegen.py +2233 -0
  33. package/src/frida_bindgen/customization.py +924 -0
  34. package/src/frida_bindgen/loader.py +60 -0
  35. package/src/frida_bindgen/model.py +1357 -0
  36. package/src/meson.build +92 -27
  37. package/{lib/build.py → src/tsc.py} +12 -12
  38. package/src/win_delay_load_hook.c +56 -0
  39. package/subprojects/frida-core.wrap +1 -1
  40. package/test/data/index.ts +2 -2
  41. package/test/device.ts +1 -2
  42. package/test/device_manager.ts +1 -2
  43. package/test/labrat.ts +2 -2
  44. package/test/script.ts +12 -12
  45. package/test/session.ts +3 -3
  46. package/tsconfig.json +6 -11
  47. package/dist/application.d.ts +0 -81
  48. package/dist/application.js +0 -2
  49. package/dist/authentication.d.ts +0 -3
  50. package/dist/authentication.js +0 -2
  51. package/dist/bus.d.ts +0 -16
  52. package/dist/bus.js +0 -23
  53. package/dist/cancellable.d.ts +0 -15
  54. package/dist/cancellable.js +0 -41
  55. package/dist/child.d.ts +0 -16
  56. package/dist/child.js +0 -9
  57. package/dist/crash.d.ts +0 -10
  58. package/dist/crash.js +0 -2
  59. package/dist/device.d.ts +0 -156
  60. package/dist/device.js +0 -188
  61. package/dist/device_manager.d.ts +0 -25
  62. package/dist/device_manager.js +0 -42
  63. package/dist/endpoint_parameters.d.ts +0 -26
  64. package/dist/endpoint_parameters.js +0 -24
  65. package/dist/icon.d.ts +0 -14
  66. package/dist/icon.js +0 -2
  67. package/dist/index.d.ts +0 -161
  68. package/dist/index.js +0 -170
  69. package/dist/iostream.d.ts +0 -13
  70. package/dist/iostream.js +0 -73
  71. package/dist/native.d.ts +0 -1
  72. package/dist/native.js +0 -11
  73. package/dist/portal_membership.d.ts +0 -6
  74. package/dist/portal_membership.js +0 -12
  75. package/dist/portal_service.d.ts +0 -48
  76. package/dist/portal_service.js +0 -52
  77. package/dist/process.d.ts +0 -47
  78. package/dist/process.js +0 -2
  79. package/dist/relay.d.ts +0 -22
  80. package/dist/relay.js +0 -32
  81. package/dist/script.d.ts +0 -70
  82. package/dist/script.js +0 -266
  83. package/dist/service.d.ts +0 -16
  84. package/dist/service.js +0 -26
  85. package/dist/session.d.ts +0 -45
  86. package/dist/session.js +0 -73
  87. package/dist/signals.d.ts +0 -20
  88. package/dist/signals.js +0 -40
  89. package/dist/socket_address.d.ts +0 -25
  90. package/dist/socket_address.js +0 -2
  91. package/dist/spawn.d.ts +0 -4
  92. package/dist/spawn.js +0 -2
  93. package/dist/system_parameters.d.ts +0 -84
  94. package/dist/system_parameters.js +0 -2
  95. package/lib/application.ts +0 -98
  96. package/lib/authentication.ts +0 -3
  97. package/lib/bus.ts +0 -30
  98. package/lib/cancellable.ts +0 -48
  99. package/lib/child.ts +0 -15
  100. package/lib/crash.ts +0 -11
  101. package/lib/device.ts +0 -331
  102. package/lib/device_manager.ts +0 -69
  103. package/lib/endpoint_parameters.ts +0 -56
  104. package/lib/icon.ts +0 -15
  105. package/lib/index.ts +0 -316
  106. package/lib/iostream.ts +0 -78
  107. package/lib/meson.build +0 -53
  108. package/lib/native.ts +0 -9
  109. package/lib/portal_membership.ts +0 -10
  110. package/lib/portal_service.ts +0 -105
  111. package/lib/process.ts +0 -57
  112. package/lib/relay.ts +0 -44
  113. package/lib/script.ts +0 -361
  114. package/lib/service.ts +0 -34
  115. package/lib/session.ts +0 -113
  116. package/lib/signals.ts +0 -45
  117. package/lib/socket_address.ts +0 -35
  118. package/lib/spawn.ts +0 -4
  119. package/lib/system_parameters.ts +0 -103
  120. package/meson.options +0 -11
  121. package/src/addon.cc +0 -78
  122. package/src/application.cc +0 -148
  123. package/src/application.h +0 -31
  124. package/src/authentication.cc +0 -174
  125. package/src/authentication.h +0 -24
  126. package/src/bus.cc +0 -167
  127. package/src/bus.h +0 -33
  128. package/src/cancellable.cc +0 -117
  129. package/src/cancellable.h +0 -31
  130. package/src/child.cc +0 -150
  131. package/src/child.h +0 -32
  132. package/src/crash.cc +0 -122
  133. package/src/crash.h +0 -30
  134. package/src/device.cc +0 -1350
  135. package/src/device.h +0 -56
  136. package/src/device_manager.cc +0 -362
  137. package/src/device_manager.h +0 -35
  138. package/src/endpoint_parameters.cc +0 -171
  139. package/src/endpoint_parameters.h +0 -28
  140. package/src/glib_context.cc +0 -62
  141. package/src/glib_context.h +0 -29
  142. package/src/glib_object.cc +0 -25
  143. package/src/glib_object.h +0 -37
  144. package/src/iostream.cc +0 -243
  145. package/src/iostream.h +0 -30
  146. package/src/operation.h +0 -94
  147. package/src/portal_membership.cc +0 -100
  148. package/src/portal_membership.h +0 -26
  149. package/src/portal_service.cc +0 -401
  150. package/src/portal_service.h +0 -40
  151. package/src/process.cc +0 -135
  152. package/src/process.h +0 -30
  153. package/src/relay.cc +0 -139
  154. package/src/relay.h +0 -31
  155. package/src/runtime.cc +0 -568
  156. package/src/runtime.h +0 -69
  157. package/src/script.cc +0 -301
  158. package/src/script.h +0 -36
  159. package/src/service.cc +0 -224
  160. package/src/service.h +0 -36
  161. package/src/session.cc +0 -860
  162. package/src/session.h +0 -42
  163. package/src/signals.cc +0 -334
  164. package/src/signals.h +0 -47
  165. package/src/spawn.cc +0 -95
  166. package/src/spawn.h +0 -27
  167. package/src/usage_monitor.h +0 -117
  168. package/src/uv_context.cc +0 -118
  169. package/src/uv_context.h +0 -40
  170. package/src/win_delay_load_hook.cc +0 -63
  171. package/subprojects/nan.wrap +0 -9
  172. package/subprojects/packagefiles/nan.patch +0 -13
package/src/script.cc DELETED
@@ -1,301 +0,0 @@
1
- #include "script.h"
2
-
3
- #include "operation.h"
4
- #include "signals.h"
5
- #include "usage_monitor.h"
6
-
7
- #include <cstring>
8
-
9
- #define SCRIPT_DATA_CONSTRUCTOR "script:ctor"
10
-
11
- using std::strcmp;
12
- using v8::DEFAULT;
13
- using v8::External;
14
- using v8::Function;
15
- using v8::Isolate;
16
- using v8::Local;
17
- using v8::Object;
18
- using v8::Persistent;
19
- using v8::ReadOnly;
20
- using v8::String;
21
- using v8::Value;
22
-
23
- namespace frida {
24
-
25
- Script::Script(FridaScript* handle, Runtime* runtime)
26
- : GLibObject(handle, runtime) {
27
- g_object_ref(handle_);
28
- }
29
-
30
- Script::~Script() {
31
- frida_unref(handle_);
32
- }
33
-
34
- void Script::Init(Local<Object> exports, Runtime* runtime) {
35
- auto isolate = Isolate::GetCurrent();
36
-
37
- auto name = Nan::New("Script").ToLocalChecked();
38
- auto tpl = CreateTemplate(name, New, runtime);
39
-
40
- auto instance_tpl = tpl->InstanceTemplate();
41
- auto data = Local<Value>();
42
- Nan::SetAccessor(instance_tpl, Nan::New("isDestroyed").ToLocalChecked(),
43
- IsDestroyed, 0, data, DEFAULT, ReadOnly);
44
-
45
- Nan::SetPrototypeMethod(tpl, "load", Load);
46
- Nan::SetPrototypeMethod(tpl, "unload", Unload);
47
- Nan::SetPrototypeMethod(tpl, "eternalize", Eternalize);
48
- Nan::SetPrototypeMethod(tpl, "post", Post);
49
- Nan::SetPrototypeMethod(tpl, "enableDebugger", EnableDebugger);
50
- Nan::SetPrototypeMethod(tpl, "disableDebugger", DisableDebugger);
51
-
52
- auto ctor = Nan::GetFunction(tpl).ToLocalChecked();
53
- Nan::Set(exports, name, ctor);
54
- runtime->SetDataPointer(SCRIPT_DATA_CONSTRUCTOR,
55
- new Persistent<Function>(isolate, ctor));
56
- }
57
-
58
- Local<Object> Script::New(gpointer handle, Runtime* runtime) {
59
- auto ctor = Nan::New<Function>(
60
- *static_cast<Persistent<Function>*>(
61
- runtime->GetDataPointer(SCRIPT_DATA_CONSTRUCTOR)));
62
- const int argc = 1;
63
- Local<Value> argv[argc] = { Nan::New<External>(handle) };
64
- return Nan::NewInstance(ctor, argc, argv).ToLocalChecked();
65
- }
66
-
67
- NAN_METHOD(Script::New) {
68
- if (!info.IsConstructCall()) {
69
- Nan::ThrowError("Use the `new` keyword to create a new instance");
70
- return;
71
- }
72
-
73
- if (info.Length() != 1 || !info[0]->IsExternal()) {
74
- Nan::ThrowTypeError("Bad argument, expected raw handle");
75
- return;
76
- }
77
-
78
- auto runtime = GetRuntimeFromConstructorArgs(info);
79
-
80
- auto handle = static_cast<FridaScript*>(
81
- Local<External>::Cast(info[0])->Value());
82
- auto wrapper = new Script(handle, runtime);
83
- auto obj = info.This();
84
- wrapper->Wrap(obj);
85
- Nan::Set(obj, Nan::New("signals").ToLocalChecked(),
86
- Signals::New(handle, runtime, TransformMessageSignal, runtime));
87
-
88
- auto monitor =
89
- new UsageMonitor<FridaScript>(frida_script_is_destroyed, "destroyed");
90
- monitor->Enable(wrapper);
91
-
92
- info.GetReturnValue().Set(obj);
93
- }
94
-
95
- NAN_PROPERTY_GETTER(Script::IsDestroyed) {
96
- auto handle = ObjectWrap::Unwrap<Script>(
97
- info.Holder())->GetHandle<FridaScript>();
98
-
99
- info.GetReturnValue().Set(
100
- Nan::New(static_cast<bool>(frida_script_is_destroyed(handle))));
101
- }
102
-
103
- namespace {
104
-
105
- class LoadOperation : public Operation<FridaScript> {
106
- protected:
107
- void Begin() {
108
- frida_script_load(handle_, cancellable_, OnReady, this);
109
- }
110
-
111
- void End(GAsyncResult* result, GError** error) {
112
- frida_script_load_finish(handle_, result, error);
113
- }
114
-
115
- Local<Value> Result(Isolate* isolate) {
116
- return Nan::Undefined();
117
- }
118
- };
119
-
120
- }
121
-
122
- NAN_METHOD(Script::Load) {
123
- auto isolate = info.GetIsolate();
124
- auto wrapper = ObjectWrap::Unwrap<Script>(info.Holder());
125
-
126
- auto operation = new LoadOperation();
127
- operation->Schedule(isolate, wrapper, info);
128
-
129
- info.GetReturnValue().Set(operation->GetPromise(isolate));
130
- }
131
-
132
- namespace {
133
-
134
- class UnloadOperation : public Operation<FridaScript> {
135
- protected:
136
- void Begin() {
137
- frida_script_unload(handle_, cancellable_, OnReady, this);
138
- }
139
-
140
- void End(GAsyncResult* result, GError** error) {
141
- frida_script_unload_finish(handle_, result, error);
142
- }
143
-
144
- Local<Value> Result(Isolate* isolate) {
145
- return Nan::Undefined();
146
- }
147
- };
148
-
149
- }
150
-
151
- NAN_METHOD(Script::Unload) {
152
- auto isolate = info.GetIsolate();
153
- auto wrapper = ObjectWrap::Unwrap<Script>(info.Holder());
154
-
155
- auto operation = new UnloadOperation();
156
- operation->Schedule(isolate, wrapper, info);
157
-
158
- info.GetReturnValue().Set(operation->GetPromise(isolate));
159
- }
160
-
161
- namespace {
162
-
163
- class EternalizeOperation : public Operation<FridaScript> {
164
- protected:
165
- void Begin() {
166
- frida_script_eternalize(handle_, cancellable_, OnReady, this);
167
- }
168
-
169
- void End(GAsyncResult* result, GError** error) {
170
- frida_script_eternalize_finish(handle_, result, error);
171
- }
172
-
173
- Local<Value> Result(Isolate* isolate) {
174
- return Nan::Undefined();
175
- }
176
- };
177
-
178
- }
179
-
180
- NAN_METHOD(Script::Eternalize) {
181
- auto isolate = info.GetIsolate();
182
- auto wrapper = ObjectWrap::Unwrap<Script>(info.Holder());
183
-
184
- auto operation = new EternalizeOperation();
185
- operation->Schedule(isolate, wrapper, info);
186
-
187
- info.GetReturnValue().Set(operation->GetPromise(isolate));
188
- }
189
-
190
- NAN_METHOD(Script::Post) {
191
- auto wrapper = ObjectWrap::Unwrap<Script>(info.Holder());
192
-
193
- auto num_args = info.Length();
194
- if (num_args < 2) {
195
- Nan::ThrowTypeError("Expected message and data");
196
- return;
197
- }
198
-
199
- Nan::Utf8String message(wrapper->runtime_->ValueToJson(info[0]));
200
-
201
- GBytes* data = NULL;
202
- auto buffer = info[1];
203
- if (!buffer->IsNull()) {
204
- if (!node::Buffer::HasInstance(buffer)) {
205
- Nan::ThrowTypeError("Expected a buffer");
206
- return;
207
- }
208
- data = g_bytes_new(node::Buffer::Data(buffer),
209
- node::Buffer::Length(buffer));
210
- }
211
-
212
- frida_script_post(wrapper->GetHandle<FridaScript>(), *message, data);
213
-
214
- g_bytes_unref(data);
215
- }
216
-
217
- namespace {
218
-
219
- class EnableDebuggerOperation : public Operation<FridaScript> {
220
- public:
221
- EnableDebuggerOperation(guint16 port) : port_(port) {
222
- }
223
-
224
- protected:
225
- void Begin() {
226
- frida_script_enable_debugger(handle_, port_, cancellable_, OnReady, this);
227
- }
228
-
229
- void End(GAsyncResult* result, GError** error) {
230
- frida_script_enable_debugger_finish(handle_, result, error);
231
- }
232
-
233
- Local<Value> Result(Isolate* isolate) {
234
- return Nan::Undefined();
235
- }
236
-
237
- private:
238
- guint16 port_;
239
- };
240
-
241
- }
242
-
243
- NAN_METHOD(Script::EnableDebugger) {
244
- auto isolate = info.GetIsolate();
245
- auto wrapper = ObjectWrap::Unwrap<Script>(info.Holder());
246
-
247
- if (info.Length() < 1 || !info[0]->IsNumber()) {
248
- Nan::ThrowTypeError("Bad argument, expected port number");
249
- return;
250
- }
251
- auto port = Nan::To<int32_t>(info[0]).FromMaybe(-1);
252
- if (port < 0 || port >= 65536) {
253
- Nan::ThrowTypeError("Bad argument, expected port number");
254
- return;
255
- }
256
-
257
- auto operation = new EnableDebuggerOperation(static_cast<guint16>(port));
258
- operation->Schedule(isolate, wrapper, info);
259
-
260
- info.GetReturnValue().Set(operation->GetPromise(isolate));
261
- }
262
-
263
- namespace {
264
-
265
- class DisableDebuggerOperation : public Operation<FridaScript> {
266
- protected:
267
- void Begin() {
268
- frida_script_disable_debugger(handle_, cancellable_, OnReady, this);
269
- }
270
-
271
- void End(GAsyncResult* result, GError** error) {
272
- frida_script_disable_debugger_finish(handle_, result, error);
273
- }
274
-
275
- Local<Value> Result(Isolate* isolate) {
276
- return Nan::Undefined();
277
- }
278
- };
279
-
280
- }
281
-
282
- NAN_METHOD(Script::DisableDebugger) {
283
- auto isolate = info.GetIsolate();
284
- auto wrapper = ObjectWrap::Unwrap<Script>(info.Holder());
285
-
286
- auto operation = new DisableDebuggerOperation();
287
- operation->Schedule(isolate, wrapper, info);
288
-
289
- info.GetReturnValue().Set(operation->GetPromise(isolate));
290
- }
291
-
292
- Local<Value> Script::TransformMessageSignal(const gchar* name, guint index,
293
- const GValue* value, gpointer user_data) {
294
- if (index != 0 || strcmp(name, "message") != 0)
295
- return Local<Value>();
296
- auto runtime = static_cast<Runtime*>(user_data);
297
- auto json = Nan::New(g_value_get_string(value)).ToLocalChecked();
298
- return runtime->ValueFromJson(json);
299
- }
300
-
301
- }
package/src/script.h DELETED
@@ -1,36 +0,0 @@
1
- #ifndef FRIDANODE_SCRIPT_H
2
- #define FRIDANODE_SCRIPT_H
3
-
4
- #include "glib_object.h"
5
-
6
- #include <frida-core.h>
7
-
8
- namespace frida {
9
-
10
- class Script : public GLibObject {
11
- public:
12
- static void Init(v8::Local<v8::Object> exports, Runtime* runtime);
13
- static v8::Local<v8::Object> New(gpointer handle, Runtime* runtime);
14
-
15
- private:
16
- explicit Script(FridaScript* handle, Runtime* runtime);
17
- ~Script();
18
-
19
- static NAN_METHOD(New);
20
-
21
- static NAN_PROPERTY_GETTER(IsDestroyed);
22
-
23
- static NAN_METHOD(Load);
24
- static NAN_METHOD(Unload);
25
- static NAN_METHOD(Eternalize);
26
- static NAN_METHOD(Post);
27
- static NAN_METHOD(EnableDebugger);
28
- static NAN_METHOD(DisableDebugger);
29
-
30
- static v8::Local<v8::Value> TransformMessageSignal(const gchar* name,
31
- guint index, const GValue* value, gpointer user_data);
32
- };
33
-
34
- }
35
-
36
- #endif
package/src/service.cc DELETED
@@ -1,224 +0,0 @@
1
- #include "service.h"
2
-
3
- #include "operation.h"
4
- #include "signals.h"
5
- #include "usage_monitor.h"
6
-
7
- #include <cstring>
8
-
9
- #define SERVICE_DATA_CONSTRUCTOR "service:ctor"
10
-
11
- using std::strcmp;
12
- using v8::External;
13
- using v8::Function;
14
- using v8::Isolate;
15
- using v8::Local;
16
- using v8::Object;
17
- using v8::Persistent;
18
- using v8::Value;
19
-
20
- namespace frida {
21
-
22
- Service::Service(FridaService* handle, Runtime* runtime)
23
- : GLibObject(handle, runtime),
24
- usage_monitor_created_(false) {
25
- g_object_ref(handle_);
26
- }
27
-
28
- Service::~Service() {
29
- g_object_unref(handle_);
30
- }
31
-
32
- void Service::Init(Local<Object> exports, Runtime* runtime) {
33
- auto isolate = Isolate::GetCurrent();
34
-
35
- auto name = Nan::New("Service").ToLocalChecked();
36
- auto tpl = CreateTemplate(name, New, runtime);
37
-
38
- Nan::SetPrototypeMethod(tpl, "activate", Activate);
39
- Nan::SetPrototypeMethod(tpl, "cancel", Cancel);
40
- Nan::SetPrototypeMethod(tpl, "request", Request);
41
-
42
- auto ctor = Nan::GetFunction(tpl).ToLocalChecked();
43
- Nan::Set(exports, name, ctor);
44
- runtime->SetDataPointer(SERVICE_DATA_CONSTRUCTOR,
45
- new Persistent<Function>(isolate, ctor));
46
- }
47
-
48
- Local<Object> Service::New(gpointer handle, Runtime* runtime) {
49
- auto ctor = Nan::New<Function>(
50
- *static_cast<Persistent<Function>*>(
51
- runtime->GetDataPointer(SERVICE_DATA_CONSTRUCTOR)));
52
- const int argc = 1;
53
- Local<Value> argv[argc] = { Nan::New<External>(handle) };
54
- return Nan::NewInstance(ctor, argc, argv).ToLocalChecked();
55
- }
56
-
57
- NAN_METHOD(Service::New) {
58
- if (!info.IsConstructCall()) {
59
- Nan::ThrowError("Use the `new` keyword to create a new instance");
60
- return;
61
- }
62
-
63
- if (info.Length() != 1 || !info[0]->IsExternal()) {
64
- Nan::ThrowTypeError("Bad argument, expected raw handle");
65
- return;
66
- }
67
-
68
- auto runtime = GetRuntimeFromConstructorArgs(info);
69
-
70
- auto handle = static_cast<FridaService*>(
71
- Local<External>::Cast(info[0])->Value());
72
- auto wrapper = new Service(handle, runtime);
73
- auto obj = info.This();
74
- wrapper->Wrap(obj);
75
- auto signals_obj = Signals::New(handle, runtime, TransformSignal, runtime);
76
-
77
- Nan::Set(obj, Nan::New("signals").ToLocalChecked(), signals_obj);
78
-
79
- auto signals_wrapper = ObjectWrap::Unwrap<Signals>(signals_obj);
80
- signals_wrapper->SetConnectCallback(OnConnect, wrapper);
81
-
82
- info.GetReturnValue().Set(obj);
83
- }
84
-
85
- namespace {
86
-
87
- class ActivateOperation : public Operation<FridaService> {
88
- protected:
89
- void Begin() {
90
- frida_service_activate(handle_, cancellable_, OnReady, this);
91
- }
92
-
93
- void End(GAsyncResult* result, GError** error) {
94
- frida_service_activate_finish(handle_, result, error);
95
- }
96
-
97
- Local<Value> Result(Isolate* isolate) {
98
- return Nan::Undefined();
99
- }
100
- };
101
-
102
- }
103
-
104
- NAN_METHOD(Service::Activate) {
105
- auto isolate = info.GetIsolate();
106
- auto wrapper = ObjectWrap::Unwrap<Service>(info.Holder());
107
-
108
- auto operation = new ActivateOperation();
109
- operation->Schedule(isolate, wrapper, info);
110
-
111
- info.GetReturnValue().Set(operation->GetPromise(isolate));
112
- }
113
-
114
- namespace {
115
-
116
- class CancelOperation : public Operation<FridaService> {
117
- protected:
118
- void Begin() {
119
- frida_service_cancel(handle_, cancellable_, OnReady, this);
120
- }
121
-
122
- void End(GAsyncResult* result, GError** error) {
123
- frida_service_cancel_finish(handle_, result, error);
124
- }
125
-
126
- Local<Value> Result(Isolate* isolate) {
127
- return Nan::Undefined();
128
- }
129
- };
130
-
131
- }
132
-
133
- NAN_METHOD(Service::Cancel) {
134
- auto isolate = info.GetIsolate();
135
- auto wrapper = ObjectWrap::Unwrap<Service>(info.Holder());
136
-
137
- auto operation = new CancelOperation();
138
- operation->Schedule(isolate, wrapper, info);
139
-
140
- info.GetReturnValue().Set(operation->GetPromise(isolate));
141
- }
142
-
143
- namespace {
144
-
145
- class RequestOperation : public Operation<FridaService> {
146
- public:
147
- RequestOperation(GVariant* parameters)
148
- : parameters_(parameters) {
149
- }
150
-
151
- ~RequestOperation() {
152
- g_variant_unref(parameters_);
153
- }
154
-
155
- protected:
156
- void Begin() {
157
- frida_service_request(handle_, parameters_, cancellable_, OnReady, this);
158
- }
159
-
160
- void End(GAsyncResult* result, GError** error) {
161
- response_ = frida_service_request_finish(handle_, result, error);
162
- }
163
-
164
- Local<Value> Result(Isolate* isolate) {
165
- auto wrapper = Runtime::ValueFromVariant(response_);
166
- g_variant_unref(response_);
167
- return wrapper;
168
- }
169
-
170
- private:
171
- GVariant* parameters_;
172
- GVariant* response_;
173
- };
174
-
175
- }
176
-
177
- NAN_METHOD(Service::Request) {
178
- auto isolate = info.GetIsolate();
179
- auto wrapper = ObjectWrap::Unwrap<Service>(info.Holder());
180
-
181
- if (info.Length() == 0) {
182
- Nan::ThrowTypeError("Expected a parameters value");
183
- return;
184
- }
185
-
186
- auto parameters = Runtime::ValueToVariant(info[0]);
187
- if (parameters == NULL) {
188
- return;
189
- }
190
-
191
- auto operation = new RequestOperation(parameters);
192
- operation->Schedule(isolate, wrapper, info);
193
-
194
- info.GetReturnValue().Set(operation->GetPromise(isolate));
195
- }
196
-
197
- Local<Value> Service::TransformSignal(const gchar* name, guint index,
198
- const GValue* value, gpointer user_data) {
199
- if (index != 0 || strcmp(name, "message") != 0)
200
- return Local<Value>();
201
- return Runtime::ValueFromVariant(g_value_get_variant(value));
202
- }
203
-
204
- void Service::OnConnect(const gchar* name, gpointer user_data) {
205
- auto wrapper = static_cast<Service*>(user_data);
206
-
207
- if (ShouldStayAliveToEmit(name))
208
- wrapper->EnsureUsageMonitorCreated();
209
- }
210
-
211
- bool Service::ShouldStayAliveToEmit(const gchar* name) {
212
- return strcmp(name, "close") == 0 || strcmp(name, "message") == 0;
213
- }
214
-
215
- void Service::EnsureUsageMonitorCreated() {
216
- if (!usage_monitor_created_) {
217
- usage_monitor_created_ = true;
218
- auto monitor =
219
- new UsageMonitor<FridaService>(frida_service_is_closed, "close");
220
- monitor->Enable(this);
221
- }
222
- }
223
-
224
- }
package/src/service.h DELETED
@@ -1,36 +0,0 @@
1
- #ifndef FRIDANODE_SERVICE_H
2
- #define FRIDANODE_SERVICE_H
3
-
4
- #include "glib_object.h"
5
-
6
- #include <frida-core.h>
7
-
8
- namespace frida {
9
-
10
- class Service : public GLibObject {
11
- public:
12
- static void Init(v8::Local<v8::Object> exports, Runtime* runtime);
13
- static v8::Local<v8::Object> New(gpointer handle, Runtime* runtime);
14
-
15
- private:
16
- explicit Service(FridaService* handle, Runtime* runtime);
17
- ~Service();
18
-
19
- static NAN_METHOD(New);
20
-
21
- static NAN_METHOD(Activate);
22
- static NAN_METHOD(Cancel);
23
- static NAN_METHOD(Request);
24
-
25
- static v8::Local<v8::Value> TransformSignal(const gchar* name, guint index,
26
- const GValue* value, gpointer user_data);
27
- static void OnConnect(const gchar* signal, gpointer user_data);
28
- static bool ShouldStayAliveToEmit(const gchar* signal);
29
- void EnsureUsageMonitorCreated();
30
-
31
- bool usage_monitor_created_;
32
- };
33
-
34
- }
35
-
36
- #endif