diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2018-12-13 11:49:28 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@gnu.org> | 2018-12-18 09:24:20 +0000 |
commit | 0e5ae24bee07464681c6750de1739be1b3e634a9 (patch) | |
tree | 9121fe81c760227ff5b9b0b835b2673615f4425e | |
parent | 0bfd89f0b61d71723e3a0dd77b198a4d9b435839 (diff) | |
download | libqmi-0e5ae24bee07464681c6750de1739be1b3e634a9.tar.gz |
libqmi-glib,proxy: avoid using qmi_utils_() deprecated methods
-rw-r--r-- | src/libqmi-glib/qmi-proxy.c | 78 |
1 files changed, 41 insertions, 37 deletions
diff --git a/src/libqmi-glib/qmi-proxy.c b/src/libqmi-glib/qmi-proxy.c index bfb362e0..e0884162 100644 --- a/src/libqmi-glib/qmi-proxy.c +++ b/src/libqmi-glib/qmi-proxy.c @@ -412,19 +412,27 @@ process_internal_proxy_open (QmiProxy *self, Client *client, QmiMessage *message) { - const guint8 *buffer; - guint16 buffer_len; - gchar *device_file_path; - - buffer = qmi_message_get_raw_tlv (message, - QMI_MESSAGE_CTL_INTERNAL_PROXY_OPEN_INPUT_TLV_DEVICE_PATH, - &buffer_len); - if (!buffer) { - g_debug ("ignoring message from client: invalid proxy open request"); + gsize offset = 0; + gsize init_offset; + gchar *device_file_path; + GError *error = NULL; + + if ((init_offset = qmi_message_tlv_read_init (message, QMI_MESSAGE_CTL_INTERNAL_PROXY_OPEN_INPUT_TLV_DEVICE_PATH, NULL, &error)) == 0) { + g_debug ("ignoring message from client: invalid proxy open request: %s", error->message); + g_error_free (error); return FALSE; } - qmi_utils_read_string_from_buffer (&buffer, &buffer_len, 0, 0, &device_file_path); + if (!qmi_message_tlv_read_string (message, init_offset, &offset, 0, 0, &device_file_path, &error)) { + g_debug ("ignoring message from client: invalid device file path: %s", error->message); + g_error_free (error); + return FALSE; + } + + /* The remaining size of the buffer needs to be 0 if we successfully read the TLV */ + if ((offset = __qmi_message_tlv_read_remaining_size (message, init_offset, offset)) > 0) + g_warning ("Left '%" G_GSIZE_FORMAT "' bytes unread when getting the 'Device Path' TLV", offset); + g_debug ("valid request to open connection to QMI device file: %s", device_file_path); /* Keep it */ @@ -460,39 +468,35 @@ track_cid (Client *client, gboolean track, QmiMessage *message) { - const guint8 *buffer; - guint16 buffer_len; - guint16 error_status; - guint16 error_code; - guint8 tmp; - QmiClientInfo info; - guint i; - gboolean exists; - - buffer = qmi_message_get_raw_tlv (message, QMI_MESSAGE_OUTPUT_TLV_RESULT, &buffer_len); - if (!buffer || buffer_len != 4) { - g_warning ("invalid 'CTL allocate CID' response: missing or invalid result TLV"); + gsize offset = 0; + gsize init_offset; + guint16 error_status; + guint16 error_code; + GError *error = NULL; + guint8 service_tmp; + QmiClientInfo info; + gboolean exists; + guint i; + + if (((init_offset = qmi_message_tlv_read_init (message, QMI_MESSAGE_OUTPUT_TLV_RESULT, NULL, &error)) == 0) || + !qmi_message_tlv_read_guint16 (message, init_offset, &offset, QMI_ENDIAN_LITTLE, &error_status, &error) || + !qmi_message_tlv_read_guint16 (message, init_offset, &offset, QMI_ENDIAN_LITTLE, &error_code, &error)) { + g_warning ("invalid 'CTL allocate CID' response: missing or invalid result TLV: %s", error->message); + g_error_free (error); return; } - - qmi_utils_read_guint16_from_buffer (&buffer, &buffer_len, QMI_ENDIAN_LITTLE, &error_status); - if (error_status != 0x00) - return; - - qmi_utils_read_guint16_from_buffer (&buffer, &buffer_len, QMI_ENDIAN_LITTLE, &error_code); - if (error_code != QMI_PROTOCOL_ERROR_NONE) + g_warn_if_fail (__qmi_message_tlv_read_remaining_size (message, init_offset, offset) == 0); + if ((error_status != 0x00) || (error_code != QMI_PROTOCOL_ERROR_NONE)) return; - buffer = qmi_message_get_raw_tlv (message, QMI_MESSAGE_OUTPUT_TLV_ALLOCATION_INFO, &buffer_len); - if (!buffer || buffer_len != 2) { - g_warning ("invalid 'CTL allocate CID' response: missing or invalid allocation info TLV"); + if (((init_offset = qmi_message_tlv_read_init (message, QMI_MESSAGE_OUTPUT_TLV_ALLOCATION_INFO, NULL, &error)) == 0) || + !qmi_message_tlv_read_guint8 (message, init_offset, &offset, &service_tmp, &error) || + !qmi_message_tlv_read_guint8 (message, init_offset, &offset, &(info.cid), &error)) { + g_warning ("invalid 'CTL allocate CID' response: missing or invalid allocation info TLV: %s", error->message); + g_error_free (error); return; } - - qmi_utils_read_guint8_from_buffer (&buffer, &buffer_len, &tmp); - info.service = (QmiService)tmp; - qmi_utils_read_guint8_from_buffer (&buffer, &buffer_len, &(info.cid)); - + info.service = (QmiService)service_tmp; /* Check if it already exists */ for (i = 0; i < client->qmi_client_info_array->len; i++) { |