forked from sailfishos/ofono
Compare commits
8 Commits
mer/1.23+g
...
mer/1.23+g
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f291cea905 | ||
|
|
68f7d30b77 | ||
|
|
890a2697fe | ||
|
|
9568c8449b | ||
|
|
cf91be9742 | ||
|
|
087771dc0f | ||
|
|
645dfe47e5 | ||
|
|
68e8b02d3b |
@@ -153,6 +153,7 @@ builtin_sources += drivers/ril/ril_call_barring.c \
|
|||||||
drivers/ril/ril_devmon_auto.c \
|
drivers/ril/ril_devmon_auto.c \
|
||||||
drivers/ril/ril_devmon_ds.c \
|
drivers/ril/ril_devmon_ds.c \
|
||||||
drivers/ril/ril_devmon_ss.c \
|
drivers/ril/ril_devmon_ss.c \
|
||||||
|
drivers/ril/ril_devmon_ur.c \
|
||||||
drivers/ril/ril_ecclist.c \
|
drivers/ril/ril_ecclist.c \
|
||||||
drivers/ril/ril_gprs.c \
|
drivers/ril/ril_gprs.c \
|
||||||
drivers/ril/ril_gprs_context.c \
|
drivers/ril/ril_gprs_context.c \
|
||||||
|
|||||||
@@ -375,6 +375,13 @@ enum ril_restricted_state {
|
|||||||
#define RIL_FACILITY_UNLOCK "0"
|
#define RIL_FACILITY_UNLOCK "0"
|
||||||
#define RIL_FACILITY_LOCK "1"
|
#define RIL_FACILITY_LOCK "1"
|
||||||
|
|
||||||
|
/* See RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER (RIL_VERSION >= 15) */
|
||||||
|
enum ril_unsolicited_response_filter {
|
||||||
|
RIL_UR_SIGNAL_STRENGTH = 0x01,
|
||||||
|
RIL_UR_FULL_NETWORK_STATE = 0x02,
|
||||||
|
RIL_UR_DATA_CALL_DORMANCY_CHANGED = 0x04
|
||||||
|
};
|
||||||
|
|
||||||
#endif /*__RIL_CONSTANTS_H */
|
#endif /*__RIL_CONSTANTS_H */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -50,6 +50,12 @@ struct ril_devmon *ril_devmon_ss_new(void);
|
|||||||
*/
|
*/
|
||||||
struct ril_devmon *ril_devmon_ds_new(void);
|
struct ril_devmon *ril_devmon_ds_new(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This Device Monitor implementation controls network state updates
|
||||||
|
* by sending SET_UNSOLICITED_RESPONSE_FILTER.
|
||||||
|
*/
|
||||||
|
struct ril_devmon *ril_devmon_ur_new(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This one selects the type based on the RIL version.
|
* This one selects the type based on the RIL version.
|
||||||
*/
|
*/
|
||||||
|
|||||||
254
ofono/drivers/ril/ril_devmon_ur.c
Normal file
254
ofono/drivers/ril/ril_devmon_ur.c
Normal file
@@ -0,0 +1,254 @@
|
|||||||
|
/*
|
||||||
|
* oFono - Open Source Telephony - RIL-based devices
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 Jolla Ltd.
|
||||||
|
* Copyright (C) 2020 Open Mobile Platform LLC
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ril_devmon.h"
|
||||||
|
|
||||||
|
#include <ofono/log.h>
|
||||||
|
#include <ofono/ril-constants.h>
|
||||||
|
|
||||||
|
#include <mce_battery.h>
|
||||||
|
#include <mce_charger.h>
|
||||||
|
#include <mce_display.h>
|
||||||
|
|
||||||
|
#include <grilio_channel.h>
|
||||||
|
#include <grilio_request.h>
|
||||||
|
|
||||||
|
#include <gutil_macros.h>
|
||||||
|
|
||||||
|
#define RIL_UR_ENABLE_ALL (RIL_UR_SIGNAL_STRENGTH | \
|
||||||
|
RIL_UR_FULL_NETWORK_STATE | \
|
||||||
|
RIL_UR_DATA_CALL_DORMANCY_CHANGED)
|
||||||
|
|
||||||
|
enum ril_devmon_ur_battery_event {
|
||||||
|
BATTERY_EVENT_VALID,
|
||||||
|
BATTERY_EVENT_STATUS,
|
||||||
|
BATTERY_EVENT_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ril_devmon_ur_charger_event {
|
||||||
|
CHARGER_EVENT_VALID,
|
||||||
|
CHARGER_EVENT_STATE,
|
||||||
|
CHARGER_EVENT_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ril_devmon_ur_display_event {
|
||||||
|
DISPLAY_EVENT_VALID,
|
||||||
|
DISPLAY_EVENT_STATE,
|
||||||
|
DISPLAY_EVENT_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct ril_devmon_ur {
|
||||||
|
struct ril_devmon pub;
|
||||||
|
MceBattery *battery;
|
||||||
|
MceCharger *charger;
|
||||||
|
MceDisplay *display;
|
||||||
|
} DevMon;
|
||||||
|
|
||||||
|
typedef struct ril_devmon_ur_io {
|
||||||
|
struct ril_devmon_io pub;
|
||||||
|
struct sailfish_cell_info *cell_info;
|
||||||
|
MceBattery *battery;
|
||||||
|
MceCharger *charger;
|
||||||
|
MceDisplay *display;
|
||||||
|
GRilIoChannel *io;
|
||||||
|
gboolean display_on;
|
||||||
|
gboolean unsol_filter_supported;
|
||||||
|
gulong battery_event_id[BATTERY_EVENT_COUNT];
|
||||||
|
gulong charger_event_id[CHARGER_EVENT_COUNT];
|
||||||
|
gulong display_event_id[DISPLAY_EVENT_COUNT];
|
||||||
|
guint req_id;
|
||||||
|
} DevMonIo;
|
||||||
|
|
||||||
|
#define DBG_(self,fmt,args...) DBG("%s: " fmt, (self)->io->name, ##args)
|
||||||
|
|
||||||
|
inline static DevMon *ril_devmon_ur_cast(struct ril_devmon *pub)
|
||||||
|
{
|
||||||
|
return G_CAST(pub, DevMon, pub);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static DevMonIo *ril_devmon_ur_io_cast(struct ril_devmon_io *pub)
|
||||||
|
{
|
||||||
|
return G_CAST(pub, DevMonIo, pub);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline gboolean ril_devmon_ur_battery_ok(MceBattery *battery)
|
||||||
|
{
|
||||||
|
return battery->valid && battery->status >= MCE_BATTERY_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline gboolean ril_devmon_ur_charging(MceCharger *charger)
|
||||||
|
{
|
||||||
|
return charger->valid && charger->state == MCE_CHARGER_ON;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean ril_devmon_ur_display_on(MceDisplay *display)
|
||||||
|
{
|
||||||
|
return display->valid && display->state != MCE_DISPLAY_STATE_OFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ril_devmon_ur_io_unsol_response_filter_sent(GRilIoChannel *io,
|
||||||
|
int status, const void *data, guint len,
|
||||||
|
void *user_data)
|
||||||
|
{
|
||||||
|
DevMonIo *self = user_data;
|
||||||
|
|
||||||
|
self->req_id = 0;
|
||||||
|
if (status == RIL_E_REQUEST_NOT_SUPPORTED) {
|
||||||
|
/* This is a permanent failure */
|
||||||
|
DBG_(self, "Unsolicited response filter is not supported");
|
||||||
|
self->unsol_filter_supported = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ril_devmon_ur_io_set_unsol_response_filter(DevMonIo *self)
|
||||||
|
{
|
||||||
|
if (self->unsol_filter_supported) {
|
||||||
|
const gint32 value = self->display_on ? RIL_UR_ENABLE_ALL : 0;
|
||||||
|
GRilIoRequest *req = grilio_request_array_int32_new(1, value);
|
||||||
|
|
||||||
|
DBG_(self, "Setting unsolicited response filter: %u", value);
|
||||||
|
|
||||||
|
grilio_channel_cancel_request(self->io, self->req_id, FALSE);
|
||||||
|
self->req_id =
|
||||||
|
grilio_channel_send_request_full(self->io, req,
|
||||||
|
RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER,
|
||||||
|
ril_devmon_ur_io_unsol_response_filter_sent,
|
||||||
|
NULL, self);
|
||||||
|
grilio_request_unref(req);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ril_devmon_ur_io_set_cell_info_update_interval(DevMonIo *self)
|
||||||
|
{
|
||||||
|
sailfish_cell_info_set_update_interval(self->cell_info,
|
||||||
|
(self->display_on && (ril_devmon_ur_charging(self->charger) ||
|
||||||
|
ril_devmon_ur_battery_ok(self->battery))) ?
|
||||||
|
RIL_CELL_INFO_INTERVAL_SHORT_MS :
|
||||||
|
RIL_CELL_INFO_INTERVAL_LONG_MS);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ril_devmon_ur_io_battery_cb(MceBattery *battery, void *user_data)
|
||||||
|
{
|
||||||
|
ril_devmon_ur_io_set_cell_info_update_interval(user_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ril_devmon_ur_io_charger_cb(MceCharger *charger, void *user_data)
|
||||||
|
{
|
||||||
|
ril_devmon_ur_io_set_cell_info_update_interval(user_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ril_devmon_ur_io_display_cb(MceDisplay *display, void *user_data)
|
||||||
|
{
|
||||||
|
DevMonIo *self = user_data;
|
||||||
|
const gboolean display_on = ril_devmon_ur_display_on(display);
|
||||||
|
|
||||||
|
if (self->display_on != display_on) {
|
||||||
|
self->display_on = display_on;
|
||||||
|
ril_devmon_ur_io_set_unsol_response_filter(self);
|
||||||
|
ril_devmon_ur_io_set_cell_info_update_interval(self);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ril_devmon_ur_io_free(struct ril_devmon_io *devmon_io)
|
||||||
|
{
|
||||||
|
DevMonIo *self = ril_devmon_ur_io_cast(devmon_io);
|
||||||
|
|
||||||
|
mce_battery_remove_all_handlers(self->battery, self->battery_event_id);
|
||||||
|
mce_battery_unref(self->battery);
|
||||||
|
|
||||||
|
mce_charger_remove_all_handlers(self->charger, self->charger_event_id);
|
||||||
|
mce_charger_unref(self->charger);
|
||||||
|
|
||||||
|
mce_display_remove_all_handlers(self->display, self->display_event_id);
|
||||||
|
mce_display_unref(self->display);
|
||||||
|
|
||||||
|
grilio_channel_cancel_request(self->io, self->req_id, FALSE);
|
||||||
|
grilio_channel_unref(self->io);
|
||||||
|
|
||||||
|
sailfish_cell_info_unref(self->cell_info);
|
||||||
|
g_free(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct ril_devmon_io *ril_devmon_ur_start_io(struct ril_devmon *devmon,
|
||||||
|
GRilIoChannel *io, struct sailfish_cell_info *cell_info)
|
||||||
|
{
|
||||||
|
DevMon *ur = ril_devmon_ur_cast(devmon);
|
||||||
|
DevMonIo *self = g_new0(DevMonIo, 1);
|
||||||
|
|
||||||
|
self->pub.free = ril_devmon_ur_io_free;
|
||||||
|
self->unsol_filter_supported = TRUE;
|
||||||
|
self->io = grilio_channel_ref(io);
|
||||||
|
self->cell_info = sailfish_cell_info_ref(cell_info);
|
||||||
|
|
||||||
|
self->battery = mce_battery_ref(ur->battery);
|
||||||
|
self->battery_event_id[BATTERY_EVENT_VALID] =
|
||||||
|
mce_battery_add_valid_changed_handler(self->battery,
|
||||||
|
ril_devmon_ur_io_battery_cb, self);
|
||||||
|
self->battery_event_id[BATTERY_EVENT_STATUS] =
|
||||||
|
mce_battery_add_status_changed_handler(self->battery,
|
||||||
|
ril_devmon_ur_io_battery_cb, self);
|
||||||
|
|
||||||
|
self->charger = mce_charger_ref(ur->charger);
|
||||||
|
self->charger_event_id[CHARGER_EVENT_VALID] =
|
||||||
|
mce_charger_add_valid_changed_handler(self->charger,
|
||||||
|
ril_devmon_ur_io_charger_cb, self);
|
||||||
|
self->charger_event_id[CHARGER_EVENT_STATE] =
|
||||||
|
mce_charger_add_state_changed_handler(self->charger,
|
||||||
|
ril_devmon_ur_io_charger_cb, self);
|
||||||
|
|
||||||
|
self->display = mce_display_ref(ur->display);
|
||||||
|
self->display_on = ril_devmon_ur_display_on(self->display);
|
||||||
|
self->display_event_id[DISPLAY_EVENT_VALID] =
|
||||||
|
mce_display_add_valid_changed_handler(self->display,
|
||||||
|
ril_devmon_ur_io_display_cb, self);
|
||||||
|
self->display_event_id[DISPLAY_EVENT_STATE] =
|
||||||
|
mce_display_add_state_changed_handler(self->display,
|
||||||
|
ril_devmon_ur_io_display_cb, self);
|
||||||
|
|
||||||
|
ril_devmon_ur_io_set_unsol_response_filter(self);
|
||||||
|
ril_devmon_ur_io_set_cell_info_update_interval(self);
|
||||||
|
return &self->pub;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ril_devmon_ur_free(struct ril_devmon *devmon)
|
||||||
|
{
|
||||||
|
DevMon *self = ril_devmon_ur_cast(devmon);
|
||||||
|
|
||||||
|
mce_battery_unref(self->battery);
|
||||||
|
mce_charger_unref(self->charger);
|
||||||
|
mce_display_unref(self->display);
|
||||||
|
g_free(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ril_devmon *ril_devmon_ur_new()
|
||||||
|
{
|
||||||
|
DevMon *self = g_new0(DevMon, 1);
|
||||||
|
|
||||||
|
self->pub.free = ril_devmon_ur_free;
|
||||||
|
self->pub.start_io = ril_devmon_ur_start_io;
|
||||||
|
self->battery = mce_battery_new();
|
||||||
|
self->charger = mce_charger_new();
|
||||||
|
self->display = mce_display_new();
|
||||||
|
return &self->pub;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local Variables:
|
||||||
|
* mode: C
|
||||||
|
* c-basic-offset: 8
|
||||||
|
* indent-tabs-mode: t
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* oFono - Open Source Telephony - RIL-based devices
|
* oFono - Open Source Telephony - RIL-based devices
|
||||||
*
|
*
|
||||||
* Copyright (C) 2015-2019 Jolla Ltd.
|
* Copyright (C) 2015-2020 Jolla Ltd.
|
||||||
* Copyright (C) 2019 Open Mobile Platform LLC.
|
* Copyright (C) 2019 Open Mobile Platform LLC.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@@ -29,7 +29,6 @@
|
|||||||
|
|
||||||
#include <ofono/watch.h>
|
#include <ofono/watch.h>
|
||||||
|
|
||||||
#define MAX_PDP_CONTEXTS (2)
|
|
||||||
#define ONLINE_TIMEOUT_SECS (15) /* 20 sec is hardcoded in ofono core */
|
#define ONLINE_TIMEOUT_SECS (15) /* 20 sec is hardcoded in ofono core */
|
||||||
|
|
||||||
enum ril_modem_power_state {
|
enum ril_modem_power_state {
|
||||||
@@ -307,15 +306,22 @@ static void ril_modem_post_sim(struct ofono_modem *modem)
|
|||||||
ofono_sms_create(modem, 0, RILMODEM_DRIVER, md);
|
ofono_sms_create(modem, 0, RILMODEM_DRIVER, md);
|
||||||
gprs = ofono_gprs_create(modem, 0, RILMODEM_DRIVER, md);
|
gprs = ofono_gprs_create(modem, 0, RILMODEM_DRIVER, md);
|
||||||
if (gprs) {
|
if (gprs) {
|
||||||
int i;
|
guint i;
|
||||||
|
static const enum ofono_gprs_context_type ap_types[] = {
|
||||||
|
OFONO_GPRS_CONTEXT_TYPE_INTERNET,
|
||||||
|
OFONO_GPRS_CONTEXT_TYPE_MMS,
|
||||||
|
OFONO_GPRS_CONTEXT_TYPE_IMS
|
||||||
|
};
|
||||||
|
|
||||||
for (i = 0; i < MAX_PDP_CONTEXTS; i++) {
|
/* Create a context for each type */
|
||||||
|
for (i = 0; i < G_N_ELEMENTS(ap_types); i++) {
|
||||||
struct ofono_gprs_context *gc =
|
struct ofono_gprs_context *gc =
|
||||||
ofono_gprs_context_create(modem, 0,
|
ofono_gprs_context_create(modem, 0,
|
||||||
RILMODEM_DRIVER, md);
|
RILMODEM_DRIVER, md);
|
||||||
if (gc == NULL)
|
if (gc == NULL)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
ofono_gprs_context_set_type(gc, ap_types[i]);
|
||||||
ofono_gprs_add_context(gprs, gc);
|
ofono_gprs_add_context(gprs, gc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -182,7 +182,8 @@ enum ril_devmon_opt {
|
|||||||
RIL_DEVMON_NONE,
|
RIL_DEVMON_NONE,
|
||||||
RIL_DEVMON_AUTO,
|
RIL_DEVMON_AUTO,
|
||||||
RIL_DEVMON_SS,
|
RIL_DEVMON_SS,
|
||||||
RIL_DEVMON_DS
|
RIL_DEVMON_DS,
|
||||||
|
RIL_DEVMON_UR
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ril_plugin_identity {
|
struct ril_plugin_identity {
|
||||||
@@ -1710,11 +1711,13 @@ static ril_slot *ril_plugin_parse_config_group(GKeyFile *file,
|
|||||||
"none", RIL_DEVMON_NONE,
|
"none", RIL_DEVMON_NONE,
|
||||||
"auto", RIL_DEVMON_AUTO,
|
"auto", RIL_DEVMON_AUTO,
|
||||||
"ds", RIL_DEVMON_DS,
|
"ds", RIL_DEVMON_DS,
|
||||||
"ss", RIL_DEVMON_SS, NULL)) {
|
"ss", RIL_DEVMON_SS,
|
||||||
|
"ur", RIL_DEVMON_UR, NULL)) {
|
||||||
DBG("%s: " RILCONF_DEVMON " %s", group,
|
DBG("%s: " RILCONF_DEVMON " %s", group,
|
||||||
ival == RIL_DEVMON_NONE ? "off" :
|
ival == RIL_DEVMON_NONE ? "off" :
|
||||||
ival == RIL_DEVMON_DS ? "on" :
|
ival == RIL_DEVMON_DS ? "on" :
|
||||||
ival == RIL_DEVMON_SS ? "legacy" :
|
ival == RIL_DEVMON_SS ? "legacy" :
|
||||||
|
ival == RIL_DEVMON_UR ? "filter" :
|
||||||
"auto");
|
"auto");
|
||||||
if (ival != RIL_DEVMON_AUTO) {
|
if (ival != RIL_DEVMON_AUTO) {
|
||||||
/* Default is automatic, reallocate the object */
|
/* Default is automatic, reallocate the object */
|
||||||
@@ -1722,6 +1725,7 @@ static ril_slot *ril_plugin_parse_config_group(GKeyFile *file,
|
|||||||
slot->devmon =
|
slot->devmon =
|
||||||
(ival == RIL_DEVMON_DS ? ril_devmon_ds_new() :
|
(ival == RIL_DEVMON_DS ? ril_devmon_ds_new() :
|
||||||
ival == RIL_DEVMON_SS ? ril_devmon_ss_new() :
|
ival == RIL_DEVMON_SS ? ril_devmon_ss_new() :
|
||||||
|
ival == RIL_DEVMON_UR ? ril_devmon_ur_new() :
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -302,7 +302,10 @@ socket=/dev/socket/rild
|
|||||||
#
|
#
|
||||||
# ss = Use legacy device state management (RIL_REQUEST_SCREEN_STATE)
|
# ss = Use legacy device state management (RIL_REQUEST_SCREEN_STATE)
|
||||||
# ds = Use newer device state management (RIL_REQUEST_SEND_DEVICE_STATE)
|
# ds = Use newer device state management (RIL_REQUEST_SEND_DEVICE_STATE)
|
||||||
# auto = Choose one of the above based on the RIL version
|
# ur = Use URC filter (RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER)
|
||||||
|
# This may be useful on devices with RIL version >= 15 if auto
|
||||||
|
# method fails
|
||||||
|
# auto = Choose ss or ds based on the RIL version
|
||||||
# none = Disable device state management
|
# none = Disable device state management
|
||||||
#
|
#
|
||||||
# Default auto
|
# Default auto
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* oFono - Open Source Telephony
|
* oFono - Open Source Telephony
|
||||||
*
|
*
|
||||||
* Copyright (C) 2019 Jolla Ltd.
|
* Copyright (C) 2019-2020 Jolla Ltd.
|
||||||
|
* Copyright (C) 2020 Open Mobile Platform LLC.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
@@ -25,7 +26,7 @@ extern "C" {
|
|||||||
enum ofono_dbus_access {
|
enum ofono_dbus_access {
|
||||||
OFONO_DBUS_ACCESS_DENY, /* Deny access */
|
OFONO_DBUS_ACCESS_DENY, /* Deny access */
|
||||||
OFONO_DBUS_ACCESS_ALLOW, /* Allow access */
|
OFONO_DBUS_ACCESS_ALLOW, /* Allow access */
|
||||||
OFONO_DBUS_ACCESS_DONT_CARE, /* No decision */
|
OFONO_DBUS_ACCESS_DONT_CARE /* No decision */
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ofono_dbus_access_intf {
|
enum ofono_dbus_access_intf {
|
||||||
@@ -38,6 +39,7 @@ enum ofono_dbus_access_intf {
|
|||||||
OFONO_DBUS_ACCESS_INTF_SIMMGR, /* org.ofono.SimManager */
|
OFONO_DBUS_ACCESS_INTF_SIMMGR, /* org.ofono.SimManager */
|
||||||
OFONO_DBUS_ACCESS_INTF_MODEM, /* org.ofono.Modem */
|
OFONO_DBUS_ACCESS_INTF_MODEM, /* org.ofono.Modem */
|
||||||
OFONO_DBUS_ACCESS_INTF_RADIOSETTINGS, /* org.ofono.RadioSettings */
|
OFONO_DBUS_ACCESS_INTF_RADIOSETTINGS, /* org.ofono.RadioSettings */
|
||||||
|
OFONO_DBUS_ACCESS_INTF_STK, /* org.ofono.SimToolkit */
|
||||||
OFONO_DBUS_ACCESS_INTF_COUNT
|
OFONO_DBUS_ACCESS_INTF_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -116,6 +118,12 @@ enum ofono_dbus_access_radiosettings_method {
|
|||||||
OFONO_DBUS_ACCESS_RADIOSETTINGS_METHOD_COUNT
|
OFONO_DBUS_ACCESS_RADIOSETTINGS_METHOD_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* OFONO_DBUS_ACCESS_INTF_STK */
|
||||||
|
enum ofono_dbus_access_stk_method {
|
||||||
|
OFONO_DBUS_ACCESS_STK_REGISTER_AGENT,
|
||||||
|
OFONO_DBUS_ACCESS_STK_METHOD_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
#define OFONO_DBUS_ACCESS_PRIORITY_LOW (-100)
|
#define OFONO_DBUS_ACCESS_PRIORITY_LOW (-100)
|
||||||
#define OFONO_DBUS_ACCESS_PRIORITY_DEFAULT (0)
|
#define OFONO_DBUS_ACCESS_PRIORITY_DEFAULT (0)
|
||||||
#define OFONO_DBUS_ACCESS_PRIORITY_HIGH (100)
|
#define OFONO_DBUS_ACCESS_PRIORITY_HIGH (100)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* oFono - Open Source Telephony
|
* oFono - Open Source Telephony
|
||||||
*
|
*
|
||||||
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
||||||
* Copyright (C) 2015-2017 Jolla Ltd.
|
* Copyright (C) 2015-2020 Jolla Ltd.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
@@ -60,6 +60,7 @@ const char *mbpi_database = MBPI_DATABASE;
|
|||||||
*/
|
*/
|
||||||
enum ofono_gprs_proto mbpi_default_internet_proto = OFONO_GPRS_PROTO_IPV4V6;
|
enum ofono_gprs_proto mbpi_default_internet_proto = OFONO_GPRS_PROTO_IPV4V6;
|
||||||
enum ofono_gprs_proto mbpi_default_mms_proto = OFONO_GPRS_PROTO_IP;
|
enum ofono_gprs_proto mbpi_default_mms_proto = OFONO_GPRS_PROTO_IP;
|
||||||
|
enum ofono_gprs_proto mbpi_default_ims_proto = OFONO_GPRS_PROTO_IPV4V6;
|
||||||
enum ofono_gprs_proto mbpi_default_proto = OFONO_GPRS_PROTO_IP;
|
enum ofono_gprs_proto mbpi_default_proto = OFONO_GPRS_PROTO_IP;
|
||||||
enum ofono_gprs_auth_method mbpi_default_auth_method = OFONO_GPRS_AUTH_METHOD_ANY;
|
enum ofono_gprs_auth_method mbpi_default_auth_method = OFONO_GPRS_AUTH_METHOD_ANY;
|
||||||
|
|
||||||
@@ -246,6 +247,9 @@ static void usage_start(GMarkupParseContext *context,
|
|||||||
} else if (strcmp(text, "mms") == 0) {
|
} else if (strcmp(text, "mms") == 0) {
|
||||||
apn->type = OFONO_GPRS_CONTEXT_TYPE_MMS;
|
apn->type = OFONO_GPRS_CONTEXT_TYPE_MMS;
|
||||||
apn->proto = mbpi_default_mms_proto;
|
apn->proto = mbpi_default_mms_proto;
|
||||||
|
} else if (strcmp(text, "ims") == 0) {
|
||||||
|
apn->type = OFONO_GPRS_CONTEXT_TYPE_IMS;
|
||||||
|
apn->proto = mbpi_default_ims_proto;
|
||||||
} else if (strcmp(text, "wap") == 0)
|
} else if (strcmp(text, "wap") == 0)
|
||||||
apn->type = OFONO_GPRS_CONTEXT_TYPE_WAP;
|
apn->type = OFONO_GPRS_CONTEXT_TYPE_WAP;
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
* oFono - Open Source Telephony
|
* oFono - Open Source Telephony
|
||||||
*
|
*
|
||||||
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
||||||
|
* Copyright (C) 2013-2020 Jolla Ltd.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
@@ -22,6 +23,7 @@
|
|||||||
extern const char *mbpi_database;
|
extern const char *mbpi_database;
|
||||||
extern enum ofono_gprs_proto mbpi_default_internet_proto;
|
extern enum ofono_gprs_proto mbpi_default_internet_proto;
|
||||||
extern enum ofono_gprs_proto mbpi_default_mms_proto;
|
extern enum ofono_gprs_proto mbpi_default_mms_proto;
|
||||||
|
extern enum ofono_gprs_proto mbpi_default_ims_proto;
|
||||||
extern enum ofono_gprs_proto mbpi_default_proto;
|
extern enum ofono_gprs_proto mbpi_default_proto;
|
||||||
extern enum ofono_gprs_auth_method mbpi_default_auth_method;
|
extern enum ofono_gprs_auth_method mbpi_default_auth_method;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* oFono - Open Source Telephony
|
* oFono - Open Source Telephony
|
||||||
*
|
*
|
||||||
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
||||||
* Copyright (C) 2013-2017 Jolla Ltd.
|
* Copyright (C) 2013-2020 Jolla Ltd.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
@@ -136,38 +136,56 @@ static GSList *provision_pick_best_ap(GSList *list, const char *spn,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns the list containing exactly one INTERNET and one MMS access point */
|
/**
|
||||||
|
* Returns the list containing INTERNET, MMS and IMS access points,
|
||||||
|
* always all three of them and always in this order.
|
||||||
|
*/
|
||||||
static GSList *provision_normalize_apn_list(GSList *apns, const char *spn)
|
static GSList *provision_normalize_apn_list(GSList *apns, const char *spn)
|
||||||
{
|
{
|
||||||
static const struct provision_ap_defaults internet_defaults =
|
static const struct provision_ap_defaults internet_defaults =
|
||||||
{ OFONO_GPRS_CONTEXT_TYPE_INTERNET, "Internet", "internet" };
|
{ OFONO_GPRS_CONTEXT_TYPE_INTERNET, "Internet", "internet" };
|
||||||
static const struct provision_ap_defaults mms_defaults =
|
static const struct provision_ap_defaults mms_defaults =
|
||||||
{ OFONO_GPRS_CONTEXT_TYPE_MMS, "MMS", "mms" };
|
{ OFONO_GPRS_CONTEXT_TYPE_MMS, "MMS", "mms" };
|
||||||
|
static const struct provision_ap_defaults ims_defaults =
|
||||||
|
{ OFONO_GPRS_CONTEXT_TYPE_IMS, "IMS", "ims" };
|
||||||
|
|
||||||
GSList *internet_apns = NULL;
|
GSList *internet_apns = NULL;
|
||||||
GSList *mms_apns = NULL;
|
GSList *mms_apns = NULL;
|
||||||
|
GSList *ims_apns = NULL;
|
||||||
|
|
||||||
/* Split internet and mms apns, delete all others */
|
/* Build separate apn list for each type */
|
||||||
while (apns) {
|
while (apns) {
|
||||||
GSList *link = apns;
|
GSList *link = apns;
|
||||||
struct ofono_gprs_provision_data *ap = link->data;
|
struct ofono_gprs_provision_data *ap = link->data;
|
||||||
|
|
||||||
apns = g_slist_remove_link(apns, link);
|
apns = g_slist_remove_link(apns, link);
|
||||||
if (ap->type == OFONO_GPRS_CONTEXT_TYPE_INTERNET) {
|
switch (ap->type) {
|
||||||
|
case OFONO_GPRS_CONTEXT_TYPE_INTERNET:
|
||||||
internet_apns = g_slist_concat(internet_apns, link);
|
internet_apns = g_slist_concat(internet_apns, link);
|
||||||
} else if (ap->type == OFONO_GPRS_CONTEXT_TYPE_MMS) {
|
break;
|
||||||
|
case OFONO_GPRS_CONTEXT_TYPE_MMS:
|
||||||
mms_apns = g_slist_concat(mms_apns, link);
|
mms_apns = g_slist_concat(mms_apns, link);
|
||||||
} else {
|
break;
|
||||||
|
case OFONO_GPRS_CONTEXT_TYPE_IMS:
|
||||||
|
ims_apns = g_slist_concat(ims_apns, link);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
g_slist_free_full(link, provision_free_ap);
|
g_slist_free_full(link, provision_free_ap);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Pick the best ap of each type and concatenate them */
|
/* Pick the best ap of each type */
|
||||||
return g_slist_concat(
|
internet_apns = provision_pick_best_ap(internet_apns, spn,
|
||||||
provision_pick_best_ap(internet_apns, spn,
|
mbpi_default_internet_proto, &internet_defaults);
|
||||||
mbpi_default_internet_proto, &internet_defaults),
|
mms_apns = provision_pick_best_ap(mms_apns, spn,
|
||||||
provision_pick_best_ap(mms_apns, spn,
|
mbpi_default_mms_proto, &mms_defaults);
|
||||||
mbpi_default_mms_proto, &mms_defaults));
|
ims_apns = provision_pick_best_ap(ims_apns, spn,
|
||||||
|
mbpi_default_ims_proto, &ims_defaults);
|
||||||
|
|
||||||
|
/* And concatenate them in the right order */
|
||||||
|
return g_slist_concat(internet_apns, g_slist_concat(mms_apns,
|
||||||
|
ims_apns));
|
||||||
}
|
}
|
||||||
|
|
||||||
int provision_get_settings(const char *mcc, const char *mnc,
|
int provision_get_settings(const char *mcc, const char *mnc,
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* oFono - Open Source Telephony
|
* oFono - Open Source Telephony
|
||||||
*
|
*
|
||||||
* Copyright (C) 2019 Jolla Ltd.
|
* Copyright (C) 2019-2020 Jolla Ltd.
|
||||||
|
* Copyright (C) 2020 Open Mobile Platform LLC.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
@@ -41,6 +42,8 @@ const char *ofono_dbus_access_intf_name(enum ofono_dbus_access_intf intf)
|
|||||||
return OFONO_MODEM_INTERFACE;
|
return OFONO_MODEM_INTERFACE;
|
||||||
case OFONO_DBUS_ACCESS_INTF_RADIOSETTINGS:
|
case OFONO_DBUS_ACCESS_INTF_RADIOSETTINGS:
|
||||||
return OFONO_RADIO_SETTINGS_INTERFACE;
|
return OFONO_RADIO_SETTINGS_INTERFACE;
|
||||||
|
case OFONO_DBUS_ACCESS_INTF_STK:
|
||||||
|
return OFONO_STK_INTERFACE;
|
||||||
case OFONO_DBUS_ACCESS_INTF_COUNT:
|
case OFONO_DBUS_ACCESS_INTF_COUNT:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -165,6 +168,14 @@ const char *ofono_dbus_access_method_name(enum ofono_dbus_access_intf intf,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case OFONO_DBUS_ACCESS_INTF_STK:
|
||||||
|
switch ((enum ofono_dbus_access_stk_method)method) {
|
||||||
|
case OFONO_DBUS_ACCESS_STK_REGISTER_AGENT:
|
||||||
|
return "RegisterAgent";
|
||||||
|
case OFONO_DBUS_ACCESS_STK_METHOD_COUNT:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case OFONO_DBUS_ACCESS_INTF_COUNT:
|
case OFONO_DBUS_ACCESS_INTF_COUNT:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* oFono - Open Source Telephony
|
* oFono - Open Source Telephony
|
||||||
*
|
*
|
||||||
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
||||||
* Copyright (C) 2015-2019 Jolla Ltd.
|
* Copyright (C) 2015-2020 Jolla Ltd.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
@@ -2874,12 +2874,53 @@ static void provision_contexts(struct ofono_gprs *gprs, const char *mcc,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++) {
|
||||||
provision_context(&settings[i], gprs);
|
const struct ofono_gprs_provision_data *ap = settings + i;
|
||||||
|
|
||||||
|
if (!ofono_gprs_context_settings_by_type(gprs, ap->type)) {
|
||||||
|
provision_context(ap, gprs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
__ofono_gprs_provision_free_settings(settings, count);
|
__ofono_gprs_provision_free_settings(settings, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean all_contexts_configured(struct ofono_gprs *gprs)
|
||||||
|
{
|
||||||
|
GSList *l;
|
||||||
|
|
||||||
|
for (l = gprs->context_drivers; l; l = l->next) {
|
||||||
|
struct ofono_gprs_context *gc = l->data;
|
||||||
|
|
||||||
|
if (gc->type != OFONO_GPRS_CONTEXT_TYPE_ANY &&
|
||||||
|
!ofono_gprs_context_settings_by_type(gprs, gc->type)) {
|
||||||
|
return FALSE; /* Not yet */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void configure_remaining_contexts(struct ofono_gprs *gprs)
|
||||||
|
{
|
||||||
|
GSList *l;
|
||||||
|
|
||||||
|
for (l = gprs->context_drivers; l; l = l->next) {
|
||||||
|
struct ofono_gprs_context *gc = l->data;
|
||||||
|
|
||||||
|
if (gc->type != OFONO_GPRS_CONTEXT_TYPE_ANY &&
|
||||||
|
!ofono_gprs_context_settings_by_type(gprs, gc->type)) {
|
||||||
|
add_context(gprs, NULL, gc->type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure internet context is there */
|
||||||
|
if (!ofono_gprs_context_settings_by_type(gprs,
|
||||||
|
OFONO_GPRS_CONTEXT_TYPE_INTERNET)) {
|
||||||
|
add_context(gprs, NULL, OFONO_GPRS_CONTEXT_TYPE_INTERNET);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void remove_non_active_context(struct ofono_gprs *gprs,
|
static void remove_non_active_context(struct ofono_gprs *gprs,
|
||||||
struct pri_context *ctx, DBusConnection *conn)
|
struct pri_context *ctx, DBusConnection *conn)
|
||||||
{
|
{
|
||||||
@@ -2960,8 +3001,7 @@ static DBusMessage *gprs_reset_contexts(DBusConnection *conn,
|
|||||||
provision_contexts(gprs, ofono_sim_get_mcc(sim),
|
provision_contexts(gprs, ofono_sim_get_mcc(sim),
|
||||||
ofono_sim_get_mnc(sim), ofono_sim_get_spn(sim));
|
ofono_sim_get_mnc(sim), ofono_sim_get_spn(sim));
|
||||||
|
|
||||||
if (gprs->contexts == NULL) /* Automatic provisioning failed */
|
configure_remaining_contexts(gprs);
|
||||||
add_context(gprs, NULL, OFONO_GPRS_CONTEXT_TYPE_INTERNET);
|
|
||||||
|
|
||||||
for (l = gprs->contexts; l; l = l->next) {
|
for (l = gprs->contexts; l; l = l->next) {
|
||||||
struct pri_context *ctx = l->data;
|
struct pri_context *ctx = l->data;
|
||||||
@@ -3832,8 +3872,7 @@ static void ofono_gprs_finish_register(struct ofono_gprs *gprs)
|
|||||||
struct ofono_modem *modem = __ofono_atom_get_modem(gprs->atom);
|
struct ofono_modem *modem = __ofono_atom_get_modem(gprs->atom);
|
||||||
const char *path = __ofono_atom_get_path(gprs->atom);
|
const char *path = __ofono_atom_get_path(gprs->atom);
|
||||||
|
|
||||||
if (gprs->contexts == NULL) /* Automatic provisioning failed */
|
configure_remaining_contexts(gprs);
|
||||||
add_context(gprs, NULL, OFONO_GPRS_CONTEXT_TYPE_INTERNET);
|
|
||||||
|
|
||||||
if (!g_dbus_register_interface(conn, path,
|
if (!g_dbus_register_interface(conn, path,
|
||||||
OFONO_CONNECTION_MANAGER_INTERFACE,
|
OFONO_CONNECTION_MANAGER_INTERFACE,
|
||||||
@@ -3856,56 +3895,14 @@ static void ofono_gprs_finish_register(struct ofono_gprs *gprs)
|
|||||||
__ofono_atom_register(gprs->atom, gprs_unregister);
|
__ofono_atom_register(gprs->atom, gprs_unregister);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean mms_context_configured(struct ofono_gprs *gprs)
|
|
||||||
{
|
|
||||||
GSList *l;
|
|
||||||
|
|
||||||
for (l = gprs->contexts; l; l = l->next) {
|
|
||||||
struct pri_context *ctx = l->data;
|
|
||||||
|
|
||||||
if (ctx->type == OFONO_GPRS_CONTEXT_TYPE_MMS)
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void provision_mms_context(struct ofono_gprs *gprs, const char *mcc,
|
|
||||||
const char *mnc, const char *spn)
|
|
||||||
{
|
|
||||||
struct ofono_gprs_provision_data *settings;
|
|
||||||
int count;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (__ofono_gprs_provision_get_settings(mcc, mnc, spn,
|
|
||||||
&settings, &count) == FALSE) {
|
|
||||||
ofono_warn("Provisioning failed");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
|
||||||
if (settings[i].type == OFONO_GPRS_CONTEXT_TYPE_MMS) {
|
|
||||||
provision_context(&settings[i], gprs);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
__ofono_gprs_provision_free_settings(settings, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void spn_read_cb(const char *spn, const char *dc, void *data)
|
static void spn_read_cb(const char *spn, const char *dc, void *data)
|
||||||
{
|
{
|
||||||
struct ofono_gprs *gprs = data;
|
struct ofono_gprs *gprs = data;
|
||||||
struct ofono_modem *modem = __ofono_atom_get_modem(gprs->atom);
|
struct ofono_modem *modem = __ofono_atom_get_modem(gprs->atom);
|
||||||
struct ofono_sim *sim = __ofono_atom_find(OFONO_ATOM_TYPE_SIM, modem);
|
struct ofono_sim *sim = __ofono_atom_find(OFONO_ATOM_TYPE_SIM, modem);
|
||||||
|
|
||||||
if (gprs->contexts == NULL) {
|
provision_contexts(gprs, ofono_sim_get_mcc(sim),
|
||||||
provision_contexts(gprs, ofono_sim_get_mcc(sim),
|
|
||||||
ofono_sim_get_mnc(sim), spn);
|
ofono_sim_get_mnc(sim), spn);
|
||||||
} else if (!mms_context_configured(gprs)) {
|
|
||||||
provision_mms_context(gprs, ofono_sim_get_mcc(sim),
|
|
||||||
ofono_sim_get_mnc(sim), spn);
|
|
||||||
}
|
|
||||||
|
|
||||||
ofono_sim_remove_spn_watch(sim, &gprs->spn_watch);
|
ofono_sim_remove_spn_watch(sim, &gprs->spn_watch);
|
||||||
|
|
||||||
@@ -3927,7 +3924,7 @@ void ofono_gprs_register(struct ofono_gprs *gprs)
|
|||||||
|
|
||||||
gprs_load_settings(gprs, ofono_sim_get_imsi(sim));
|
gprs_load_settings(gprs, ofono_sim_get_imsi(sim));
|
||||||
|
|
||||||
if (mms_context_configured(gprs))
|
if (all_contexts_configured(gprs))
|
||||||
goto finish;
|
goto finish;
|
||||||
|
|
||||||
ofono_sim_add_spn_watch(sim, &gprs->spn_watch, spn_read_cb, gprs, NULL);
|
ofono_sim_add_spn_watch(sim, &gprs->spn_watch, spn_read_cb, gprs, NULL);
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
* oFono - Open Source Telephony
|
* oFono - Open Source Telephony
|
||||||
*
|
*
|
||||||
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
* Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
|
||||||
|
* Copyright (C) 2020 Jolla Ltd.
|
||||||
|
* Copyright (C) 2020 Open Mobile Platform LLC.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
@@ -725,6 +727,12 @@ static DBusMessage *stk_register_agent(DBusConnection *conn,
|
|||||||
if (!dbus_validate_path(agent_path, NULL))
|
if (!dbus_validate_path(agent_path, NULL))
|
||||||
return __ofono_error_invalid_format(msg);
|
return __ofono_error_invalid_format(msg);
|
||||||
|
|
||||||
|
if (!__ofono_dbus_access_method_allowed(dbus_message_get_sender(msg),
|
||||||
|
OFONO_DBUS_ACCESS_INTF_STK,
|
||||||
|
OFONO_DBUS_ACCESS_STK_REGISTER_AGENT,
|
||||||
|
agent_path))
|
||||||
|
return __ofono_error_access_denied(msg);
|
||||||
|
|
||||||
stk->default_agent = stk_agent_new(agent_path,
|
stk->default_agent = stk_agent_new(agent_path,
|
||||||
dbus_message_get_sender(msg),
|
dbus_message_get_sender(msg),
|
||||||
FALSE);
|
FALSE);
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* oFono - Open Source Telephony
|
* oFono - Open Source Telephony
|
||||||
*
|
*
|
||||||
* Copyright (C) 2019 Jolla Ltd.
|
* Copyright (C) 2019-2020 Jolla Ltd.
|
||||||
|
* Copyright (C) 2020 Open Mobile Platform LLC.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
@@ -103,6 +104,9 @@ static const struct test_method_name_data method_name_tests[] = {
|
|||||||
},{
|
},{
|
||||||
OFONO_DBUS_ACCESS_INTF_RADIOSETTINGS,
|
OFONO_DBUS_ACCESS_INTF_RADIOSETTINGS,
|
||||||
OFONO_DBUS_ACCESS_RADIOSETTINGS_METHOD_COUNT
|
OFONO_DBUS_ACCESS_RADIOSETTINGS_METHOD_COUNT
|
||||||
|
},{
|
||||||
|
OFONO_DBUS_ACCESS_INTF_STK,
|
||||||
|
OFONO_DBUS_ACCESS_STK_METHOD_COUNT
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* oFono - Open Source Telephony
|
* oFono - Open Source Telephony
|
||||||
*
|
*
|
||||||
* Copyright (C) 2014-2017 Jolla. All rights reserved.
|
* Copyright (C) 2014-2020 Jolla. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
@@ -105,21 +105,21 @@ static void test_provision(gconstpointer test_data)
|
|||||||
|
|
||||||
g_assert(actual->type == expected->type);
|
g_assert(actual->type == expected->type);
|
||||||
g_assert(actual->proto == expected->proto);
|
g_assert(actual->proto == expected->proto);
|
||||||
g_assert(!g_strcmp0(actual->provider_name,
|
g_assert_cmpstr(actual->provider_name, ==,
|
||||||
expected->provider_name));
|
expected->provider_name);
|
||||||
g_assert(!g_strcmp0(actual->name, expected->name));
|
g_assert_cmpstr(actual->name, ==, expected->name);
|
||||||
g_assert(actual->provider_primary ==
|
g_assert(actual->provider_primary ==
|
||||||
expected->provider_primary);
|
expected->provider_primary);
|
||||||
g_assert(!g_strcmp0(actual->apn, expected->apn));
|
g_assert_cmpstr(actual->apn, ==, expected->apn);
|
||||||
g_assert(!g_strcmp0(actual->username,
|
g_assert_cmpstr(actual->username, ==,
|
||||||
expected->username));
|
expected->username);
|
||||||
g_assert(!g_strcmp0(actual->password,
|
g_assert_cmpstr(actual->password, ==,
|
||||||
expected->password));
|
expected->password);
|
||||||
g_assert(actual->auth_method == expected->auth_method);
|
g_assert(actual->auth_method == expected->auth_method);
|
||||||
g_assert(!g_strcmp0(actual->message_proxy,
|
g_assert_cmpstr(actual->message_proxy, ==,
|
||||||
expected->message_proxy));
|
expected->message_proxy);
|
||||||
g_assert(!g_strcmp0(actual->message_center,
|
g_assert_cmpstr(actual->message_center, ==,
|
||||||
expected->message_center));
|
expected->message_center);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
g_assert(!__ofono_gprs_provision_get_settings(test->mcc,
|
g_assert(!__ofono_gprs_provision_get_settings(test->mcc,
|
||||||
@@ -212,6 +212,14 @@ static char telia_fi_message_center [] = "http://mms/";
|
|||||||
.apn = "mms", \
|
.apn = "mms", \
|
||||||
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
||||||
|
|
||||||
|
/* Default IMS settings */
|
||||||
|
#define DEFAULT_IMS_SETTINGS \
|
||||||
|
.type = OFONO_GPRS_CONTEXT_TYPE_IMS, \
|
||||||
|
.proto = OFONO_GPRS_PROTO_IPV4V6, \
|
||||||
|
.name = "IMS", \
|
||||||
|
.apn = "ims", \
|
||||||
|
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
||||||
|
|
||||||
static const struct ofono_gprs_provision_data telia_fi_internet_mms_p[] = {
|
static const struct ofono_gprs_provision_data telia_fi_internet_mms_p[] = {
|
||||||
{
|
{
|
||||||
.type = OFONO_GPRS_CONTEXT_TYPE_INTERNET,
|
.type = OFONO_GPRS_CONTEXT_TYPE_INTERNET,
|
||||||
@@ -231,7 +239,8 @@ static const struct ofono_gprs_provision_data telia_fi_internet_mms_p[] = {
|
|||||||
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE,
|
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE,
|
||||||
.message_proxy = telia_fi_message_proxy,
|
.message_proxy = telia_fi_message_proxy,
|
||||||
.message_center = telia_fi_message_center
|
.message_center = telia_fi_message_center
|
||||||
}
|
},
|
||||||
|
{ DEFAULT_IMS_SETTINGS }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ofono_gprs_provision_data telia_fi_internet_mms[] = {
|
static const struct ofono_gprs_provision_data telia_fi_internet_mms[] = {
|
||||||
@@ -251,7 +260,8 @@ static const struct ofono_gprs_provision_data telia_fi_internet_mms[] = {
|
|||||||
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE,
|
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE,
|
||||||
.message_proxy = telia_fi_message_proxy,
|
.message_proxy = telia_fi_message_proxy,
|
||||||
.message_center = telia_fi_message_center
|
.message_center = telia_fi_message_center
|
||||||
}
|
},
|
||||||
|
{ DEFAULT_IMS_SETTINGS }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ofono_gprs_provision_data telia_fi_internet[] = {
|
static const struct ofono_gprs_provision_data telia_fi_internet[] = {
|
||||||
@@ -263,7 +273,8 @@ static const struct ofono_gprs_provision_data telia_fi_internet[] = {
|
|||||||
.apn = telia_fi_apn_internet,
|
.apn = telia_fi_apn_internet,
|
||||||
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
||||||
},
|
},
|
||||||
{ DEFAULT_MMS_SETTINGS }
|
{ DEFAULT_MMS_SETTINGS },
|
||||||
|
{ DEFAULT_IMS_SETTINGS }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ofono_gprs_provision_data telia_fi_mms[] = {
|
static const struct ofono_gprs_provision_data telia_fi_mms[] = {
|
||||||
@@ -277,12 +288,14 @@ static const struct ofono_gprs_provision_data telia_fi_mms[] = {
|
|||||||
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE,
|
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE,
|
||||||
.message_proxy = telia_fi_message_proxy,
|
.message_proxy = telia_fi_message_proxy,
|
||||||
.message_center = telia_fi_message_center
|
.message_center = telia_fi_message_center
|
||||||
}
|
},
|
||||||
|
{ DEFAULT_IMS_SETTINGS }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ofono_gprs_provision_data default_settings[] = {
|
static const struct ofono_gprs_provision_data default_settings[] = {
|
||||||
{ DEFAILT_INTERNET_SETTINGS },
|
{ DEFAILT_INTERNET_SETTINGS },
|
||||||
{ DEFAULT_MMS_SETTINGS }
|
{ DEFAULT_MMS_SETTINGS },
|
||||||
|
{ DEFAULT_IMS_SETTINGS }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ofono_gprs_provision_data no_auth_settings[] = {
|
static const struct ofono_gprs_provision_data no_auth_settings[] = {
|
||||||
@@ -300,7 +313,8 @@ static const struct ofono_gprs_provision_data no_auth_settings[] = {
|
|||||||
.name = "MMS",
|
.name = "MMS",
|
||||||
.apn = "mms",
|
.apn = "mms",
|
||||||
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
||||||
}
|
},
|
||||||
|
{ DEFAULT_IMS_SETTINGS }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ofono_gprs_provision_data auth_settings[] = {
|
static const struct ofono_gprs_provision_data auth_settings[] = {
|
||||||
@@ -318,7 +332,8 @@ static const struct ofono_gprs_provision_data auth_settings[] = {
|
|||||||
.apn = "mms",
|
.apn = "mms",
|
||||||
.password = "password",
|
.password = "password",
|
||||||
.auth_method = OFONO_GPRS_AUTH_METHOD_ANY
|
.auth_method = OFONO_GPRS_AUTH_METHOD_ANY
|
||||||
}
|
},
|
||||||
|
{ DEFAULT_IMS_SETTINGS }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ofono_gprs_provision_data settings_ip[] = {
|
static const struct ofono_gprs_provision_data settings_ip[] = {
|
||||||
@@ -329,7 +344,8 @@ static const struct ofono_gprs_provision_data settings_ip[] = {
|
|||||||
.apn = "internet",
|
.apn = "internet",
|
||||||
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
||||||
},
|
},
|
||||||
{ DEFAULT_MMS_SETTINGS }
|
{ DEFAULT_MMS_SETTINGS },
|
||||||
|
{ DEFAULT_IMS_SETTINGS }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ofono_gprs_provision_data settings_ipv6[] = {
|
static const struct ofono_gprs_provision_data settings_ipv6[] = {
|
||||||
@@ -345,7 +361,8 @@ static const struct ofono_gprs_provision_data settings_ipv6[] = {
|
|||||||
.name = "MMS",
|
.name = "MMS",
|
||||||
.apn = "mms",
|
.apn = "mms",
|
||||||
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
||||||
}
|
},
|
||||||
|
{ DEFAULT_IMS_SETTINGS }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ofono_gprs_provision_data settings_ipv4v6[] = {
|
static const struct ofono_gprs_provision_data settings_ipv4v6[] = {
|
||||||
@@ -356,7 +373,40 @@ static const struct ofono_gprs_provision_data settings_ipv4v6[] = {
|
|||||||
.name = "MMS",
|
.name = "MMS",
|
||||||
.apn = "mms",
|
.apn = "mms",
|
||||||
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
||||||
}
|
},
|
||||||
|
{ DEFAULT_IMS_SETTINGS }
|
||||||
|
};
|
||||||
|
|
||||||
|
static char beeline_provider_name [] = "Beeline";
|
||||||
|
static const struct ofono_gprs_provision_data beeline_ims[] = {
|
||||||
|
{
|
||||||
|
.type = OFONO_GPRS_CONTEXT_TYPE_INTERNET,
|
||||||
|
.proto = OFONO_GPRS_PROTO_IPV4V6,
|
||||||
|
.provider_name = beeline_provider_name,
|
||||||
|
.name = "Beeline Internet",
|
||||||
|
.apn = "internet.beeline.ru",
|
||||||
|
.username = "beeline",
|
||||||
|
.password = "beeline",
|
||||||
|
.auth_method = OFONO_GPRS_AUTH_METHOD_ANY
|
||||||
|
}, {
|
||||||
|
.type = OFONO_GPRS_CONTEXT_TYPE_MMS,
|
||||||
|
.proto = OFONO_GPRS_PROTO_IP,
|
||||||
|
.provider_name = beeline_provider_name,
|
||||||
|
.name = "Beeline MMS",
|
||||||
|
.apn = "mms.beeline.ru",
|
||||||
|
.username = "beeline",
|
||||||
|
.password = "beeline",
|
||||||
|
.auth_method = OFONO_GPRS_AUTH_METHOD_PAP,
|
||||||
|
.message_proxy = "192.168.94.23:8080",
|
||||||
|
.message_center = "http://mms/"
|
||||||
|
}, {
|
||||||
|
.type = OFONO_GPRS_CONTEXT_TYPE_IMS,
|
||||||
|
.proto = OFONO_GPRS_PROTO_IPV4V6,
|
||||||
|
.provider_name = beeline_provider_name,
|
||||||
|
.name = "Beeline IMS",
|
||||||
|
.apn = "ims.beeline.ru",
|
||||||
|
.auth_method = OFONO_GPRS_AUTH_METHOD_NONE
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static char test_provider_name[] = "Test provider";
|
static char test_provider_name[] = "Test provider";
|
||||||
@@ -382,7 +432,8 @@ static const struct ofono_gprs_provision_data test_username_password[] = {
|
|||||||
.auth_method = OFONO_GPRS_AUTH_METHOD_CHAP,
|
.auth_method = OFONO_GPRS_AUTH_METHOD_CHAP,
|
||||||
.message_proxy = test_message_proxy,
|
.message_proxy = test_message_proxy,
|
||||||
.message_center = test_message_center
|
.message_center = test_message_center
|
||||||
}
|
},
|
||||||
|
{ DEFAULT_IMS_SETTINGS }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char telia_fi_internet_xml[] =
|
static const char telia_fi_internet_xml[] =
|
||||||
@@ -806,6 +857,42 @@ static const struct provision_test_case test_cases[] = {
|
|||||||
.mnc = "91",
|
.mnc = "91",
|
||||||
.settings = telia_fi_mms,
|
.settings = telia_fi_mms,
|
||||||
.count = G_N_ELEMENTS(telia_fi_mms)
|
.count = G_N_ELEMENTS(telia_fi_mms)
|
||||||
|
},{
|
||||||
|
.name = TEST_SUITE "ims",
|
||||||
|
.xml =
|
||||||
|
"<serviceproviders format=\"2.0\">\n\
|
||||||
|
<country code=\"ru\">\n\
|
||||||
|
<provider>\n\
|
||||||
|
<name>Beeline</name>\n\
|
||||||
|
<gsm>\n\
|
||||||
|
<network-id mcc=\"250\" mnc=\"99\"/>\n\
|
||||||
|
<apn value=\"internet.beeline.ru\">\n\
|
||||||
|
<usage type=\"internet\"/>\n\
|
||||||
|
<name>Beeline Internet</name>\n\
|
||||||
|
<username>beeline</username>\n\
|
||||||
|
<password>beeline</password>\n\
|
||||||
|
</apn>\n\
|
||||||
|
<apn value=\"mms.beeline.ru\">\n\
|
||||||
|
<usage type=\"mms\"/>\n\
|
||||||
|
<name>Beeline MMS</name>\n\
|
||||||
|
<authentication method=\"pap\"/>\n\
|
||||||
|
<username>beeline</username>\n\
|
||||||
|
<password>beeline</password>\n\
|
||||||
|
<mmsc>http://mms/</mmsc>\n\
|
||||||
|
<mmsproxy>192.168.94.23:8080</mmsproxy>\n\
|
||||||
|
</apn>\n\
|
||||||
|
<apn value=\"ims.beeline.ru\">\n\
|
||||||
|
<usage type=\"ims\"/>\n\
|
||||||
|
<name>Beeline IMS</name>\n\
|
||||||
|
</apn>\n\
|
||||||
|
</gsm>\n\
|
||||||
|
</provider>\n\
|
||||||
|
</country>\n\
|
||||||
|
</serviceproviders>\n",
|
||||||
|
.mcc = "250",
|
||||||
|
.mnc = "99",
|
||||||
|
.settings = beeline_ims,
|
||||||
|
.count = G_N_ELEMENTS(beeline_ims)
|
||||||
},{
|
},{
|
||||||
.name = TEST_SUITE "not_found_mcc",
|
.name = TEST_SUITE "not_found_mcc",
|
||||||
.xml = telia_fi_internet_xml,
|
.xml = telia_fi_internet_xml,
|
||||||
@@ -1297,3 +1384,11 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
return g_test_run();
|
return g_test_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local Variables:
|
||||||
|
* mode: C
|
||||||
|
* c-basic-offset: 8
|
||||||
|
* indent-tabs-mode: t
|
||||||
|
* End:
|
||||||
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user