bearer-mbim: activate packet service during connection request

This commit is contained in:
Aleksander Morgado
2013-04-17 15:19:50 +02:00
parent 6cbb3e9fc9
commit 07d4aa9938
+74
View File
@@ -110,6 +110,7 @@ peek_ports (gpointer self,
typedef enum {
CONNECT_STEP_FIRST,
CONNECT_STEP_PACKET_SERVICE,
CONNECT_STEP_PROVISIONED_CONTEXTS,
CONNECT_STEP_CONNECT,
CONNECT_STEP_LAST
@@ -270,6 +271,56 @@ provisioned_contexts_query_ready (MbimDevice *device,
connect_context_step (ctx);
}
static void
packet_service_set_ready (MbimDevice *device,
GAsyncResult *res,
ConnectContext *ctx)
{
GError *error = NULL;
MbimMessage *response;
guint32 nw_error;
MbimPacketServiceState packet_service_state;
MbimDataClass highest_available_data_class;
guint64 uplink_speed;
guint64 downlink_speed;
response = mbim_device_command_finish (device, res, &error);
if (response &&
mbim_message_command_done_get_result (response, &error) &&
mbim_message_packet_service_response_parse (
response,
&nw_error,
&packet_service_state,
&highest_available_data_class,
&uplink_speed,
&downlink_speed,
&error)) {
if (nw_error)
error = mm_mobile_equipment_error_from_mbim_nw_error (nw_error);
else {
gchar *str;
str = mbim_data_class_build_string_from_mask (highest_available_data_class);
mm_dbg ("Packet service update:");
mm_dbg (" state: '%s'", mbim_packet_service_state_get_string (packet_service_state));
mm_dbg (" data class: '%s'", str);
mm_dbg (" uplink: '%" G_GUINT64_FORMAT "' bps", uplink_speed);
mm_dbg (" downlink: '%" G_GUINT64_FORMAT "' bps", downlink_speed);
g_free (str);
}
}
if (error) {
g_simple_async_result_take_error (ctx->result, error);
connect_context_complete_and_free (ctx);
return;
}
/* Keep on */
ctx->step++;
connect_context_step (ctx);
}
static void
connect_context_step (ConnectContext *ctx)
{
@@ -290,6 +341,29 @@ connect_context_step (ConnectContext *ctx)
/* Fall down */
ctx->step++;
case CONNECT_STEP_PACKET_SERVICE: {
GError *error = NULL;
mm_dbg ("Activating packet service...");
message = (mbim_message_packet_service_set_new (
MBIM_PACKET_SERVICE_ACTION_ATTACH,
&error));
if (!message) {
g_simple_async_result_take_error (ctx->result, error);
connect_context_complete_and_free (ctx);
return;
}
mbim_device_command (ctx->device,
message,
10,
NULL,
(GAsyncReadyCallback)packet_service_set_ready,
ctx);
mbim_message_unref (message);
return;
}
case CONNECT_STEP_PROVISIONED_CONTEXTS:
mm_dbg ("Listing provisioned contexts...");
message = mbim_message_provisioned_contexts_query_new (NULL);