2 * freesmartphone-network.c
4 * Copyright(C) 2008 Ixonos Plc
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2, or (at your option)
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Boston, MA 02111.
27 #include "freesmartphone-internal.h"
28 #include "freesmartphone-network.h"
29 #include "freesmartphone-network-binding.h"
30 #include "fso-marshallers.h"
32 #define FSO_NETWORK_STATUS_SIGNAL_NAME "Status"
33 #define FSO_SUBSCRIBER_NUMBERS_SIGNAL_NAME "SubscriberNumbers"
37 * @brief Initializes network interface, it is called automatically
40 * @param fs pointer to freesmartphone struct
42 void fso_gsm_network_init(FreeSmartphone
*fs
)
44 g_debug("%s", __func__
);
47 dbus_g_object_register_marshaller (fso_marshaller_VOID__STRING_STRING_INT
,
56 * @brief Reply function to fso_gsm_network_register function call
58 * @param proxy dbus proxy used to call fso_gsm_network_register function
59 * @param error pointer to error struct
60 * @param userdata userdata passed when fso_gsm_network_register function was
64 void fso_gsm_network_register_reply(DBusGProxy
*proxy
,
68 g_debug("%s", __func__
);
69 ReplyData
*reply
= (ReplyData
*)userdata
;
70 FSGSMNetworkReplyFunc reply_cb
= (FSGSMNetworkReplyFunc
)reply
->cb
;
71 gpointer data
= reply
->data
;
72 fso_reply_data_free(reply
);
78 * @brief Registers to network
80 * @param fs pointer to freesmartphone struct
81 * @param cb callback function to call when registration command has finished
82 * @param userdata user data
83 * @return true if function was succesfully executed
85 gboolean
fso_gsm_network_register(FreeSmartphone
*fs
,
86 FSGSMNetworkReplyFunc cb
,
89 g_return_val_if_fail(fs
, FALSE
);
90 g_debug("%s", __func__
);
91 ReplyData
*replydata
= fso_prepare_method(fs
,
98 DBusGProxy
*proxy
= fso_get_proxy(fs
,FSO_NETWORK
);
100 org_freesmartphone_GSM_Network_register_async(proxy
,
101 &fso_gsm_network_register_reply
,
102 (gpointer
)replydata
);
107 * @brief Reply function to get status
109 * @param proxy dbus proxy used to call fso_gsm_network_get_status function
110 * @param error pointer to error struct
111 * @param userdata userdata passed when fso_gsm_network_get_status function was
115 void fso_gsm_network_get_status_reply(DBusGProxy
*proxy
,
120 g_debug("%s", __func__
);
121 ReplyData
*reply
= (ReplyData
*)userdata
;
122 FSGSMNetworkGetStatusReplyFunc reply_cb
= (FSGSMNetworkGetStatusReplyFunc
)reply
->cb
;
123 gpointer data
= reply
->data
;
124 fso_reply_data_free(reply
);
125 reply_cb(status
,error
,data
);
130 * @brief Gets network status
132 * @param fs pointer to freesmartphone struct
133 * @param cb callback function to call when get status command has finished
134 * @param userdata user data
135 * @return true if function was succesfully executed
137 gboolean
fso_gsm_network_get_status(FreeSmartphone
*fs
,
138 FSGSMNetworkGetStatusReplyFunc cb
,
141 g_return_val_if_fail(fs
, FALSE
);
142 g_debug("%s", __func__
);
143 ReplyData
*replydata
= fso_prepare_method(fs
,
150 DBusGProxy
*proxy
= fso_get_proxy(fs
,FSO_NETWORK
);
152 org_freesmartphone_GSM_Network_get_status_async(proxy
,
153 &fso_gsm_network_get_status_reply
,
154 (gpointer
)replydata
);
161 * @brief Reply function to get status
163 * @param proxy dbus proxy used to call fso_gsm_network_list_providers function
164 * @param error pointer to error struct
165 * @param userdata userdata passed when fso_gsm_network_list_providers function
169 void fso_gsm_network_list_providers_reply(DBusGProxy
*proxy
,
170 GPtrArray
*providers
,
174 g_debug("%s", __func__
);
175 ReplyData
*reply
= (ReplyData
*)userdata
;
176 FSGSMNetworkListProvidersReplyFunc reply_cb
= (FSGSMNetworkListProvidersReplyFunc
)reply
->cb
;
177 gpointer data
= reply
->data
;
178 fso_reply_data_free(reply
);
179 reply_cb(providers
,error
,data
);
184 * @brief Lists available network providers
186 * @param fs pointer to freesmartphone struct
187 * @param cb callback function to call when list providers command has finished
188 * @param userdata user data
189 * @return true if function was succesfully executed
191 gboolean
fso_gsm_network_list_providers(FreeSmartphone
*fs
,
192 FSGSMNetworkListProvidersReplyFunc cb
,
195 g_return_val_if_fail(fs
, FALSE
);
196 g_debug("%s", __func__
);
197 ReplyData
*replydata
= fso_prepare_method(fs
,
204 DBusGProxy
*proxy
= fso_get_proxy(fs
,FSO_NETWORK
);
206 org_freesmartphone_GSM_Network_list_providers_async(proxy
,
207 &fso_gsm_network_list_providers_reply
,
208 (gpointer
)replydata
);
213 * @brief Reply function to get status
215 * @param proxy dbus proxy used to call fso_gsm_network_register_with_provider
217 * @param error pointer to error struct
218 * @param userdata userdata passed when fso_gsm_network_register_with_provider
219 * function was called
222 void fso_gsm_network_register_with_provider_reply(DBusGProxy
*proxy
,
226 g_debug("%s", __func__
);
227 ReplyData
*reply
= (ReplyData
*)userdata
;
228 FSGSMNetworkReplyFunc reply_cb
= (FSGSMNetworkReplyFunc
)reply
->cb
;
229 gpointer data
= reply
->data
;
230 fso_reply_data_free(reply
);
231 reply_cb(error
,data
);
236 * @brief Lists available network providers
238 * @param fs pointer to freesmartphone struct
239 * @param cb callback function to call when list providers command has finished
240 * @param userdata user data
241 * @return true if function was succesfully executed
243 gboolean
fso_gsm_network_register_with_provider(FreeSmartphone
*fs
,
245 FSGSMNetworkReplyFunc cb
,
248 g_return_val_if_fail(fs
, FALSE
);
249 g_debug("%s", __func__
);
250 ReplyData
*replydata
= fso_prepare_method(fs
,
257 DBusGProxy
*proxy
= fso_get_proxy(fs
,FSO_NETWORK
);
259 org_freesmartphone_GSM_Network_register_with_provider_async(proxy
,
261 &fso_gsm_network_register_with_provider_reply
,
262 (gpointer
)replydata
);
267 //* @brief Reply to get subscriber numbers function
269 //* @param proxy dbus proxy used to call fso_gsm_network_get_subscriber_numbers
271 //* @param numbers subscriber numbers
272 //* @param error pointer to error struct
273 //* @param userdata userdata passed when fso_gsm_network_get_subscriber_numbers
274 //* function was called
277 //void fso_gsm_network_get_subscriber_numbers_reply(DBusGProxy *proxy,
280 // gpointer userdata)
282 // g_debug("%s", __func__);
283 // ReplyData *reply = (ReplyData*)userdata;
284 // FSGSMNetworkGetSubscriberNumbersReplyFunc reply_cb = (FSGSMNetworkGetSubscriberNumbersReplyFunc)reply->cb;
285 // gpointer data = reply->data;
286 // fso_reply_data_free(reply);
287 // reply_cb(numbers,error,data);
292 //* @brief Get subscriber numbers
294 //* @param fs pointer to freesmartphone struct
295 //* @param cb callback function to call when the command has finished
296 //* @param userdata user data
297 //* @return true if function was succesfully executed
299 //gboolean fso_gsm_network_get_subscriber_numbers(FreeSmartphone *fs,
300 // FSGSMNetworkGetSubscriberNumbersReplyFunc cb,
301 // gpointer userdata)
303 // g_return_val_if_fail(fs, FALSE);
304 // g_debug("%s", __func__);
305 // ReplyData *replydata = fso_prepare_method(fs,
312 // DBusGProxy *proxy = fso_get_proxy(fs,FSO_NETWORK);
314 // org_freesmartphone_GSM_Network_get_subscriber_numbers_async(proxy,
315 // &fso_gsm_network_get_subscriber_numbers_reply,
316 // (gpointer)replydata);
321 * @brief Reply function to get country code
323 * @param proxy dbus proxy used to call fso_gsm_network_get_country_code function
324 * @param error pointer to error struct
325 * @param userdata userdata passed when fso_gsm_network_get_country_code function
329 void fso_gsm_network_get_country_code_reply(DBusGProxy
*proxy
,
334 g_debug("%s", __func__
);
335 ReplyData
*reply
= (ReplyData
*)userdata
;
336 FSGSMNetworkGetCountryCodeReplyFunc reply_cb
= (FSGSMNetworkGetCountryCodeReplyFunc
)reply
->cb
;
337 gpointer data
= reply
->data
;
338 fso_reply_data_free(reply
);
339 reply_cb(dial_code
,error
,data
);
344 * @brief Gets country code
346 * @param fs pointer to freesmartphone struct
347 * @param cb callback function to call when the command has finished
348 * @param userdata user data
349 * @return true if function was succesfully executed
351 gboolean
fso_gsm_network_get_country_code(FreeSmartphone
*fs
,
352 FSGSMNetworkGetCountryCodeReplyFunc cb
,
355 g_return_val_if_fail(fs
, FALSE
);
356 g_debug("%s", __func__
);
357 ReplyData
*replydata
= fso_prepare_method(fs
,
364 DBusGProxy
*proxy
= fso_get_proxy(fs
,FSO_NETWORK
);
366 org_freesmartphone_GSM_Network_get_country_code_async(proxy
,
367 &fso_gsm_network_get_country_code_reply
,
368 (gpointer
)replydata
);
375 * @brief Handler to network status signal
376 * Calls all registered callbacks.
378 * @param proxy proxy to the connection that signal was sent through
379 * @param provider_name provider's name
380 * @param status network status
381 * @param strength signal strength
382 * @param data user data
385 void fso_gsm_network_status_handler(DBusGProxy
*proxy
,
389 g_debug("%s", __func__
);
390 FreeSmartphone
*fs
= (FreeSmartphone
*)data
;
391 g_return_if_fail(fs
);
392 GList
*list
= fso_get_signal_handler(fs
,FSO_SIGNAL_NETWORK_STATUS
);
395 ReplyData
*rd
= (ReplyData
*)list
->data
;
396 FSGSMNetworkStatusSignalFunc status_cb
= (FSGSMNetworkStatusSignalFunc
)rd
->cb
;
397 status_cb (status
, rd
->data
);
398 list
= g_list_next(list
);
404 * @brief Adds a callback to network status signal
406 * @param fs pointer to freesmartphone struct
407 * @param cb callback function to call when signal is received
408 * @param userdata user data passed along with callback
409 * @return true if callback was succesfully added
411 gboolean
fso_gsm_network_status_signal(FreeSmartphone
*fs
,
412 FSGSMNetworkStatusSignalFunc cb
,
415 g_return_val_if_fail(fs
, FALSE
);
416 g_debug("%s", __func__
);
418 ReplyData
*replydata
= fso_prepare_method(fs
,
425 DBusGProxy
*proxy
= fso_get_proxy(fs
,FSO_NETWORK
);
427 if ( fso_append_data_to_signal_handler(fs
,
428 FSO_SIGNAL_NETWORK_STATUS
,
430 dbus_g_proxy_add_signal(proxy
,
431 FSO_NETWORK_STATUS_SIGNAL_NAME
,
432 dbus_g_type_get_map ("GHashTable", \
433 G_TYPE_STRING
, G_TYPE_VALUE
),
435 dbus_g_proxy_connect_signal (proxy
, FSO_NETWORK_STATUS_SIGNAL_NAME
,
436 G_CALLBACK(fso_gsm_network_status_handler
),
444 * @brief Removes callback from network status signal
446 * @param fs pointer to freesmartphone struct
447 * @param cb callback function to remove
448 * @param userdata userdata assosicated with callback
449 * @return true if callback was removed
451 gboolean
fso_gsm_network_status_signal_remove(FreeSmartphone
*fs
,
452 FSGSMNetworkStatusSignalFunc cb
,
455 g_return_val_if_fail(fs
, FALSE
);
456 g_debug("%s", __func__
);
459 return fso_signal_remove(fs
,
461 FSO_NETWORK_STATUS_SIGNAL_NAME
,
462 FSO_SIGNAL_NETWORK_STATUS
,
463 G_CALLBACK(fso_gsm_network_status_handler
),
470 * @brief Handler to network status signal
471 * Calls all registered callbacks.
473 * @param proxy proxy to the connection that signal was sent through
474 * @param provider_name provider's name
475 * @param status network status
476 * @param strength signal strength
477 * @param data user data
480 void fso_gsm_network_subscriber_numbers_signal_handler(DBusGProxy
*proxy
,
484 g_debug("%s", __func__
);
485 FreeSmartphone
*fs
= (FreeSmartphone
*)data
;
486 g_return_if_fail(fs
);
487 GList
*list
= fso_get_signal_handler(fs
,FSO_SIGNAL_SUBSCRIBER_NUMBERS
);
490 ReplyData
*rd
= (ReplyData
*)list
->data
;
491 FSGSMNetworkSubscriberNumbersSignalFunc status_cb
= (FSGSMNetworkSubscriberNumbersSignalFunc
)rd
->cb
;
492 status_cb (numbers
,rd
->data
);
493 list
= g_list_next(list
);
499 * @brief Adds a callback to subscriber numbers signal
501 * @param fs pointer to freesmartphone struct
502 * @param cb callback function to call when signal is received
503 * @param userdata user data passed along with callback
504 * @return true if callback was succesfully added
506 gboolean
fso_gsm_network_subscriber_numbers_signal(FreeSmartphone
*fs
,
507 FSGSMNetworkSubscriberNumbersSignalFunc cb
,
510 g_return_val_if_fail(fs
, FALSE
);
511 g_debug("%s", __func__
);
513 ReplyData
*replydata
= fso_prepare_method(fs
,
520 DBusGProxy
*proxy
= fso_get_proxy(fs
,FSO_NETWORK
);
522 if ( fso_append_data_to_signal_handler(fs
,
523 FSO_SIGNAL_SUBSCRIBER_NUMBERS
,
525 dbus_g_proxy_add_signal(proxy
,
526 FSO_SUBSCRIBER_NUMBERS_SIGNAL_NAME
,
531 dbus_g_proxy_connect_signal (proxy
, FSO_SUBSCRIBER_NUMBERS_SIGNAL_NAME
,
532 G_CALLBACK(fso_gsm_network_subscriber_numbers_signal_handler
),
540 * @brief Removes callback from subscriber numbers signal
542 * @param fs pointer to freesmartphone struct
543 * @param cb callback function to remove
544 * @param userdata userdata assosicated with callback
545 * @return true if callback was removed
547 gboolean
fso_gsm_network_subscriber_numbers_signal_remove(FreeSmartphone
*fs
,
548 FSGSMNetworkSubscriberNumbersSignalFunc cb
,
551 g_return_val_if_fail(fs
, FALSE
);
552 g_debug("%s", __func__
);
555 return fso_signal_remove(fs
,
557 FSO_SUBSCRIBER_NUMBERS_SIGNAL_NAME
,
558 FSO_SIGNAL_SUBSCRIBER_NUMBERS
,
559 G_CALLBACK(fso_gsm_network_subscriber_numbers_signal_handler
),