2 * Copyright (c) 2017 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.
17 #include "wifi-direct-oem.h"
18 #include "method_injector.h"
20 const char *MethodInjector::peer_device_addr_str = "aa:bb:cc:dd:ee:ff";
21 const char *MethodInjector::legacy_peer_iface_addr_str = "aa:bb:cc:dd:ee:ee";
22 const char *MethodInjector::local_mac_str = "aa:bb:cc:dd:ee:dd";
23 const char *MethodInjector::device_name = "gunit_test_name";
24 const char *MethodInjector::pin_str = "12345678";
25 const int MethodInjector::frame_id = WFD_OEM_VSIE_FRAME_P2P_PD_REQ;
26 const char *MethodInjector::vsie_str = "ABCDEFGH";
28 const int MethodInjector::display_type = 3;
29 const int MethodInjector::display_port = 12345;
30 const int MethodInjector::display_hdcp = 0;
31 const int MethodInjector::display_avail = 0;
32 const char *MethodInjector::passphrase = "abcdefgh";
34 MethodInjector::MethodInjector()
39 MethodInjector::MethodInjector(GVariant *input)
45 MethodInjector::MethodInjector(const MethodInjector & Other)
48 this->result = Other.result;
49 g_variant_ref(Other.result);
53 MethodInjector::~MethodInjector()
56 g_variant_unref(this->result);
61 GVariant *MethodInjector::GetResult()
66 const char *MethodInjector::GetDeviceName()
68 return this->device_name;
71 GVariant *MethodInjector::StartDiscoveryListen()
73 GVariantBuilder *builder = NULL;
76 gboolean listen_only = true;
80 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
81 g_variant_builder_add(builder, "{sv}", "Mode",
82 g_variant_new("b", listen_only));
83 g_variant_builder_add(builder, "{sv}", "Timeout",
84 g_variant_new("i", timeout));
85 g_variant_builder_add(builder, "{sv}", "Frequency",
86 g_variant_new("i", frequency));
87 res = g_variant_new("(a{sv})", builder);
88 g_variant_builder_unref(builder);
91 g_variant_unref(this->result);
97 GVariant *MethodInjector::StartDiscoveryFind()
99 GVariantBuilder *builder = NULL;
100 GVariant *res = NULL;
102 gboolean listen_only = false;
106 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
107 g_variant_builder_add(builder, "{sv}", "Mode",
108 g_variant_new("b", listen_only));
109 g_variant_builder_add(builder, "{sv}", "Timeout",
110 g_variant_new("i", timeout));
111 g_variant_builder_add(builder, "{sv}", "Frequency",
112 g_variant_new("i", frequency));
113 res = g_variant_new("(a{sv})", builder);
114 g_variant_builder_unref(builder);
117 g_variant_unref(this->result);
123 GVariant *MethodInjector::CreateGroup()
125 GVariantBuilder *builder = NULL;
126 GVariant *res = NULL;
128 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
129 g_variant_builder_add(builder, "{sv}", "ssid",
130 g_variant_new_string("TIZEN"));
131 res = g_variant_new("(a{sv})", builder);
132 g_variant_builder_unref(builder);
135 g_variant_unref(this->result);
141 GVariant *MethodInjector::Connect()
143 GVariant *res = NULL;
145 res = g_variant_new("(s)", this->peer_device_addr_str);
148 g_variant_unref(this->result);
154 GVariant *MethodInjector::AcceptConnect()
156 GVariant *res = NULL;
158 res = g_variant_new("(s)", this->peer_device_addr_str);
161 g_variant_unref(this->result);
167 GVariant *MethodInjector::RejectConnect()
169 GVariant *res = NULL;
171 res = g_variant_new("(s)", this->peer_device_addr_str);
174 g_variant_unref(this->result);
181 GVariant *MethodInjector::CancelConnect()
183 GVariant *res = NULL;
185 res = g_variant_new("(s)", this->peer_device_addr_str);
188 g_variant_unref(this->result);
194 GVariant *MethodInjector::SetDeviceName()
196 GVariant *res = NULL;
198 res = g_variant_new("(s)", this->device_name);
201 g_variant_unref(this->result);
207 GVariant *MethodInjector::SetReqWpsMode(int req_wps_mode)
209 GVariant *res = NULL;
211 res = g_variant_new("(i)", req_wps_mode);
214 g_variant_unref(this->result);
220 GVariant *MethodInjector::SetGoIntent(int go_intent)
222 GVariant *res = NULL;
224 res = g_variant_new("(i)", go_intent);
227 g_variant_unref(this->result);
233 GVariant *MethodInjector::SetMaxClient(int max_client)
235 GVariant *res = NULL;
237 res = g_variant_new("(i)", max_client);
240 g_variant_unref(this->result);
246 GVariant *MethodInjector::SetAutoConnection(bool mode)
248 GVariant *res = NULL;
250 res = g_variant_new("(b)", mode);
253 g_variant_unref(this->result);
259 GVariant *MethodInjector::SetSessionTimer(int session_timer)
261 GVariant *res = NULL;
263 res = g_variant_new("(i)", session_timer);
266 g_variant_unref(this->result);
272 GVariant *MethodInjector::GetPeerAddr()
274 GVariant *res = NULL;
276 res = g_variant_new("(s)", this->peer_device_addr_str);
279 g_variant_unref(this->result);
285 GVariant *MethodInjector::GetLegacyPeerAddr()
287 GVariant *res = NULL;
289 res = g_variant_new("(s)", this->legacy_peer_iface_addr_str);
292 g_variant_unref(this->result);
298 GVariant *MethodInjector::SetWpsPin()
300 GVariant *res = NULL;
302 res = g_variant_new("(s)", this->pin_str);
305 g_variant_unref(this->result);
311 GVariant *MethodInjector::SetPassphrase()
313 GVariant *res = NULL;
315 res = g_variant_new("(s)", this->passphrase);
318 g_variant_unref(this->result);
324 GVariant *MethodInjector::SetDisplay()
326 GVariant *res = NULL;
328 res = g_variant_new("(iii)", this->display_type, this->display_port, this->display_hdcp);
331 g_variant_unref(this->result);
338 GVariant *MethodInjector::SetDisplayAvail()
340 GVariant *res = NULL;
342 res = g_variant_new("(i)", this->display_avail);
345 g_variant_unref(this->result);
351 GVariant *MethodInjector::SetAutoGroupRemoval(bool enable)
353 GVariant *res = NULL;
355 res = g_variant_new("(b)", enable);
358 g_variant_unref(this->result);
364 GVariant *MethodInjector::SetPersistentGroup(bool enable)
366 GVariant *res = NULL;
368 res = g_variant_new("(b)", enable);
371 g_variant_unref(this->result);
377 GVariant *MethodInjector::AddVsie()
379 GVariant *res = NULL;
381 res = g_variant_new("(is)", this->frame_id, this->vsie_str);
384 g_variant_unref(this->result);
390 GVariant *MethodInjector::GetVsie()
392 GVariant *res = NULL;
394 res = g_variant_new("(i)", this->frame_id);
397 g_variant_unref(this->result);
403 GVariant *MethodInjector::RemoveVsie()
405 GVariant *res = NULL;
407 res = g_variant_new("(is)", this->frame_id, this->vsie_str);
410 g_variant_unref(this->result);
416 GVariant *MethodInjector::SrvStartDiscovery()
418 GVariant *res = NULL;
420 char *mac_addr = "00:00:00:00:00:00";
422 res = g_variant_new("(is)", srv_type, mac_addr);
425 g_variant_unref(this->result);
431 GVariant *MethodInjector::SrvStopDiscovery()
433 GVariant *res = NULL;
435 char *mac_addr = "00:00:00:00:00:00";
437 res = g_variant_new("(is)", srv_type, mac_addr);
440 g_variant_unref(this->result);
446 GVariant *MethodInjector::SrvRegister()
448 GVariant *res = NULL;
450 char *srv = "10|uuid:6859dede-8574-59ab-9332-123456789012::upnp:rootFdevice";
452 res = g_variant_new("(is)", srv_type, srv);
455 g_variant_unref(this->result);
461 GVariant *MethodInjector::SrvRegisterBonjourPtr()
463 GVariant *res = NULL;
465 char *srv = "_http._tcp|ptrLocal._http._tcp";
467 res = g_variant_new("(is)", srv_type, srv);
470 g_variant_unref(this->result);
476 GVariant *MethodInjector::SrvRegisterBonjourTxt()
478 GVariant *res = NULL;
480 char *srv = "_http._tcp|key=value";
482 res = g_variant_new("(is)", srv_type, srv);
485 g_variant_unref(this->result);
491 GVariant *MethodInjector::SrvRegister(int type, char *srv_str)
493 GVariant *res = NULL;
495 res = g_variant_new("(is)", type, srv_str);
498 g_variant_unref(this->result);
504 GVariant *MethodInjector::SrvDeregister()
506 GVariant *res = NULL;
509 res = g_variant_new("(i)", srv_id);
512 g_variant_unref(this->result);
518 GVariant *MethodInjector::AspAdvertise()
520 GVariant *res = NULL;
521 GVariantBuilder *builder = NULL;
523 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
524 g_variant_builder_add(builder, "{sv}", "adv_id", g_variant_new("u", 0));
525 g_variant_builder_add(builder, "{sv}", "discovery_tech", g_variant_new("i", 0));
526 g_variant_builder_add(builder, "{sv}", "preferred_connection", g_variant_new("y", 0));
527 g_variant_builder_add(builder, "{sv}", "auto_accept", g_variant_new("i", 0));
528 g_variant_builder_add(builder, "{sv}", "status", g_variant_new("y", 0));
529 g_variant_builder_add(builder, "{sv}", "role", g_variant_new("y", 0));
530 g_variant_builder_add(builder, "{sv}", "replace", g_variant_new("i", 0));
531 g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", 0));
532 g_variant_builder_add(builder, "{sv}", "instance_name", g_variant_new("s", "instance_name"));
533 g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", "service_type"));
534 g_variant_builder_add(builder, "{sv}", "rsp_info", g_variant_new("s", "rsp_info"));
535 res = g_variant_new("(a{sv})", builder);
536 g_variant_builder_unref(builder);
539 g_variant_unref(this->result);
545 GVariant *MethodInjector::AspAdvertiseCancel()
547 GVariant *res = NULL;
549 res = g_variant_new("(u)", 0);
552 g_variant_unref(this->result);
559 GVariant *MethodInjector::AspSeek()
561 GVariant *res = NULL;
562 GVariantBuilder *builder = NULL;
564 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
565 g_variant_builder_add(builder, "{sv}", "discovery_tech", g_variant_new("i", 0));
566 g_variant_builder_add(builder, "{sv}", "preferred_connection", g_variant_new("y", 0));
567 g_variant_builder_add(builder, "{sv}", "search_id", g_variant_new("t", 0));
568 g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new("s", "service_type"));
569 res = g_variant_new("(a{sv})", builder);
570 g_variant_builder_unref(builder);
573 g_variant_unref(this->result);
579 GVariant *MethodInjector::AspSeekCancel()
581 GVariant *res = NULL;
582 res = g_variant_new("(t)", 0);
585 g_variant_unref(this->result);
591 GVariant *MethodInjector::AspSessionConnect(const char *session_mac_str, unsigned char network_role, unsigned int network_config)
593 GVariant *res = NULL;
594 GVariantBuilder *builder = NULL;
596 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
598 g_variant_builder_add(builder, "{sv}", "service_mac", g_variant_new("s", this->peer_device_addr_str));
599 g_variant_builder_add(builder, "{sv}", "adv_id", g_variant_new("u", 0));
601 g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", session_mac_str));
602 g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", 0));
603 g_variant_builder_add(builder, "{sv}", "role", g_variant_new("y", network_role));
604 g_variant_builder_add(builder, "{sv}", "config_method", g_variant_new("u", network_config));
605 g_variant_builder_add(builder, "{sv}", "session _info", g_variant_new("s", "session_info"));
607 res = g_variant_new("(a{sv})", builder);
608 g_variant_builder_unref(builder);
611 g_variant_unref(this->result);
618 GVariant *MethodInjector::AspSessionConfirm(const char *session_mac_str, int confirm, char *pin)
620 GVariant *res = NULL;
621 GVariantBuilder *builder = NULL;
622 gchar pin_str[8 + 1] = {0, };
624 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
626 g_variant_builder_add(builder, "{sv}", "session_mac", g_variant_new("s", this->peer_device_addr_str));
627 g_variant_builder_add(builder, "{sv}", "session_id", g_variant_new("u", 0));
628 g_variant_builder_add(builder, "{sv}", "confirm", g_variant_new("i", confirm));
630 g_snprintf(pin_str, 8 + 1, "%s", (gchar *)pin);
631 g_variant_builder_add(builder, "{sv}", "pin", g_variant_new("s", pin_str));
633 g_variant_builder_add(builder, "{sv}", "service_mac", g_variant_new("s", this->local_mac_str));
634 g_variant_builder_add(builder, "{sv}", "adv_id", g_variant_new("u", 0));
636 res = g_variant_new("(a{sv})", builder);
637 g_variant_builder_unref(builder);
640 g_variant_unref(this->result);