doubango/tinySMS/include/tinysms/tsms_address.h
c732d49e
 /*
74ca6d11
 * Copyright (C) 2020, University of the Basque Country (UPV/EHU)
c732d49e
 * Contact for licensing options: <licensing-mcpttclient(at)mcopenplatform(dot)com>
 *
 * The original file was part of Open Source Doubango Framework
 * Copyright (C) 2010-2011 Mamadou Diop.
 * Copyright (C) 2012 Doubango Telecom <http://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 */