Ejemplo n.º 1
0
/** 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;
}
Ejemplo n.º 2
0
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);
    }
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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;
    }
}