
/* GENERATED CODE... DO NOT EDIT */

/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
 * Copyright (C) 2013 - 2018 Aleksander Morgado <aleksander@aleksander.es>
 */


#include <glib.h>
#include <glib-object.h>
#include <gio/gio.h>

#include "mbim-message.h"
#include "mbim-device.h"
#include "mbim-enums.h"
#include "mbim-tlv.h"

#ifndef __LIBMBIM_GLIB_MBIM_SMS__
#define __LIBMBIM_GLIB_MBIM_SMS__

G_BEGIN_DECLS

/**
 * SECTION:mbim-sms
 * @title: Sms service
 * @short_description: Support for the Sms service.
 *
 * This section implements support for requests, responses and notifications in the
 * Sms service.
 */

/*****************************************************************************/
/* Struct: MbimSmsPduReadRecord */

/**
 * MbimSmsPduReadRecord:
 * @message_index: a #guint32.
 * @message_status: a #MbimSmsStatus given as a #guint32.
 * @pdu_data_size: size of the pdu_data array.
 * @pdu_data: an array of #guint8 values.
 *
 * A MbimSmsPduReadRecord element.
 *
 * Since: 1.4
 */
typedef struct {
    guint32 message_index;
    guint32 message_status;
    guint32 pdu_data_size;
    guint8 *pdu_data;
} MbimSmsPduReadRecord;

/**
 * MbimSmsPduReadRecordArray:
 *
 * A NULL-terminated array of MbimSmsPduReadRecord elements.
 *
 * Since: 1.24
 */
typedef MbimSmsPduReadRecord *MbimSmsPduReadRecordArray;
/**
 * mbim_sms_pdu_read_record_array_free:
 * @array: a #NULL terminated array of #MbimSmsPduReadRecord structs.
 *
 * Frees the memory allocated for the array of #MbimSmsPduReadRecord structs.
 *
 * Since: 1.4
 */
void mbim_sms_pdu_read_record_array_free (MbimSmsPduReadRecordArray *array);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MbimSmsPduReadRecordArray, mbim_sms_pdu_read_record_array_free)

/*****************************************************************************/
/* Struct: MbimSmsCdmaReadRecord */

/**
 * MbimSmsCdmaReadRecord:
 * @message_index: a #guint32.
 * @message_status: a #MbimSmsStatus given as a #guint32.
 * @address: a string.
 * @timestamp: a string.
 * @encoding: a #MbimSmsCdmaEncoding given as a #guint32.
 * @language: a #MbimSmsCdmaLang given as a #guint32.
 * @encoded_message_size: size of the encoded_message array.
 * @encoded_message: an array of #guint8 values.
 * @encoded_message_size_in_characters: a #guint32.
 *
 * A MbimSmsCdmaReadRecord element.
 *
 * Since: 1.4
 */
typedef struct {
    guint32 message_index;
    guint32 message_status;
    gchar *address;
    gchar *timestamp;
    guint32 encoding;
    guint32 language;
    guint32 encoded_message_size;
    guint8 *encoded_message;
    guint32 encoded_message_size_in_characters;
} MbimSmsCdmaReadRecord;

/**
 * MbimSmsCdmaReadRecordArray:
 *
 * A NULL-terminated array of MbimSmsCdmaReadRecord elements.
 *
 * Since: 1.24
 */
typedef MbimSmsCdmaReadRecord *MbimSmsCdmaReadRecordArray;
/**
 * mbim_sms_cdma_read_record_array_free:
 * @array: a #NULL terminated array of #MbimSmsCdmaReadRecord structs.
 *
 * Frees the memory allocated for the array of #MbimSmsCdmaReadRecord structs.
 *
 * Since: 1.4
 */
void mbim_sms_cdma_read_record_array_free (MbimSmsCdmaReadRecordArray *array);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MbimSmsCdmaReadRecordArray, mbim_sms_cdma_read_record_array_free)

/*****************************************************************************/
/* Struct: MbimSmsPduSendRecord */

/**
 * MbimSmsPduSendRecord:
 * @pdu_data_size: size of the pdu_data array.
 * @pdu_data: an array of #guint8 values.
 *
 * A MbimSmsPduSendRecord element.
 *
 * Since: 1.4
 */
typedef struct {
    guint32 pdu_data_size;
    guint8 *pdu_data;
} MbimSmsPduSendRecord;

/**
 * mbim_sms_pdu_send_record_free:
 * @var: a #MbimSmsPduSendRecord.
 *
 * Frees the memory allocated for the #MbimSmsPduSendRecord.
 *
 * Since: 1.4
 */
void mbim_sms_pdu_send_record_free (MbimSmsPduSendRecord *var);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MbimSmsPduSendRecord, mbim_sms_pdu_send_record_free)

/*****************************************************************************/
/* Struct: MbimSmsCdmaSendRecord */

/**
 * MbimSmsCdmaSendRecord:
 * @encoding: a #MbimSmsCdmaEncoding given as a #guint32.
 * @language: a #MbimSmsCdmaLang given as a #guint32.
 * @address: a string.
 * @encoded_message_size: size of the encoded_message array.
 * @encoded_message: an array of #guint8 values.
 * @encoded_message_size_in_characters: a #guint32.
 *
 * A MbimSmsCdmaSendRecord element.
 *
 * Since: 1.4
 */
typedef struct {
    guint32 encoding;
    guint32 language;
    gchar *address;
    guint32 encoded_message_size;
    guint8 *encoded_message;
    guint32 encoded_message_size_in_characters;
} MbimSmsCdmaSendRecord;

/**
 * mbim_sms_cdma_send_record_free:
 * @var: a #MbimSmsCdmaSendRecord.
 *
 * Frees the memory allocated for the #MbimSmsCdmaSendRecord.
 *
 * Since: 1.4
 */
void mbim_sms_cdma_send_record_free (MbimSmsCdmaSendRecord *var);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MbimSmsCdmaSendRecord, mbim_sms_cdma_send_record_free)

/*****************************************************************************/
/* Message (Query): MBIM Message SMS Configuration */

/**
 * mbim_message_sms_configuration_query_new:
 * @error: return location for error or %NULL.
 *
 * Create a new request for the 'Configuration' query command in the 'SMS' service.
 *
 * Returns: a newly allocated #MbimMessage, which should be freed with mbim_message_unref().
 *
 * Since: 1.4
 */
MbimMessage *mbim_message_sms_configuration_query_new (
    GError **error);

/*****************************************************************************/
/* Message (Set): MBIM Message SMS Configuration */

/**
 * mbim_message_sms_configuration_set_new:
 * @format: (in): the 'Format' field, given as a #MbimSmsFormat.
 * @sc_address: (in): the 'ScAddress' field, given as a string.
 * @error: return location for error or %NULL.
 *
 * Create a new request for the 'Configuration' set command in the 'SMS' service.
 *
 * Returns: a newly allocated #MbimMessage, which should be freed with mbim_message_unref().
 *
 * Since: 1.4
 */
MbimMessage *mbim_message_sms_configuration_set_new (
    MbimSmsFormat format,
    const gchar *sc_address,
    GError **error);

/*****************************************************************************/
/* Message (Response): MBIM Message SMS Configuration */

/**
 * mbim_message_sms_configuration_response_parse:
 * @message: the #MbimMessage.
 * @out_sms_storage_state: (out)(optional)(transfer none): return location for a #MbimSmsStorageState, or %NULL if the 'SmsStorageState' field is not needed.
 * @out_format: (out)(optional)(transfer none): return location for a #MbimSmsFormat, or %NULL if the 'Format' field is not needed.
 * @out_max_messages: (out)(optional)(transfer none): return location for a #guint32, or %NULL if the 'MaxMessages' field is not needed.
 * @out_cdma_short_message_size: (out)(optional)(transfer none): return location for a #guint32, or %NULL if the 'CdmaShortMessageSize' field is not needed.
 * @out_sc_address: (out)(optional)(transfer full): return location for a newly allocated string, or %NULL if the 'ScAddress' field is not needed. Free the returned value with g_free().
 * @error: return location for error or %NULL.
 *
 * Parses and returns parameters of the 'Configuration' response command in the 'SMS' service.
 *
 * Returns: %TRUE if the message was correctly parsed, %FALSE if @error is set.
 *
 * Since: 1.4
 */
gboolean mbim_message_sms_configuration_response_parse (
    const MbimMessage *message,
    MbimSmsStorageState *out_sms_storage_state,
    MbimSmsFormat *out_format,
    guint32 *out_max_messages,
    guint32 *out_cdma_short_message_size,
    gchar **out_sc_address,
    GError **error);

/*****************************************************************************/
/* Message (Notification): MBIM Message SMS Configuration */

/**
 * mbim_message_sms_configuration_notification_parse:
 * @message: the #MbimMessage.
 * @out_sms_storage_state: (out)(optional)(transfer none): return location for a #MbimSmsStorageState, or %NULL if the 'SmsStorageState' field is not needed.
 * @out_format: (out)(optional)(transfer none): return location for a #MbimSmsFormat, or %NULL if the 'Format' field is not needed.
 * @out_max_messages: (out)(optional)(transfer none): return location for a #guint32, or %NULL if the 'MaxMessages' field is not needed.
 * @out_cdma_short_message_size: (out)(optional)(transfer none): return location for a #guint32, or %NULL if the 'CdmaShortMessageSize' field is not needed.
 * @out_sc_address: (out)(optional)(transfer full): return location for a newly allocated string, or %NULL if the 'ScAddress' field is not needed. Free the returned value with g_free().
 * @error: return location for error or %NULL.
 *
 * Parses and returns parameters of the 'Configuration' notification command in the 'SMS' service.
 *
 * Returns: %TRUE if the message was correctly parsed, %FALSE if @error is set.
 *
 * Since: 1.4
 */
gboolean mbim_message_sms_configuration_notification_parse (
    const MbimMessage *message,
    MbimSmsStorageState *out_sms_storage_state,
    MbimSmsFormat *out_format,
    guint32 *out_max_messages,
    guint32 *out_cdma_short_message_size,
    gchar **out_sc_address,
    GError **error);

/*****************************************************************************/
/* Message (Query): MBIM Message SMS Read */

/**
 * mbim_message_sms_read_query_new:
 * @format: (in): the 'Format' field, given as a #MbimSmsFormat.
 * @flag: (in): the 'Flag' field, given as a #MbimSmsFlag.
 * @message_index: (in): the 'MessageIndex' field, given as a #guint32.
 * @error: return location for error or %NULL.
 *
 * Create a new request for the 'Read' query command in the 'SMS' service.
 *
 * Returns: a newly allocated #MbimMessage, which should be freed with mbim_message_unref().
 *
 * Since: 1.4
 */
MbimMessage *mbim_message_sms_read_query_new (
    MbimSmsFormat format,
    MbimSmsFlag flag,
    guint32 message_index,
    GError **error);

/*****************************************************************************/
/* Message (Response): MBIM Message SMS Read */

/**
 * mbim_message_sms_read_response_parse:
 * @message: the #MbimMessage.
 * @out_format: (out)(optional)(transfer none): return location for a #MbimSmsFormat, or %NULL if the 'Format' field is not needed.
 * @out_messages_count: (out)(optional)(transfer none): return location for a #guint32, or %NULL if the 'MessagesCount' field is not needed.
 * @out_pdu_messages: (out)(optional)(transfer full)(array zero-terminated=1)(element-type MbimSmsPduReadRecord): return location for a newly allocated array of #MbimSmsPduReadRecord items, or %NULL if the 'PduMessages' field is not needed. Free the returned value with mbim_sms_pdu_read_record_array_free().
 * @out_cdma_messages: (out)(optional)(transfer full)(array zero-terminated=1)(element-type MbimSmsCdmaReadRecord): return location for a newly allocated array of #MbimSmsCdmaReadRecord items, or %NULL if the 'CdmaMessages' field is not needed. Free the returned value with mbim_sms_cdma_read_record_array_free().
 * @error: return location for error or %NULL.
 *
 * Parses and returns parameters of the 'Read' response command in the 'SMS' service.
 *
 * Returns: %TRUE if the message was correctly parsed, %FALSE if @error is set.
 *
 * Since: 1.4
 */
gboolean mbim_message_sms_read_response_parse (
    const MbimMessage *message,
    MbimSmsFormat *out_format,
    guint32 *out_messages_count,
    MbimSmsPduReadRecordArray **out_pdu_messages,
    MbimSmsCdmaReadRecordArray **out_cdma_messages,
    GError **error);

/*****************************************************************************/
/* Message (Notification): MBIM Message SMS Read */

/**
 * mbim_message_sms_read_notification_parse:
 * @message: the #MbimMessage.
 * @out_format: (out)(optional)(transfer none): return location for a #MbimSmsFormat, or %NULL if the 'Format' field is not needed.
 * @out_messages_count: (out)(optional)(transfer none): return location for a #guint32, or %NULL if the 'MessagesCount' field is not needed.
 * @out_pdu_messages: (out)(optional)(transfer full)(array zero-terminated=1)(element-type MbimSmsPduReadRecord): return location for a newly allocated array of #MbimSmsPduReadRecord items, or %NULL if the 'PduMessages' field is not needed. Free the returned value with mbim_sms_pdu_read_record_array_free().
 * @out_cdma_messages: (out)(optional)(transfer full)(array zero-terminated=1)(element-type MbimSmsCdmaReadRecord): return location for a newly allocated array of #MbimSmsCdmaReadRecord items, or %NULL if the 'CdmaMessages' field is not needed. Free the returned value with mbim_sms_cdma_read_record_array_free().
 * @error: return location for error or %NULL.
 *
 * Parses and returns parameters of the 'Read' notification command in the 'SMS' service.
 *
 * Returns: %TRUE if the message was correctly parsed, %FALSE if @error is set.
 *
 * Since: 1.4
 */
gboolean mbim_message_sms_read_notification_parse (
    const MbimMessage *message,
    MbimSmsFormat *out_format,
    guint32 *out_messages_count,
    MbimSmsPduReadRecordArray **out_pdu_messages,
    MbimSmsCdmaReadRecordArray **out_cdma_messages,
    GError **error);

/*****************************************************************************/
/* Message (Set): MBIM Message SMS Send */

/**
 * mbim_message_sms_send_set_new:
 * @format: (in): the 'Format' field, given as a #MbimSmsFormat.
 * @pdu_message: (in): the 'PduMessage' field, given as a #MbimSmsPduSendRecord.
 * @cdma_message: (in): the 'CdmaMessage' field, given as a #MbimSmsCdmaSendRecord.
 * @error: return location for error or %NULL.
 *
 * Create a new request for the 'Send' set command in the 'SMS' service.
 *
 * Returns: a newly allocated #MbimMessage, which should be freed with mbim_message_unref().
 *
 * Since: 1.4
 */
MbimMessage *mbim_message_sms_send_set_new (
    MbimSmsFormat format,
    const MbimSmsPduSendRecord *pdu_message,
    const MbimSmsCdmaSendRecord *cdma_message,
    GError **error);

/*****************************************************************************/
/* Message (Response): MBIM Message SMS Send */

/**
 * mbim_message_sms_send_response_parse:
 * @message: the #MbimMessage.
 * @out_message_reference: (out)(optional)(transfer none): return location for a #guint32, or %NULL if the 'MessageReference' field is not needed.
 * @error: return location for error or %NULL.
 *
 * Parses and returns parameters of the 'Send' response command in the 'SMS' service.
 *
 * Returns: %TRUE if the message was correctly parsed, %FALSE if @error is set.
 *
 * Since: 1.4
 */
gboolean mbim_message_sms_send_response_parse (
    const MbimMessage *message,
    guint32 *out_message_reference,
    GError **error);

/*****************************************************************************/
/* Message (Set): MBIM Message SMS Delete */

/**
 * mbim_message_sms_delete_set_new:
 * @flag: (in): the 'Flag' field, given as a #MbimSmsFlag.
 * @message_index: (in): the 'MessageIndex' field, given as a #guint32.
 * @error: return location for error or %NULL.
 *
 * Create a new request for the 'Delete' set command in the 'SMS' service.
 *
 * Returns: a newly allocated #MbimMessage, which should be freed with mbim_message_unref().
 *
 * Since: 1.4
 */
MbimMessage *mbim_message_sms_delete_set_new (
    MbimSmsFlag flag,
    guint32 message_index,
    GError **error);

/*****************************************************************************/
/* Message (Response): MBIM Message SMS Delete */

/**
 * mbim_message_sms_delete_response_parse:
 * @message: the #MbimMessage.
 * @error: return location for error or %NULL.
 *
 * Parses and returns parameters of the 'Delete' response command in the 'SMS' service.
 *
 * Returns: %TRUE if the message was correctly parsed, %FALSE if @error is set.
 *
 * Since: 1.4
 */
gboolean mbim_message_sms_delete_response_parse (
    const MbimMessage *message,
    GError **error);

/*****************************************************************************/
/* Message (Query): MBIM Message SMS Message Store Status */

/**
 * mbim_message_sms_message_store_status_query_new:
 * @error: return location for error or %NULL.
 *
 * Create a new request for the 'Message Store Status' query command in the 'SMS' service.
 *
 * Returns: a newly allocated #MbimMessage, which should be freed with mbim_message_unref().
 *
 * Since: 1.4
 */
MbimMessage *mbim_message_sms_message_store_status_query_new (
    GError **error);

/*****************************************************************************/
/* Message (Response): MBIM Message SMS Message Store Status */

/**
 * mbim_message_sms_message_store_status_response_parse:
 * @message: the #MbimMessage.
 * @out_flag: (out)(optional)(transfer none): return location for a #MbimSmsStatusFlag, or %NULL if the 'Flag' field is not needed.
 * @out_message_index: (out)(optional)(transfer none): return location for a #guint32, or %NULL if the 'MessageIndex' field is not needed.
 * @error: return location for error or %NULL.
 *
 * Parses and returns parameters of the 'Message Store Status' response command in the 'SMS' service.
 *
 * Returns: %TRUE if the message was correctly parsed, %FALSE if @error is set.
 *
 * Since: 1.4
 */
gboolean mbim_message_sms_message_store_status_response_parse (
    const MbimMessage *message,
    MbimSmsStatusFlag *out_flag,
    guint32 *out_message_index,
    GError **error);

/*****************************************************************************/
/* Message (Notification): MBIM Message SMS Message Store Status */

/**
 * mbim_message_sms_message_store_status_notification_parse:
 * @message: the #MbimMessage.
 * @out_flag: (out)(optional)(transfer none): return location for a #MbimSmsStatusFlag, or %NULL if the 'Flag' field is not needed.
 * @out_message_index: (out)(optional)(transfer none): return location for a #guint32, or %NULL if the 'MessageIndex' field is not needed.
 * @error: return location for error or %NULL.
 *
 * Parses and returns parameters of the 'Message Store Status' notification command in the 'SMS' service.
 *
 * Returns: %TRUE if the message was correctly parsed, %FALSE if @error is set.
 *
 * Since: 1.4
 */
gboolean mbim_message_sms_message_store_status_notification_parse (
    const MbimMessage *message,
    MbimSmsStatusFlag *out_flag,
    guint32 *out_message_index,
    GError **error);

/*****************************************************************************/
/* Service helpers for printable fields */

#if defined (LIBMBIM_GLIB_COMPILATION)

G_GNUC_INTERNAL
gchar *
__mbim_message_sms_get_printable_fields (
    const MbimMessage *message,
    const gchar *line_prefix,
    GError **error);

#endif

G_END_DECLS

#endif /* __LIBMBIM_GLIB_MBIM_SMS__ */
