summaryrefslogtreecommitdiffstats
path: root/tinySMS/include/tinysms/tsms_address.h
blob: 0a74483d2bd112cdac0f8105ff56a320a1db373c (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
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou(at)doubango.org>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO 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 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO 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.
*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
*/

/**@file tsms_address.h
 * @brief SMS address encoder/decoder.
 *
 * @author Mamadou Diop <diopmamadou(at)doubango.org>
 *

 */
#ifndef TINYSMS_TSMS_ADDRESS_H
#define TINYSMS_TSMS_ADDRESS_H

#include "tinysms_config.h"

#include "tsk_buffer.h"

TSMS_BEGIN_DECLS

typedef uint8_t tsms_address_string_t[13]; /* 12 + (+) */

/** Address type
*/
typedef enum tsms_address_type_e {
    tsms_addr_oa,
    tsms_addr_da,
    tsms_addr_smsc,
}
tsms_address_type_t;

/** Type-of-number
* 3GPP TS 23.040 v910 section 9.1.2.5.
*/
typedef enum tsms_address_ton_e {
    /** "Unknown" is used when the user or network has no a priori information about the numbering plan. In
    	this case, the Address-Value field is organized according to the network dialling plan, e.g. prefix or
    	escape digits might be present.*/
    tsms_addr_ton_unknown			= 0x00, // 0b000
    /** International number
    	The international format shall be accepted also when the message is destined to a recipient in the
    	same country as the MSC. */
    tsms_addr_ton_international		= 0x01, // 0b001
    /** National number
    	Prefix or escape digits shall not be included */
    tsms_addr_ton_national			= 0x02, // 0b010
    /** "Network specific number" is used to indicate administration/service number specific to the serving
    	network, e.g. used to access an operator. */
    tsms_addr_ton_network_specific	= 0x03, // 0b011
    /** "Subscriber number" is used when a specific short number representation is stored in one or more
    	SCs as part of a higher layer application. (Note that "Subscriber number" shall only be used in
    	connection with the proper PID referring to this application). */
    tsms_addr_ton_subscriber		= 0x04, // 0b100
    /** Alphanumeric, (coded according to GSM TS 03.38 7-bit default alphabet) */
    tsms_addr_ton_alphanumeric		= 0x05, // 0b101
    /** Abbreviated number */
    tsms_addr_ton_abbreviated		= 0x06, // 0b110
    /** Reserved for extension */
    tsms_addr_ton_reserved			= 0x07, // 0b111
}
tsms_address_ton_t;

/** Numbering-Plan-Identification
* 3GPP TS 23.040 v910 section 9.1.2.5.
*/
typedef enum tsms_address_npi_e {
    /* 0000 */ tsms_addr_npi_unknown	= 0x00,	/**< Unknown */
    /* 0001 */ tsms_addr_npi_isdn		= 0x01, /**< ISDN/telephone numbering plan (E.164/E.163) */
    /* 0011 */ tsms_addr_npi_x121		= 0x03,	/**< Data numbering plan (X.121) */
    /* 0100 */ tsms_addr_npi_telex		= 0x04,	/**< Telex numbering plan */
    /* 1000 */ tsms_addr_npi_national	= 0x08,	/**< National numbering plan */
    /* 1001 */ tsms_addr_npi_private	= 0x09,	/**< Private numbering plan */
    /* 1010 */ tsms_addr_npi_ermes		= 0x0A,	/**< ERMES numbering plan (ETSI DE/PS 3 01-3) */
    /* 1111 */ tsms_addr_npi_reserved	= 0x0F,	/**< Reserved for extension */
}
tsms_address_npi_t;

/** Address
*/
typedef struct tsms_address_s {
    TSK_DECLARE_OBJECT;

    // Address Type
    tsms_address_ton_t ton; /**< Type-of-number */
    tsms_address_npi_t npi; /**< Numbering-Plan-Identification */

    tsms_address_type_t type;
    char* digits; /* BCD digits */
}
tsms_address_t;

int tsms_address_serialize(const tsms_address_t* address, tsk_buffer_t* output);
tsms_address_t* tsms_address_deserialize(const void* data, tsk_size_t size, tsms_address_type_t xtype, tsk_size_t *length);


tsms_address_t* tsms_address_create(const tsms_address_string_t digits, tsms_address_type_t type);
tsms_address_t* tsms_address_oa_create(const tsms_address_string_t digits);
tsms_address_t* tsms_address_da_create(const tsms_address_string_t digits);
tsms_address_t* tsms_address_smsc_create(const tsms_address_string_t digits);

TINYSMS_GEXTERN const tsk_object_def_t *tsms_address_def_t;

TSMS_END_DECLS

#endif /* TSMS_BEGIN_DECLS */
OpenPOWER on IntegriCloud