/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details: * * Copyright (C) 2011 - 2012 Red Hat, Inc. * Copyright (C) 2012 Google, Inc. */ #include #include #include #include #define _LIBMM_INSIDE_MM #include #include "mm-sms-part.h" #include "mm-charsets.h" #include "mm-log.h" struct _MMSmsPart { guint index; MMSmsPduType pdu_type; gchar *smsc; gchar *timestamp; gchar *discharge_timestamp; gchar *number; gchar *text; MMSmsEncoding encoding; GByteArray *data; gint class; guint validity_relative; gboolean delivery_report_request; guint message_reference; /* NOT a MMSmsDeliveryState, which just includes the known values */ guint delivery_state; gboolean should_concat; guint concat_reference; guint concat_max; guint concat_sequence; /* CDMA specific */ MMSmsCdmaTeleserviceId cdma_teleservice_id; MMSmsCdmaServiceCategory cdma_service_category; }; void mm_sms_part_free (MMSmsPart *self) { g_free (self->discharge_timestamp); g_free (self->timestamp); g_free (self->smsc); g_free (self->number); g_free (self->text); if (self->data) g_byte_array_unref (self->data); g_slice_free (MMSmsPart, self); } #define PART_GET_FUNC(type, name) \ type \ mm_sms_part_get_##name (MMSmsPart *self) \ { \ return self->name; \ } #define PART_SET_FUNC(type, name) \ void \ mm_sms_part_set_##name (MMSmsPart *self, \ type value) \ { \ self->name = value; \ } #define PART_SET_TAKE_STR_FUNC(name) \ void \ mm_sms_part_set_##name (MMSmsPart *self, \ const gchar *value) \ { \ g_free (self->name); \ self->name = g_strdup (value); \ } \ \ void \ mm_sms_part_take_##name (MMSmsPart *self, \ gchar *value) \ { \ g_free (self->name); \ self->name = value; \ } PART_GET_FUNC (guint, index) PART_SET_FUNC (guint, index) PART_GET_FUNC (MMSmsPduType, pdu_type) PART_SET_FUNC (MMSmsPduType, pdu_type) PART_GET_FUNC (const gchar *, smsc) PART_SET_TAKE_STR_FUNC (smsc) PART_GET_FUNC (const gchar *, number) PART_SET_TAKE_STR_FUNC (number) PART_GET_FUNC (const gchar *, timestamp) PART_SET_TAKE_STR_FUNC (timestamp) PART_GET_FUNC (const gchar *, discharge_timestamp) PART_SET_TAKE_STR_FUNC (discharge_timestamp) PART_GET_FUNC (guint, concat_max) PART_SET_FUNC (guint, concat_max) PART_GET_FUNC (guint, concat_sequence) PART_SET_FUNC (guint, concat_sequence) PART_GET_FUNC (const gchar *, text) PART_SET_TAKE_STR_FUNC (text) PART_GET_FUNC (MMSmsEncoding, encoding) PART_SET_FUNC (MMSmsEncoding, encoding) PART_GET_FUNC (gint, class) PART_SET_FUNC (gint, class) PART_GET_FUNC (guint, validity_relative) PART_SET_FUNC (guint, validity_relative) PART_GET_FUNC (gboolean, delivery_report_request) PART_SET_FUNC (gboolean, delivery_report_request) PART_GET_FUNC (guint, message_reference) PART_SET_FUNC (guint, message_reference) PART_GET_FUNC (guint, delivery_state) PART_SET_FUNC (guint, delivery_state) PART_GET_FUNC (guint, concat_reference) void mm_sms_part_set_concat_reference (MMSmsPart *self, guint value) { self->should_concat = TRUE; self->concat_reference = value; } PART_GET_FUNC (const GByteArray *, data) void mm_sms_part_set_data (MMSmsPart *self, GByteArray *value) { if (self->data) g_byte_array_unref (self->data); self->data = (value ? g_byte_array_ref (value) : NULL); } void mm_sms_part_take_data (MMSmsPart *self, GByteArray *value) { if (self->data) g_byte_array_unref (self->data); self->data = value; } gboolean mm_sms_part_should_concat (MMSmsPart *self) { return self->should_concat; } PART_GET_FUNC (MMSmsCdmaTeleserviceId, cdma_teleservice_id) PART_SET_FUNC (MMSmsCdmaTeleserviceId, cdma_teleservice_id) PART_GET_FUNC (MMSmsCdmaServiceCategory, cdma_service_category) PART_SET_FUNC (MMSmsCdmaServiceCategory, cdma_service_category) MMSmsPart * mm_sms_part_new (guint index, MMSmsPduType pdu_type) { MMSmsPart *sms_part; sms_part = g_slice_new0 (MMSmsPart); sms_part->index = index; sms_part->pdu_type = pdu_type; sms_part->encoding = MM_SMS_ENCODING_UNKNOWN; sms_part->delivery_state = MM_SMS_DELIVERY_STATE_UNKNOWN; sms_part->cdma_teleservice_id = MM_SMS_CDMA_TELESERVICE_ID_UNKNOWN; sms_part->cdma_service_category = MM_SMS_CDMA_SERVICE_CATEGORY_UNKNOWN; sms_part->class = -1; return sms_part; }