diff options
-rw-r--r-- | src/mm-iface-modem-cdma.c | 49 | ||||
-rw-r--r-- | src/mm-iface-modem-cdma.h | 10 |
2 files changed, 59 insertions, 0 deletions
diff --git a/src/mm-iface-modem-cdma.c b/src/mm-iface-modem-cdma.c index 56d3c178..3ad03709 100644 --- a/src/mm-iface-modem-cdma.c +++ b/src/mm-iface-modem-cdma.c @@ -371,6 +371,55 @@ handle_activate_manual (MmGdbusModemCdma *skeleton, /*****************************************************************************/ +/* Create new CDMA bearer */ +MMBearer * +mm_iface_modem_cdma_create_bearer (MMIfaceModemCdma *self, + MMCommonBearerProperties *properties, + GError **error) +{ + MMModemCdmaRegistrationState cdma1x_current_state; + MMModemCdmaRegistrationState evdo_current_state; + MMBearer *bearer; + + g_assert (MM_IFACE_MODEM_CDMA_GET_INTERFACE (self)->create_cdma_bearer != NULL); + + /* Create new CDMA bearer using the method set in the interface, so that + * plugins can subclass it and implement their own. */ + bearer = MM_BEARER (MM_IFACE_MODEM_CDMA_GET_INTERFACE (self)->create_cdma_bearer ( + MM_BASE_MODEM (self), + properties, + error)); + if (!bearer) + return NULL; + + g_object_get (self, + MM_IFACE_MODEM_CDMA_CDMA1X_REGISTRATION_STATE, &cdma1x_current_state, + MM_IFACE_MODEM_CDMA_EVDO_REGISTRATION_STATE, &evdo_current_state, + NULL); + + if (cdma1x_current_state == MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING || + evdo_current_state == MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING) { + /* Don't allow bearer to get connected if roaming forbidden */ + if (mm_bearer_get_allow_roaming (bearer)) + mm_bearer_set_connection_allowed (bearer); + else + mm_bearer_set_connection_forbidden ( + bearer, + MM_BEARER_CONNECTION_FORBIDDEN_REASON_ROAMING); + } + else if (cdma1x_current_state == MM_MODEM_CDMA_REGISTRATION_STATE_HOME || + evdo_current_state == MM_MODEM_CDMA_REGISTRATION_STATE_HOME) + mm_bearer_set_connection_allowed (bearer); + else + mm_bearer_set_connection_forbidden ( + bearer, + MM_BEARER_CONNECTION_FORBIDDEN_REASON_UNREGISTERED); + + return bearer; +} + +/*****************************************************************************/ + typedef struct _RunAllRegistrationChecksContext RunAllRegistrationChecksContext; static void registration_check_step (RunAllRegistrationChecksContext *ctx); diff --git a/src/mm-iface-modem-cdma.h b/src/mm-iface-modem-cdma.h index 027a7235..c1855bc1 100644 --- a/src/mm-iface-modem-cdma.h +++ b/src/mm-iface-modem-cdma.h @@ -139,6 +139,11 @@ struct _MMIfaceModemCdma { MMModemCdmaRegistrationState *detailed_cdma1x_state, MMModemCdmaRegistrationState *detailed_evdo_state, GError **error); + + /* Create CDMA bearer */ + MMBearer * (* create_cdma_bearer) (MMBaseModem *modem, + MMCommonBearerProperties *properties, + GError **error); }; GType mm_iface_modem_cdma_get_type (void); @@ -205,6 +210,11 @@ gboolean mm_iface_modem_cdma_run_all_registration_checks_finish (MMIfaceModemCdm GAsyncResult *res, GError **error); +/* Create new CDMA bearer */ +MMBearer *mm_iface_modem_cdma_create_bearer (MMIfaceModemCdma *self, + MMCommonBearerProperties *properties, + GError **error); + /* Bind properties for simple GetStatus() */ void mm_iface_modem_cdma_bind_simple_status (MMIfaceModemCdma *self, MMCommonSimpleProperties *status); |