/** Get emergency service corresponding to number. */ char const * modem_call_get_emergency_service (ModemCallService *self, char const *destination) { char const * const *numbers; if (destination == NULL) return NULL; if (modem_call_get_valid_emergency_urn (destination)) return modem_call_get_valid_emergency_urn (destination); numbers = modem_call_get_emergency_numbers (self); for (; *numbers; numbers++) { size_t n = strlen (*numbers); if (!g_str_has_prefix (destination, *numbers)) continue; if (destination[n] && destination[n] != 'p' && destination[n] != 'w') continue; return modem_call_sos; } return NULL; }
void modem_call_service_resume (ModemCallService *self) { GHashTableIter iter[1]; ModemCall *ci; DEBUG ("enter"); RETURN_IF_NOT_VALID (self); /* XXX/KV: no such signal */ #if 0 g_signal_emit (self, signals[SIGNAL_EMERGENCY_NUMBERS_CHANGED], 0, modem_call_get_emergency_numbers (self)); #endif g_hash_table_iter_init (iter, self->priv->instances); while (g_hash_table_iter_next (iter, NULL, (gpointer)&ci)) { char *remote; gboolean terminating = FALSE; ModemCallState state; g_object_get (ci, "state", &state, "remote", &remote, "terminating", &terminating, NULL); if (state != MODEM_CALL_STATE_DISCONNECTED && state != MODEM_CALL_STATE_INVALID) { /* XXX - atm the value of 'terminating' cannot be trusted. * oFono should probably provide the direction as a property * since we cannot rely on the call state here. */ if (terminating) { modem_message (MODEM_LOG_CALL, "incoming [with state %s] call from \"%s\"", modem_call_get_state_name (state), remote); DEBUG ("emit \"incoming\"(%s (%p), %s)", modem_call_get_name (ci), ci, remote); g_signal_emit (self, signals[SIGNAL_INCOMING], 0, ci, remote); } else { modem_message (MODEM_LOG_CALL, "created [with state %s] call to \"%s\"", modem_call_get_state_name (state), remote); DEBUG ("emit \"created\"(%s (%p), %s)", modem_call_get_name (ci), ci, remote); g_signal_emit (self, signals[SIGNAL_CREATED], 0, ci, remote); } g_signal_emit_by_name (ci, "state", state, 0, 0); } g_free (remote); } }
RingEmergencyServiceInfoList * ring_media_manager_emergency_services(RingMediaManager *self) { RingMediaManagerPrivate *priv = RING_MEDIA_MANAGER(self)->priv; char const * const * numbers = NULL; /* * If the list is queried without valid call_service, * default emergency number list is returned */ numbers = modem_call_get_emergency_numbers (priv->call_service); return ring_emergency_service_info_list_default ((char **)numbers); }
static void modem_call_service_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ModemCallService *self = MODEM_CALL_SERVICE (object); switch (property_id) { case PROP_EMERGENCY_NUMBERS: g_value_set_boxed (value, modem_call_get_emergency_numbers (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }