/* Copyright (C) 2007-2008 The Android Open Source Project
**
** This software is licensed under the terms of the GNU General Public
** License version 2, as published by the Free Software Foundation, and
** may be copied, distributed, and modified under those terms.
**
** 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.
*/
#ifndef _android_sms_h
#define _android_sms_h
#include <time.h>
/** MESSAGE TEXT
**/
/* convert a quoted message text into a utf8 string. Note: you can use 'str' as the destination buffer
* with the current implementation. always return the number of utf8 bytes corresponding to the original
* message string, even if utf8 is NULL and utf8len is 0
*/
extern int sms_utf8_from_message_str( const char* str, int strlen, unsigned char* utf8, int utf8len );
/* the equivalent in the opposite direction
*/
extern int sms_utf8_to_message_str( const unsigned char* utf8, int utf8len, char* str, int strlen );
/** TIMESTAMPS
**/
/* An SMS timestamp structure */
typedef struct {
unsigned char data[7];
} SmsTimeStampRec, *SmsTimeStamp;
extern void sms_timestamp_now( SmsTimeStamp stamp );
extern int sms_timestamp_to_tm( SmsTimeStamp stamp, struct tm* tm );
/** SMS ADDRESSES
**/
#define SMS_ADDRESS_MAX_SIZE 16
typedef struct {
unsigned char len;
unsigned char toa;
unsigned char data[ SMS_ADDRESS_MAX_SIZE ];
} SmsAddressRec, *SmsAddress;
extern int sms_address_from_str( SmsAddress address, const char* src, int srclen );
extern int sms_address_to_str( SmsAddress address, char* src, int srclen );
extern int sms_address_from_bytes( SmsAddress address, const unsigned char* buf, int buflen );
extern int sms_address_to_bytes ( SmsAddress address, unsigned char* buf, int bufsize );
extern int sms_address_from_hex ( SmsAddress address, const char* hex, int hexlen );
extern int sms_address_to_hex ( SmsAddress address, char* hex, int hexsize );
/** SMS PROTOCOL DATA UNITS
**/
typedef struct SmsPDURec* SmsPDU;
extern SmsPDU* smspdu_create_deliver_utf8( const unsigned char* utf8,
int utf8len,
const SmsAddressRec* sender_address,
const SmsTimeStampRec* timestamp );
extern void smspdu_free_list( SmsPDU* pdus );
extern SmsPDU smspdu_create_from_hex( const char* hex, int hexlen );
extern int smspdu_to_hex( SmsPDU pdu, char* hex, int hexsize );
/* free a given SMS PDU */
extern void smspdu_free( SmsPDU pdu );
typedef enum {
SMS_PDU_INVALID = 0,
SMS_PDU_DELIVER,
SMS_PDU_SUBMIT,
SMS_PDU_STATUS_REPORT
} SmsPduType;
extern SmsPduType smspdu_get_type( SmsPDU pdu );
/* retrieve the sender address of a SMS-DELIVER pdu, returns -1 otherwise */
extern int smspdu_get_sender_address( SmsPDU pdu, SmsAddress address );
/* retrieve the service center timestamp of a SMS-DELIVER pdu, return -1 otherwise */
extern int smspdu_get_sc_timestamp( SmsPDU pdu, SmsTimeStamp timestamp );
/* retrieve the receiver address of a SMS-SUBMIT pdu, return -1 otherwise */
extern int smspdu_get_receiver_address( SmsPDU pdu, SmsAddress address );
extern int smspdu_get_ref ( SmsPDU pdu );
extern int smspdu_get_max_index( SmsPDU pdu );
extern int smspdu_get_cur_index( SmsPDU pdu );
/* get the message embedded in a SMS PDU as a utf8 byte array, returns the length of the message in bytes */
/* or -1 in case of error */
extern int smspdu_get_text_message( SmsPDU pdu, unsigned char* utf8, int utf8len );
/** SMS SUBMIT RECEIVER
** collects one or more SMS-SUBMIT PDUs to generate a single message to deliver
**/
typedef struct SmsReceiverRec *SmsReceiver;
extern SmsReceiver sms_receiver_create( void );
extern void sms_receiver_destroy( SmsReceiver rec );
extern int sms_receiver_add_submit_pdu( SmsReceiver rec, SmsPDU submit_pdu );
extern int sms_receiver_get_text_message( SmsReceiver rec, int index, unsigned char* utf8, int utf8len );
extern SmsPDU* sms_receiver_create_deliver( SmsReceiver rec, int index, const SmsAddressRec* from );
#endif /* _android_sms_h */