summaryrefslogtreecommitdiff
path: root/src/mm-base-sms.h
blob: be8d559cce6db2fff578b93565b188a8c0a74337 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* -*- 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:
 *
 * Author: Aleksander Morgado <aleksander@lanedo.com>
 *
 * Copyright (C) 2012 Google, Inc.
 */

#ifndef MM_BASE_SMS_H
#define MM_BASE_SMS_H

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

#define _LIBMM_INSIDE_MM
#include <libmm-glib.h>

#include "mm-sms-part.h"
#include "mm-base-modem.h"

/*****************************************************************************/

/* Default timeout value to be used when sending a SMS, long enough so that the
 * operation succeeds or fails under low signal conditions. */
#define MM_BASE_SMS_DEFAULT_SEND_TIMEOUT (5 * 60)

/*****************************************************************************/

#define MM_TYPE_BASE_SMS            (mm_base_sms_get_type ())
#define MM_BASE_SMS(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_BASE_SMS, MMBaseSms))
#define MM_BASE_SMS_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  MM_TYPE_BASE_SMS, MMBaseSmsClass))
#define MM_IS_BASE_SMS(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_BASE_SMS))
#define MM_IS_BASE_SMS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  MM_TYPE_BASE_SMS))
#define MM_BASE_SMS_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  MM_TYPE_BASE_SMS, MMBaseSmsClass))

typedef struct _MMBaseSms MMBaseSms;
typedef struct _MMBaseSmsClass MMBaseSmsClass;
typedef struct _MMBaseSmsPrivate MMBaseSmsPrivate;

#define MM_BASE_SMS_PATH                "sms-path"
#define MM_BASE_SMS_CONNECTION          "sms-connection"
#define MM_BASE_SMS_MODEM               "sms-modem"
#define MM_BASE_SMS_IS_MULTIPART        "sms-is-multipart"
#define MM_BASE_SMS_MAX_PARTS           "sms-max-parts"
#define MM_BASE_SMS_MULTIPART_REFERENCE "sms-multipart-reference"

struct _MMBaseSms {
    MmGdbusSmsSkeleton parent;
    MMBaseSmsPrivate *priv;
};

struct _MMBaseSmsClass {
    MmGdbusSmsSkeletonClass parent;

    /* Store the SMS */
    void (* store) (MMBaseSms *self,
                    MMSmsStorage storage,
                    GAsyncReadyCallback callback,
                    gpointer user_data);
    gboolean (* store_finish) (MMBaseSms *self,
                               GAsyncResult *res,
                               GError **error);

    /* Send the SMS */
    void (* send) (MMBaseSms *self,
                   GAsyncReadyCallback callback,
                   gpointer user_data);
    gboolean (* send_finish) (MMBaseSms *self,
                              GAsyncResult *res,
                              GError **error);

    /* Delete the SMS */
    void (* delete) (MMBaseSms *self,
                     GAsyncReadyCallback callback,
                     gpointer user_data);
    gboolean (* delete_finish) (MMBaseSms *self,
                                GAsyncResult *res,
                                GError **error);
};

GType mm_base_sms_get_type (void);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMBaseSms, g_object_unref)

/* This one can be overridden by plugins */
MMBaseSms *mm_base_sms_new                 (MMBaseModem *modem);
MMBaseSms *mm_base_sms_new_from_properties (MMBaseModem *modem,
                                            MMSmsProperties *properties,
                                            GError **error);
MMBaseSms *mm_base_sms_singlepart_new      (MMBaseModem *modem,
                                            MMSmsState state,
                                            MMSmsStorage storage,
                                            MMSmsPart *part,
                                            GError **error);
MMBaseSms *mm_base_sms_multipart_new       (MMBaseModem *modem,
                                            MMSmsState state,
                                            MMSmsStorage storage,
                                            guint reference,
                                            guint max_parts,
                                            MMSmsPart *first_part,
                                            GError **error);
gboolean   mm_base_sms_multipart_take_part (MMBaseSms *self,
                                            MMSmsPart *part,
                                            GError **error);

void          mm_base_sms_export      (MMBaseSms *self);
void          mm_base_sms_unexport    (MMBaseSms *self);
const gchar  *mm_base_sms_get_path    (MMBaseSms *self);
MMSmsStorage  mm_base_sms_get_storage (MMBaseSms *self);

gboolean     mm_base_sms_has_part_index (MMBaseSms *self,
                                         guint index);
GList       *mm_base_sms_get_parts      (MMBaseSms *self);

gboolean     mm_base_sms_is_multipart            (MMBaseSms *self);
guint        mm_base_sms_get_multipart_reference (MMBaseSms *self);
gboolean     mm_base_sms_multipart_is_complete   (MMBaseSms *self);
gboolean     mm_base_sms_multipart_is_assembled  (MMBaseSms *self);

void     mm_base_sms_delete        (MMBaseSms *self,
                                    GAsyncReadyCallback callback,
                                    gpointer user_data);
gboolean mm_base_sms_delete_finish (MMBaseSms *self,
                                    GAsyncResult *res,
                                    GError **error);

#endif /* MM_BASE_SMS_H */