| /* 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 */ |