Compare commits

...

6 Commits

Author SHA1 Message Date
Slava Monich
301b880a87 Merge pull request #37 from monich/cbs-topics-max
Widen the range of allowed cell broadcast channels
2022-10-27 02:12:01 +03:00
Slava Monich
933525829f [cbs] Widen the range of allowed cell broadcast channels. JB#5761 2022-10-25 13:39:33 +03:00
Slava Monich
d8df18c80c Updated upstream hash to point to 1.29 2022-10-25 13:25:52 +03:00
Slava Monich
47fd559c1b Merge pull request #36 from monich/jb58727
Remove event source after closing BT socket
2022-09-08 01:18:26 +03:00
Slava Monich
8fa9a7068f [hfp_ag_bluez5] Remove event source after closing BT socket. JB#58727
Otherwise GIOChannel stays alive and glib main loop keeps polling
invalid fd and eating up CPU time.
2022-09-07 17:21:24 +03:00
Slava Monich
10c1d7ac75 [ims] Tweak the treatment of the default Registration value
To handle the case if it's not IMS_REG_AUTO
2022-05-09 17:57:41 +03:00
8 changed files with 36 additions and 28 deletions

View File

@@ -2,6 +2,7 @@
* oFono - Open Source Telephony * oFono - Open Source Telephony
* *
* Copyright (C) 2011 Intel Corporation. All rights reserved. * Copyright (C) 2011 Intel Corporation. All rights reserved.
* Copyright (C) 2018-2022 Jolla Ltd. 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
@@ -52,6 +53,11 @@ typedef struct GAtResult GAtResult;
#define HFP_AG_DRIVER "hfp-ag-driver" #define HFP_AG_DRIVER "hfp-ag-driver"
struct watch_fd {
guint id;
int fd;
};
static gboolean hfp_ag_enabled; static gboolean hfp_ag_enabled;
static guint service_watch_id; static guint service_watch_id;
static guint modemwatch_id; static guint modemwatch_id;
@@ -145,11 +151,12 @@ static struct ofono_handsfree_card_driver hfp_ag_driver = {
static void connection_destroy(gpointer data) static void connection_destroy(gpointer data)
{ {
int fd = GPOINTER_TO_INT(data); struct watch_fd *watch = data;
DBG("fd %d", fd); DBG("fd %d", watch->fd);
close(fd); g_source_remove(watch->id);
g_free(watch);
} }
static gboolean io_hup_cb(GIOChannel *io, GIOCondition cond, gpointer data) static gboolean io_hup_cb(GIOChannel *io, GIOCondition cond, gpointer data)
@@ -169,7 +176,8 @@ static DBusMessage *profile_new_connection(DBusConnection *conn,
DBusMessageIter entry; DBusMessageIter entry;
const char *device; const char *device;
GIOChannel *io; GIOChannel *io;
int fd, fd_dup; int fd;
struct watch_fd *watch;
struct sockaddr_rc saddr; struct sockaddr_rc saddr;
socklen_t optlen; socklen_t optlen;
struct ofono_emulator *em; struct ofono_emulator *em;
@@ -252,10 +260,12 @@ static DBusMessage *profile_new_connection(DBusConnection *conn,
emulator = em; emulator = em;
ofono_emulator_register(em, fd); ofono_emulator_register(em, fd);
fd_dup = dup(fd); watch = g_new(struct watch_fd, 1);
io = g_io_channel_unix_new(fd_dup); watch->fd = dup(fd);
g_io_add_watch_full(io, G_PRIORITY_DEFAULT, G_IO_HUP, io_hup_cb, io = g_io_channel_unix_new(watch->fd);
g_strdup(device), g_free); g_io_channel_set_close_on_unref(io, TRUE);
watch->id = g_io_add_watch_full(io, G_PRIORITY_DEFAULT, G_IO_HUP,
io_hup_cb, g_strdup(device), g_free);
g_io_channel_unref(io); g_io_channel_unref(io);
card = ofono_handsfree_card_create(0, card = ofono_handsfree_card_create(0,
@@ -269,8 +279,7 @@ static DBusMessage *profile_new_connection(DBusConnection *conn,
ofono_emulator_set_handsfree_card(em, card); ofono_emulator_set_handsfree_card(em, card);
g_hash_table_insert(connection_hash, g_strdup(device), g_hash_table_insert(connection_hash, g_strdup(device), watch);
GINT_TO_POINTER(fd_dup));
return dbus_message_new_method_return(msg); return dbus_message_new_method_return(msg);
@@ -304,7 +313,7 @@ static DBusMessage *profile_disconnection(DBusConnection *conn,
{ {
DBusMessageIter iter; DBusMessageIter iter;
const char *device; const char *device;
gpointer fd; struct watch_fd *watch;
DBG("Profile handler RequestDisconnection"); DBG("Profile handler RequestDisconnection");
@@ -318,11 +327,11 @@ static DBusMessage *profile_disconnection(DBusConnection *conn,
DBG("%s", device); DBG("%s", device);
fd = g_hash_table_lookup(connection_hash, device); watch = g_hash_table_lookup(connection_hash, device);
if (fd == NULL) if (watch == NULL)
goto invalid; goto invalid;
shutdown(GPOINTER_TO_INT(fd), SHUT_RDWR); shutdown(watch->fd, SHUT_RDWR);
g_hash_table_remove(connection_hash, device); g_hash_table_remove(connection_hash, device);

View File

@@ -771,7 +771,7 @@ static void sim_cbmi_read_cb(int ok, int length, int record,
mi = (data[i] << 8) + data[i+1]; mi = (data[i] << 8) + data[i+1];
if (mi > 999) if (mi > CBS_MAX_TOPIC)
continue; continue;
range = g_new0(struct cbs_topic_range, 1); range = g_new0(struct cbs_topic_range, 1);
@@ -818,7 +818,7 @@ static void sim_cbmir_read_cb(int ok, int length, int record,
min = (data[i] << 8) + data[i+1]; min = (data[i] << 8) + data[i+1];
max = (data[i+2] << 8) + data[i+3]; max = (data[i+2] << 8) + data[i+3];
if (min > 999 || max > 999 || min > max) if (min > CBS_MAX_TOPIC || max > CBS_MAX_TOPIC || min > max)
continue; continue;
range = g_new0(struct cbs_topic_range, 1); range = g_new0(struct cbs_topic_range, 1);

View File

@@ -262,8 +262,7 @@ static void ims_registration_check(struct ofono_ims *ims)
/* Any state is acceptable */ /* Any state is acceptable */
DBG("ims is enabled, no action needed"); DBG("ims is enabled, no action needed");
return; return;
case IMS_REG_DEFAULT: case IMS_REG_AUTO:
/* IMS_REG_AUTO */
break; break;
} }

View File

@@ -4593,13 +4593,11 @@ out:
GSList *cbs_optimize_ranges(GSList *ranges) GSList *cbs_optimize_ranges(GSList *ranges)
{ {
struct cbs_topic_range *range; struct cbs_topic_range *range;
unsigned char bitmap[125]; unsigned char *bitmap = g_malloc0(CBS_MAX_TOPIC / 8 + 1);
GSList *l; GSList *l;
unsigned short i; unsigned short i;
GSList *ret = NULL; GSList *ret = NULL;
memset(bitmap, 0, sizeof(bitmap));
for (l = ranges; l; l = l->next) { for (l = ranges; l; l = l->next) {
range = l->data; range = l->data;
@@ -4613,7 +4611,7 @@ GSList *cbs_optimize_ranges(GSList *ranges)
range = NULL; range = NULL;
for (i = 0; i <= 999; i++) { for (i = 0; i <= CBS_MAX_TOPIC; i++) {
int byte_offset = i / 8; int byte_offset = i / 8;
int bit = i % 8; int bit = i % 8;
@@ -4641,6 +4639,7 @@ GSList *cbs_optimize_ranges(GSList *ranges)
ret = g_slist_reverse(ret); ret = g_slist_reverse(ret);
g_free(bitmap);
return ret; return ret;
} }
@@ -4653,10 +4652,10 @@ GSList *cbs_extract_topic_ranges(const char *ranges)
GSList *tmp; GSList *tmp;
while (next_range(ranges, &offset, &min, &max) == TRUE) { while (next_range(ranges, &offset, &min, &max) == TRUE) {
if (min < 0 || min > 999) if (min < 0 || min > CBS_MAX_TOPIC)
return NULL; return NULL;
if (max < 0 || max > 999) if (max < 0 || max > CBS_MAX_TOPIC)
return NULL; return NULL;
if (max < min) if (max < min)

View File

@@ -23,6 +23,7 @@
#include <ofono/types.h> #include <ofono/types.h>
#define CBS_MAX_GSM_CHARS 93 #define CBS_MAX_GSM_CHARS 93
#define CBS_MAX_TOPIC 9999
#define SMS_MSGID_LEN 20 #define SMS_MSGID_LEN 20
enum sms_type { enum sms_type {

View File

@@ -92,9 +92,9 @@ def set_topics(cbs):
break break
if topicTemp: if topicTemp:
if int(topicTemp) > 999: if int(topicTemp) > 9999:
invalidData = True invalidData = True
print("Invalid Topic ID %s (range 0-999). \ print("Invalid Topic ID %s (range 0-9999). \
\nCould not register." % topicTemp) \nCould not register." % topicTemp)
index = index + 1 index = index + 1

View File

@@ -1589,7 +1589,7 @@ static void test_cbs_padding_character(void)
static const char *ranges[] = { "1-5, 2, 3, 600, 569-900, 999", static const char *ranges[] = { "1-5, 2, 3, 600, 569-900, 999",
"0-20, 33, 44, 50-60, 20-50, 1-5, 5, 3, 5", "0-20, 33, 44, 50-60, 20-50, 1-5, 5, 3, 5",
NULL }; NULL };
static const char *inv_ranges[] = { "1-5, 3333", "1-5, afbcd", "1-5, 3-5,,", static const char *inv_ranges[] = { "1-5, 33333", "1-5, afbcd", "1-5, 3-5,,",
"1-5, 3-5, c", NULL }; "1-5, 3-5, c", NULL };
static void test_range_minimizer(void) static void test_range_minimizer(void)