Mercurial > audlegacy-plugins
annotate src/bluetooth/agent.c @ 2841:9637eab5a3dd
indentation
| author | Paula Stanciu <paula.stanciu@gmail.com> |
|---|---|
| date | Fri, 18 Jul 2008 12:01:38 +0300 |
| parents | 50507763fd31 |
| children | d0cbf303869b |
| rev | line source |
|---|---|
| 2839 | 1 /* |
| 2 * Audacious Bluetooth headset suport plugin | |
| 3 * | |
| 4 * Copyright (c) 2008 Paula Stanciu <paula.stanciu@gmail.com> | |
| 5 * Copyright (C) 2005-2008 Marcel Holtmann <marcel@holtmann.org> | |
| 6 * Copyright (C) 2006-2007 Bastien Nocera <hadess@hadess.net> | |
| 7 * | |
| 8 * | |
| 9 * This program is free software; you can redistribute it and/or modify | |
| 10 * it under the terms of the GNU General Public License as published by | |
| 11 * the Free Software Foundation; either version 2 of the License, or | |
| 12 * (at your option) any later version. | |
| 13 * | |
| 14 * This program is distributed in the hope that it will be useful, | |
| 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 17 * GNU General Public License for more details. | |
| 18 * | |
| 19 * You should have received a copy of the GNU General Public License | |
| 20 * along with this program; if not, write to the Free Software | |
| 21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
| 22 * | |
| 23 */ | |
| 24 | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
25 #include <glib/gprintf.h> |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
26 #include "bluetooth.h" |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
27 #include "gui.h" |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
28 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
29 #define PASSKEY_AGENT_PATH "/org/bluez/audacious_passkey" |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
30 #define AUTH_AGENT_PATH "/org/bluez/audacious_auth" |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
31 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
32 static GtkWidget *agent_window = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
33 static GtkWidget *window_box = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
34 static GtkWidget *top_box = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
35 static GtkWidget *middle_box = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
36 static GtkWidget *bottom_box = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
37 static GtkWidget *pair_label = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
38 static GtkWidget *device_label = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
39 static GtkWidget *passkey_entry = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
40 static GtkWidget *ok_button = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
41 static GtkWidget *cancel_button = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
42 static char* passkey; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
43 DBusGProxy *pair_obj = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
44 static DBusGConnection *connection; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
45 void ok_button_call() |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
46 { |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
47 passkey = gtk_entry_get_text(GTK_ENTRY(passkey_entry)); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
48 printf("Key entered : %s\n",passkey); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
49 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
50 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
51 void cancel_button_call() |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
52 { |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
53 gtk_widget_destroy (agent_window); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
54 agent_window = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
55 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
56 |
|
2840
50507763fd31
working basic pairing / bounding
Paula Stanciu <paula.stanciu@gmail.com>
parents:
2839
diff
changeset
|
57 void gui_agent() |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
58 { |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
59 if (!agent_window) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
60 { |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
61 agent_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
62 g_signal_connect (agent_window, "destroy",G_CALLBACK (gtk_widget_destroyed), &agent_window); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
63 window_box = gtk_vbox_new(FALSE,2); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
64 top_box = gtk_vbox_new(FALSE,2); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
65 middle_box = gtk_hbox_new(FALSE,2); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
66 bottom_box = gtk_hbox_new(FALSE,2); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
67 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
68 gtk_container_add(GTK_CONTAINER(agent_window),window_box); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
69 gtk_container_add(GTK_CONTAINER(window_box),top_box); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
70 gtk_container_set_border_width (GTK_CONTAINER(middle_box), 20); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
71 gtk_container_add(GTK_CONTAINER(window_box),middle_box); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
72 gtk_container_add(GTK_CONTAINER(window_box),bottom_box); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
73 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
74 pair_label = gtk_label_new_with_mnemonic("Enter passkey for pairing"); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
75 device_label = gtk_label_new_with_mnemonic(((DeviceData*)(selected_dev->data))->name); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
76 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
77 gtk_container_add(GTK_CONTAINER(top_box),pair_label); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
78 gtk_container_add(GTK_CONTAINER(top_box),device_label); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
79 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
80 passkey_entry = gtk_entry_new(); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
81 gtk_container_add(GTK_CONTAINER(middle_box),passkey_entry); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
82 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
83 ok_button = gtk_button_new_with_mnemonic("OK"); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
84 cancel_button = gtk_button_new_with_mnemonic("Cancel"); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
85 gtk_container_add(GTK_CONTAINER(bottom_box),ok_button); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
86 g_signal_connect(ok_button,"clicked",G_CALLBACK(ok_button_call),NULL); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
87 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
88 gtk_container_add(GTK_CONTAINER(bottom_box),cancel_button); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
89 g_signal_connect(cancel_button,"clicked",G_CALLBACK (cancel_button_call),NULL); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
90 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
91 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
92 gtk_window_set_title(GTK_WINDOW(agent_window),"Pairing passkey request"); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
93 if (!GTK_WIDGET_VISIBLE (agent_window)) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
94 gtk_widget_show_all (agent_window); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
95 else |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
96 { |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
97 gtk_widget_destroy (agent_window); |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
98 agent_window = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
99 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
100 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
101 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
102 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
103 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
104 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
105 static DBusGConnection *connection; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
106 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
107 static int volatile registered_passkey = 0; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
108 static int volatile registered_auth = 0; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
109 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
110 static gboolean auto_authorize = FALSE; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
111 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
112 typedef enum { |
| 2841 | 113 AGENT_ERROR_REJECT |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
114 } AgentError; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
115 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
116 #define AGENT_ERROR (agent_error_quark()) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
117 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
118 #define AGENT_ERROR_TYPE (agent_error_get_type()) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
119 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
120 static GQuark agent_error_quark(void) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
121 { |
| 2841 | 122 static GQuark quark = 0; |
| 123 if (!quark) | |
| 124 quark = g_quark_from_static_string("agent"); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
125 |
| 2841 | 126 return quark; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
127 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
128 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
129 #define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
130 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
131 static GType agent_error_get_type(void) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
132 { |
| 2841 | 133 static GType etype = 0; |
| 134 if (etype == 0) { | |
| 135 static const GEnumValue values[] = { | |
| 136 ENUM_ENTRY(AGENT_ERROR_REJECT, "Rejected"), | |
| 137 { 0, 0, 0 } | |
| 138 }; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
139 |
| 2841 | 140 etype = g_enum_register_static("agent", values); |
| 141 } | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
142 |
| 2841 | 143 return etype; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
144 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
145 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
146 static GList *input_list = NULL; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
147 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
148 struct input_data { |
| 2841 | 149 char *path; |
| 150 char *address; | |
| 151 char *service; | |
| 152 char *uuid; | |
| 153 DBusGMethodInvocation *context; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
154 }; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
155 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
156 static gint input_compare(gconstpointer a, gconstpointer b) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
157 { |
| 2841 | 158 struct input_data *a_data = (struct input_data *) a; |
| 159 struct input_data *b_data = (struct input_data *) b; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
160 |
| 2841 | 161 return g_ascii_strcasecmp(a_data->address, b_data->address); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
162 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
163 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
164 static void input_free(struct input_data *input) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
165 { |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
166 |
| 2841 | 167 input_list = g_list_remove(input_list, input); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
168 |
| 2841 | 169 g_free(input->uuid); |
| 170 g_free(input->service); | |
| 171 g_free(input->address); | |
| 172 g_free(input->path); | |
| 173 g_free(input); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
174 |
| 2841 | 175 // if (g_list_length(input_list) == 0) |
| 176 // disable_blinking(); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
177 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
178 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
179 static void passkey_callback(gint response, gpointer user_data) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
180 { |
| 2841 | 181 struct input_data *input = user_data; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
182 |
| 2841 | 183 if (response == GTK_RESPONSE_ACCEPT) { |
| 184 const char *passkey; | |
| 185 /*!!!!!!!!! hardcoded passkey !!!!!!!!!!!!! to modify*/ | |
| 186 passkey ="0000"; | |
| 187 dbus_g_method_return(input->context, passkey); | |
| 188 } else { | |
| 189 GError *error; | |
| 190 error = g_error_new(AGENT_ERROR, AGENT_ERROR_REJECT, | |
| 191 "Pairing request rejected"); | |
| 192 dbus_g_method_return_error(input->context, error); | |
| 193 } | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
194 |
| 2841 | 195 input_free(input); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
196 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
197 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
198 static void confirm_callback(gint response, gpointer user_data) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
199 { |
| 2841 | 200 struct input_data *input = user_data; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
201 |
| 2841 | 202 if (response != GTK_RESPONSE_YES) { |
| 203 GError *error; | |
| 204 error = g_error_new(AGENT_ERROR, AGENT_ERROR_REJECT, | |
| 205 "Confirmation request rejected"); | |
| 206 dbus_g_method_return_error(input->context, error); | |
| 207 } else | |
| 208 dbus_g_method_return(input->context); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
209 |
| 2841 | 210 input_free(input); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
211 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
212 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
213 static void set_trusted(struct input_data *input) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
214 { |
| 2841 | 215 DBusGProxy *object; |
| 216 gboolean active; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
217 |
| 2841 | 218 //aways set trusted -- we dont have yet an active button - |
| 219 //maybe I'll add one | |
| 220 object = dbus_g_proxy_new_for_name(connection, "org.bluez", | |
| 221 input->path, "org.bluez.Adapter"); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
222 |
| 2841 | 223 dbus_g_proxy_call(object, "SetTrusted", NULL, |
| 224 G_TYPE_STRING, input->address, G_TYPE_INVALID, | |
| 225 G_TYPE_INVALID); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
226 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
227 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
228 static void auth_callback(gint response, gpointer user_data) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
229 { |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
230 |
| 2841 | 231 /* I must call this function with the alway allow option and |
| 232 * don't boder to aks the user - to many questions | |
| 233 */ | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
234 struct input_data *input = user_data; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
235 |
| 2841 | 236 if (response == GTK_RESPONSE_YES) { |
| 237 set_trusted(input); | |
| 238 dbus_g_method_return(input->context); | |
| 239 } else { | |
| 240 GError *error; | |
| 241 error = g_error_new(AGENT_ERROR, AGENT_ERROR_REJECT, | |
| 242 "Authorization request rejected"); | |
| 243 dbus_g_method_return_error(input->context, error); | |
| 244 } | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
245 |
| 2841 | 246 input_free(input); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
247 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
248 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
249 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
250 static void passkey_dialog(const char *path, const char *address, |
| 2841 | 251 const gchar *device, DBusGMethodInvocation *context) |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
252 { |
| 2841 | 253 struct input_data *input; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
254 |
| 2841 | 255 input = g_try_malloc0(sizeof(*input)); |
| 256 if (!input) | |
| 257 return; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
258 |
| 2841 | 259 input->path = g_strdup(path); |
| 260 input->address = g_strdup(address); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
261 |
| 2841 | 262 input->context = context; |
| 263 | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
264 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
265 |
| 2841 | 266 /* |
| 267 g_signal_connect(G_OBJECT(entry), "changed", | |
| 268 G_CALLBACK(changed_callback), input); | |
| 269 | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
270 |
| 2841 | 271 g_signal_connect(G_OBJECT(button), "toggled", |
| 272 G_CALLBACK(toggled_callback), input); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
273 |
| 2841 | 274 gtk_container_add(GTK_CONTAINER(vbox), button); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
275 |
| 2841 | 276 input_list = g_list_append(input_list, input); |
| 277 | |
| 278 g_signal_connect(G_OBJECT(dialog), "response", | |
| 279 G_CALLBACK(passkey_callback), input); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
280 |
| 2841 | 281 enable_blinking(); |
| 282 */ | |
| 283 printf("passkey callback\n"); | |
| 284 passkey_callback(GTK_RESPONSE_ACCEPT,input); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
285 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
286 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
287 static void confirm_dialog(const char *path, const char *address, |
| 2841 | 288 const char *value, const gchar *device, |
| 289 DBusGMethodInvocation *context) | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
290 { |
| 2841 | 291 struct input_data *input; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
292 |
| 2841 | 293 input = g_try_malloc0(sizeof(*input)); |
| 294 if (!input) | |
| 295 return; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
296 |
| 2841 | 297 input->path = g_strdup(path); |
| 298 input->address = g_strdup(address); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
299 |
| 2841 | 300 input->context = context; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
301 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
302 |
| 2841 | 303 // g_signal_connect(G_OBJECT(dialog), "response", |
| 304 // G_CALLBACK(confirm_callback), input); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
305 |
| 2841 | 306 //enable_blinking(); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
307 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
308 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
309 static void auth_dialog(const char *path, const char *address, |
| 2841 | 310 const char *service, const char *uuid, const gchar *device, |
| 311 const gchar *profile, DBusGMethodInvocation *context) | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
312 { |
| 2841 | 313 GtkWidget *dialog; |
| 314 GtkWidget *button; | |
| 315 GtkWidget *image; | |
| 316 GtkWidget *label; | |
| 317 GtkWidget *table; | |
| 318 GtkWidget *vbox; | |
| 319 gchar *markup, *text; | |
| 320 struct input_data *input; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
321 |
| 2841 | 322 input = g_try_malloc0(sizeof(*input)); |
| 323 if (!input) | |
| 324 return; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
325 |
| 2841 | 326 input->path = g_strdup(path); |
| 327 input->address = g_strdup(address); | |
| 328 input->service = g_strdup(service); | |
| 329 input->uuid = g_strdup(uuid); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
330 |
| 2841 | 331 input->context = context; |
| 332 | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
333 |
| 2841 | 334 /* translators: Whether to grant access to a particular service |
| 335 * to the device mentioned */ | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
336 |
| 2841 | 337 // g_signal_connect(G_OBJECT(dialog), "response", |
| 338 // G_CALLBACK(auth_callback), input); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
339 |
| 2841 | 340 //enable_blinking(); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
341 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
342 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
343 typedef struct { |
| 2841 | 344 GObject parent; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
345 } PasskeyAgent; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
346 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
347 typedef struct { |
| 2841 | 348 GObjectClass parent; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
349 } PasskeyAgentClass; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
350 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
351 static GObjectClass *passkey_agent_parent; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
352 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
353 G_DEFINE_TYPE(PasskeyAgent, passkey_agent, G_TYPE_OBJECT) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
354 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
355 #define PASSKEY_AGENT_OBJECT_TYPE (passkey_agent_get_type()) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
356 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
357 #define PASSKEY_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ |
| 2841 | 358 PASSKEY_AGENT_OBJECT_TYPE, PasskeyAgent)) |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
359 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
360 static void passkey_agent_finalize(GObject *obj) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
361 { |
| 2841 | 362 passkey_agent_parent->finalize(obj); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
363 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
364 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
365 static void passkey_agent_init(PasskeyAgent *obj) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
366 { |
| 2841 | 367 g_printf("passkeyagent init\n"); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
368 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
369 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
370 static void passkey_agent_class_init(PasskeyAgentClass *klass) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
371 { |
| 2841 | 372 GObjectClass *gobject_class; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
373 |
| 2841 | 374 passkey_agent_parent = g_type_class_peek_parent(klass); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
375 |
| 2841 | 376 gobject_class = G_OBJECT_CLASS(klass); |
| 377 gobject_class->finalize = passkey_agent_finalize; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
378 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
379 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
380 static PasskeyAgent *passkey_agent_new(const char *path) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
381 { |
| 2841 | 382 PasskeyAgent *agent; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
383 |
| 2841 | 384 agent = g_object_new(PASSKEY_AGENT_OBJECT_TYPE, NULL); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
385 |
| 2841 | 386 dbus_g_connection_register_g_object(connection, path, G_OBJECT(agent)); |
|
2840
50507763fd31
working basic pairing / bounding
Paula Stanciu <paula.stanciu@gmail.com>
parents:
2839
diff
changeset
|
387 g_printf("new passkey agent \n"); |
| 2841 | 388 return agent; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
389 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
390 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
391 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
392 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
393 static gboolean passkey_agent_request(PasskeyAgent *agent, |
| 2841 | 394 const char *path, const char *address, |
| 395 DBusGMethodInvocation *context) | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
396 { |
|
2840
50507763fd31
working basic pairing / bounding
Paula Stanciu <paula.stanciu@gmail.com>
parents:
2839
diff
changeset
|
397 printf("passkey_agent request\n"); |
|
50507763fd31
working basic pairing / bounding
Paula Stanciu <paula.stanciu@gmail.com>
parents:
2839
diff
changeset
|
398 DBusGProxy *object; |
| 2841 | 399 const char *adapter = NULL, *name = NULL; |
| 400 gchar *device, *line; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
401 |
| 2841 | 402 object = dbus_g_proxy_new_for_name(connection, "org.bluez", |
| 403 path, "org.bluez.Adapter"); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
404 |
| 2841 | 405 dbus_g_proxy_call(object, "GetName", NULL, G_TYPE_INVALID, |
| 406 G_TYPE_STRING, &adapter, G_TYPE_INVALID); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
407 |
| 2841 | 408 dbus_g_proxy_call(object, "GetRemoteName", NULL, |
| 409 G_TYPE_STRING, address, G_TYPE_INVALID, | |
| 410 G_TYPE_STRING, &name, G_TYPE_INVALID); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
411 |
| 2841 | 412 if (name) { |
| 413 if (g_strrstr(name, address)) | |
| 414 device = g_strdup(name); | |
| 415 else | |
| 416 device = g_strdup_printf("%s (%s)", name, address); | |
| 417 } else | |
| 418 device = g_strdup(address); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
419 |
| 2841 | 420 passkey_dialog(path, address, device, context); |
|
2840
50507763fd31
working basic pairing / bounding
Paula Stanciu <paula.stanciu@gmail.com>
parents:
2839
diff
changeset
|
421 printf ("pairing request for device :%s",address); |
| 2841 | 422 /* translators: this is a popup telling you a particular device |
| 423 * has asked for pairing */ | |
| 424 line = g_strdup_printf(_("Pairing request for '%s'"), device); | |
| 425 g_free(device); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
426 |
| 2841 | 427 /*show_notification(adapter ? adapter : _("Bluetooth device"), |
| 428 line, _("Enter passkey"), 0, | |
| 429 G_CALLBACK(notification_closed)); | |
| 430 */ | |
| 431 g_free(line); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
432 |
| 2841 | 433 return TRUE; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
434 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
435 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
436 static gboolean passkey_agent_confirm(PasskeyAgent *agent, |
| 2841 | 437 const char *path, const char *address, |
| 438 const char *value, DBusGMethodInvocation *context) | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
439 { |
| 2841 | 440 DBusGProxy *object; |
| 441 const char *adapter = NULL, *name = NULL; | |
| 442 gchar *device, *line; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
443 |
| 2841 | 444 object = dbus_g_proxy_new_for_name(connection, "org.bluez", |
| 445 path, "org.bluez.Adapter"); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
446 |
| 2841 | 447 dbus_g_proxy_call(object, "GetName", NULL, G_TYPE_INVALID, |
| 448 G_TYPE_STRING, &adapter, G_TYPE_INVALID); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
449 |
| 2841 | 450 dbus_g_proxy_call(object, "GetRemoteName", NULL, |
| 451 G_TYPE_STRING, address, G_TYPE_INVALID, | |
| 452 G_TYPE_STRING, &name, G_TYPE_INVALID); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
453 |
| 2841 | 454 if (name) { |
| 455 if (g_strrstr(name, address)) | |
| 456 device = g_strdup(name); | |
| 457 else | |
| 458 device = g_strdup_printf("%s (%s)", name, address); | |
| 459 } else | |
| 460 device = g_strdup(address); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
461 |
| 2841 | 462 confirm_dialog(path, address, value, device, context); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
463 |
| 2841 | 464 line = g_strdup_printf(_("Pairing request for '%s'"), device); |
| 465 g_free(device); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
466 |
| 2841 | 467 /*show_notification(adapter ? adapter : _("Bluetooth device"), |
| 468 line, _("Confirm pairing"), 0, | |
| 469 G_CALLBACK(notification_closed)); | |
| 470 */ | |
| 471 g_free (line); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
472 |
| 2841 | 473 return TRUE; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
474 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
475 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
476 static gboolean passkey_agent_cancel(PasskeyAgent *agent, |
| 2841 | 477 const char *path, const char *address, GError **error) |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
478 { |
| 2841 | 479 GList *list; |
| 480 GError *result; | |
| 481 struct input_data *input; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
482 |
| 2841 | 483 input = g_try_malloc0(sizeof(*input)); |
| 484 if (!input) | |
| 485 return FALSE; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
486 |
| 2841 | 487 input->path = g_strdup(path); |
| 488 input->address = g_strdup(address); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
489 |
| 2841 | 490 list = g_list_find_custom(input_list, input, input_compare); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
491 |
| 2841 | 492 g_free(input->address); |
| 493 g_free(input->path); | |
| 494 g_free(input); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
495 |
| 2841 | 496 if (!list || !list->data) |
| 497 return FALSE; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
498 |
| 2841 | 499 input = list->data; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
500 |
| 2841 | 501 //close_notification(); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
502 |
| 2841 | 503 result = g_error_new(AGENT_ERROR, AGENT_ERROR_REJECT, |
| 504 "Agent callback canceled"); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
505 |
| 2841 | 506 dbus_g_method_return_error(input->context, result); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
507 |
| 2841 | 508 input_free(input); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
509 |
| 2841 | 510 return TRUE; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
511 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
512 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
513 static gboolean passkey_agent_release(PasskeyAgent *agent, GError **error) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
514 { |
| 2841 | 515 registered_passkey = 0; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
516 |
| 2841 | 517 return TRUE; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
518 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
519 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
520 #include "passkey-agent-glue.h" |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
521 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
522 typedef struct { |
| 2841 | 523 GObject parent; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
524 } AuthAgent; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
525 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
526 typedef struct { |
| 2841 | 527 GObjectClass parent; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
528 } AuthAgentClass; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
529 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
530 static GObjectClass *auth_agent_parent; |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
531 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
532 G_DEFINE_TYPE(AuthAgent, auth_agent, G_TYPE_OBJECT) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
533 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
534 #define AUTH_AGENT_OBJECT_TYPE (auth_agent_get_type()) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
535 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
536 #define AUTH_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ |
| 2841 | 537 AUTH_AGENT_OBJECT_TYPE, AuthAgent)) |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
538 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
539 static void auth_agent_finalize(GObject *obj) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
540 { |
| 2841 | 541 auth_agent_parent->finalize(obj); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
542 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
543 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
544 static void auth_agent_init(AuthAgent *obj) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
545 { |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
546 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
547 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
548 static void auth_agent_class_init(AuthAgentClass *klass) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
549 { |
| 2841 | 550 GObjectClass *gobject_class; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
551 |
| 2841 | 552 auth_agent_parent = g_type_class_peek_parent(klass); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
553 |
| 2841 | 554 gobject_class = G_OBJECT_CLASS(klass); |
| 555 gobject_class->finalize = auth_agent_finalize; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
556 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
557 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
558 static AuthAgent *auth_agent_new(const char *path) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
559 { |
| 2841 | 560 AuthAgent *agent; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
561 |
| 2841 | 562 agent = g_object_new(AUTH_AGENT_OBJECT_TYPE, NULL); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
563 |
| 2841 | 564 dbus_g_connection_register_g_object(connection, path, G_OBJECT(agent)); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
565 |
| 2841 | 566 return agent; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
567 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
568 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
569 static gboolean auth_agent_authorize(PasskeyAgent *agent, |
| 2841 | 570 const char *path, const char *address, const char *service, |
| 571 const char *uuid, DBusGMethodInvocation *context) | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
572 { |
| 2841 | 573 DBusGProxy *object; |
| 574 const char *adapter = NULL, *name = NULL; | |
| 575 gchar *device, *profile, *line; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
576 |
| 2841 | 577 if (auto_authorize == TRUE) { |
| 578 dbus_g_method_return(context); | |
| 579 return TRUE; | |
| 580 } | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
581 |
| 2841 | 582 object = dbus_g_proxy_new_for_name(connection, "org.bluez", |
| 583 path, "org.bluez.Adapter"); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
584 |
| 2841 | 585 dbus_g_proxy_call(object, "GetName", NULL, G_TYPE_INVALID, |
| 586 G_TYPE_STRING, &adapter, G_TYPE_INVALID); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
587 |
| 2841 | 588 dbus_g_proxy_call(object, "GetRemoteName", NULL, |
| 589 G_TYPE_STRING, address, G_TYPE_INVALID, | |
| 590 G_TYPE_STRING, &name, G_TYPE_INVALID); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
591 |
| 2841 | 592 object = dbus_g_proxy_new_for_name(connection, "org.bluez", |
| 593 service, "org.bluez.Service"); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
594 |
| 2841 | 595 dbus_g_proxy_call(object, "GetName", NULL, G_TYPE_INVALID, |
| 596 G_TYPE_STRING, &profile, G_TYPE_INVALID); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
597 |
| 2841 | 598 if (name) { |
| 599 if (g_strrstr(name, address)) | |
| 600 device = g_strdup(name); | |
| 601 else | |
| 602 device = g_strdup_printf("%s (%s)", name, address); | |
| 603 } else | |
| 604 device = g_strdup(address); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
605 |
| 2841 | 606 auth_dialog(path, address, service, uuid, device, profile, context); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
607 |
| 2841 | 608 line = g_strdup_printf(_("Authorization request for %s"), device); |
| 609 g_free(device); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
610 |
| 2841 | 611 /*show_notification(adapter ? adapter : _("Bluetooth device"), |
| 612 line, _("Check authorization"), 0, | |
| 613 G_CALLBACK(notification_closed)); | |
| 614 */ | |
| 615 g_free(line); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
616 |
| 2841 | 617 return TRUE; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
618 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
619 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
620 static gboolean auth_agent_cancel(PasskeyAgent *agent, |
| 2841 | 621 const char *path, const char *address, const char *service, |
| 622 const char *uuid, DBusGMethodInvocation *context) | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
623 { |
| 2841 | 624 GList *list; |
| 625 GError *result; | |
| 626 struct input_data *input; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
627 |
| 2841 | 628 input = g_try_malloc0(sizeof(*input)); |
| 629 if (!input) | |
| 630 return FALSE; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
631 |
| 2841 | 632 input->path = g_strdup(path); |
| 633 input->address = g_strdup(address); | |
| 634 input->service = g_strdup(service); | |
| 635 input->uuid = g_strdup(uuid); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
636 |
| 2841 | 637 list = g_list_find_custom(input_list, input, input_compare); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
638 |
| 2841 | 639 g_free(input->uuid); |
| 640 g_free(input->service); | |
| 641 g_free(input->address); | |
| 642 g_free(input->path); | |
| 643 g_free(input); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
644 |
| 2841 | 645 if (!list || !list->data) |
| 646 return FALSE; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
647 |
| 2841 | 648 input = list->data; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
649 |
| 2841 | 650 //close_notification(); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
651 |
| 2841 | 652 result = g_error_new(AGENT_ERROR, AGENT_ERROR_REJECT, |
| 653 "Agent callback canceled"); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
654 |
| 2841 | 655 dbus_g_method_return_error(input->context, result); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
656 |
| 2841 | 657 input_free(input); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
658 |
| 2841 | 659 return TRUE; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
660 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
661 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
662 static gboolean auth_agent_release(PasskeyAgent *agent, GError **error) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
663 { |
| 2841 | 664 registered_auth = 0; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
665 |
| 2841 | 666 return TRUE; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
667 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
668 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
669 #include "auth-agent-glue.h" |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
670 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
671 int register_agents(void) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
672 { |
| 2841 | 673 DBusGProxy *object; |
| 674 GError *error = NULL; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
675 |
| 2841 | 676 if (registered_passkey && registered_auth) |
| 677 return 0; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
678 |
| 2841 | 679 object = dbus_g_proxy_new_for_name(connection, "org.bluez", |
| 680 "/org/bluez", "org.bluez.Security"); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
681 |
| 2841 | 682 if (!registered_passkey) { |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
683 |
| 2841 | 684 dbus_g_proxy_call(object, "RegisterDefaultPasskeyAgent", |
| 685 &error, G_TYPE_STRING, PASSKEY_AGENT_PATH, | |
| 686 G_TYPE_INVALID, G_TYPE_INVALID); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
687 |
| 2841 | 688 if (error != NULL) { |
| 689 g_error_free(error); | |
| 690 return -1; | |
| 691 } | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
692 |
| 2841 | 693 registered_passkey = 1; |
| 694 } | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
695 |
| 2841 | 696 if (!registered_auth) { |
| 697 dbus_g_proxy_call(object, "RegisterDefaultAuthorizationAgent", | |
| 698 &error, G_TYPE_STRING, AUTH_AGENT_PATH, | |
| 699 G_TYPE_INVALID, G_TYPE_INVALID); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
700 |
| 2841 | 701 if (error != NULL) { |
| 702 g_error_free(error); | |
| 703 return -1; | |
| 704 } | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
705 |
| 2841 | 706 registered_auth = 1; |
| 707 } | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
708 |
| 2841 | 709 return 0; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
710 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
711 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
712 void unregister_agents(void) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
713 { |
| 2841 | 714 registered_passkey = 0; |
| 715 registered_auth = 0; | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
716 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
717 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
718 int setup_agents(DBusGConnection *conn) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
719 { |
| 2841 | 720 void *agent; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
721 |
| 2841 | 722 connection = dbus_g_connection_ref(conn); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
723 |
| 2841 | 724 dbus_g_object_type_install_info(PASSKEY_AGENT_OBJECT_TYPE, |
| 725 &dbus_glib_passkey_agent_object_info); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
726 |
| 2841 | 727 dbus_g_object_type_install_info(AUTH_AGENT_OBJECT_TYPE, |
| 728 &dbus_glib_auth_agent_object_info); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
729 |
| 2841 | 730 dbus_g_error_domain_register(AGENT_ERROR, "org.bluez.Error", |
| 731 AGENT_ERROR_TYPE); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
732 |
| 2841 | 733 agent = passkey_agent_new(PASSKEY_AGENT_PATH); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
734 |
| 2841 | 735 agent = auth_agent_new(AUTH_AGENT_PATH); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
736 |
| 2841 | 737 return 0; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
738 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
739 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
740 void cleanup_agents(void) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
741 { |
| 2841 | 742 unregister_agents(); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
743 |
| 2841 | 744 dbus_g_connection_unref(connection); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
745 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
746 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
747 void show_agents(void) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
748 { |
| 2841 | 749 printf("show_agents\n"); |
| 750 //close_notification(); | |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
751 |
| 2841 | 752 // g_list_foreach(input_list, show_dialog, NULL); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
753 |
| 2841 | 754 // disable_blinking(); |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
755 } |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
756 |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
757 void set_auto_authorize(gboolean value) |
|
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
758 { |
| 2841 | 759 auto_authorize = value; |
|
2838
22a2ffe86750
added passkey agent and basic pairing functionality
Paula Stanciu <paula.stanciu@gmail.com>
parents:
diff
changeset
|
760 } |
|
2840
50507763fd31
working basic pairing / bounding
Paula Stanciu <paula.stanciu@gmail.com>
parents:
2839
diff
changeset
|
761 void run_agents() |
|
50507763fd31
working basic pairing / bounding
Paula Stanciu <paula.stanciu@gmail.com>
parents:
2839
diff
changeset
|
762 { |
|
50507763fd31
working basic pairing / bounding
Paula Stanciu <paula.stanciu@gmail.com>
parents:
2839
diff
changeset
|
763 setup_agents(bus); |
|
50507763fd31
working basic pairing / bounding
Paula Stanciu <paula.stanciu@gmail.com>
parents:
2839
diff
changeset
|
764 |
|
50507763fd31
working basic pairing / bounding
Paula Stanciu <paula.stanciu@gmail.com>
parents:
2839
diff
changeset
|
765 register_agents(); |
| 2841 | 766 |
| 767 | |
|
2840
50507763fd31
working basic pairing / bounding
Paula Stanciu <paula.stanciu@gmail.com>
parents:
2839
diff
changeset
|
768 } |
|
50507763fd31
working basic pairing / bounding
Paula Stanciu <paula.stanciu@gmail.com>
parents:
2839
diff
changeset
|
769 |
