18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Copyright (C) 2007-2008 The Android Open Source Project 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This software is licensed under the terms of the GNU General Public 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** License version 2, as published by the Free Software Foundation, and 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** may be copied, distributed, and modified under those terms. 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** 78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This program is distributed in the hope that it will be useful, 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** but WITHOUT ANY WARRANTY; without even the implied warranty of 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** GNU General Public License for more details. 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project*/ 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef _android_sms_h 138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define _android_sms_h 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <time.h> 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** MESSAGE TEXT 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a quoted message text into a utf8 string. Note: you can use 'str' as the destination buffer 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * with the current implementation. always return the number of utf8 bytes corresponding to the original 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * message string, even if utf8 is NULL and utf8len is 0 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sms_utf8_from_message_str( const char* str, int strlen, unsigned char* utf8, int utf8len ); 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* the equivalent in the opposite direction 268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sms_utf8_to_message_str( const unsigned char* utf8, int utf8len, char* str, int strlen ); 288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** TIMESTAMPS 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* An SMS timestamp structure */ 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct { 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project unsigned char data[7]; 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SmsTimeStampRec, *SmsTimeStamp; 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void sms_timestamp_now( SmsTimeStamp stamp ); 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sms_timestamp_to_tm( SmsTimeStamp stamp, struct tm* tm ); 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** SMS ADDRESSES 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SMS_ADDRESS_MAX_SIZE 16 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct { 468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project unsigned char len; 478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project unsigned char toa; 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project unsigned char data[ SMS_ADDRESS_MAX_SIZE ]; 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SmsAddressRec, *SmsAddress; 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sms_address_from_str( SmsAddress address, const char* src, int srclen ); 528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sms_address_to_str( SmsAddress address, char* src, int srclen ); 538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sms_address_from_bytes( SmsAddress address, const unsigned char* buf, int buflen ); 558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sms_address_to_bytes ( SmsAddress address, unsigned char* buf, int bufsize ); 568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sms_address_from_hex ( SmsAddress address, const char* hex, int hexlen ); 578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sms_address_to_hex ( SmsAddress address, char* hex, int hexsize ); 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** SMS PROTOCOL DATA UNITS 608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SmsPDURec* SmsPDU; 638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SmsPDU* smspdu_create_deliver_utf8( const unsigned char* utf8, 658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int utf8len, 668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const SmsAddressRec* sender_address, 678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const SmsTimeStampRec* timestamp ); 688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void smspdu_free_list( SmsPDU* pdus ); 708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SmsPDU smspdu_create_from_hex( const char* hex, int hexlen ); 728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int smspdu_to_hex( SmsPDU pdu, char* hex, int hexsize ); 748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* free a given SMS PDU */ 768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void smspdu_free( SmsPDU pdu ); 778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef enum { 798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SMS_PDU_INVALID = 0, 808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SMS_PDU_DELIVER, 818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SMS_PDU_SUBMIT, 828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SMS_PDU_STATUS_REPORT 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} SmsPduType; 848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SmsPduType smspdu_get_type( SmsPDU pdu ); 868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* retrieve the sender address of a SMS-DELIVER pdu, returns -1 otherwise */ 888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int smspdu_get_sender_address( SmsPDU pdu, SmsAddress address ); 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* retrieve the service center timestamp of a SMS-DELIVER pdu, return -1 otherwise */ 918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int smspdu_get_sc_timestamp( SmsPDU pdu, SmsTimeStamp timestamp ); 928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* retrieve the receiver address of a SMS-SUBMIT pdu, return -1 otherwise */ 948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int smspdu_get_receiver_address( SmsPDU pdu, SmsAddress address ); 958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int smspdu_get_ref ( SmsPDU pdu ); 978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int smspdu_get_max_index( SmsPDU pdu ); 988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int smspdu_get_cur_index( SmsPDU pdu ); 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* get the message embedded in a SMS PDU as a utf8 byte array, returns the length of the message in bytes */ 1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* or -1 in case of error */ 1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int smspdu_get_text_message( SmsPDU pdu, unsigned char* utf8, int utf8len ); 1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** SMS SUBMIT RECEIVER 1058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ** collects one or more SMS-SUBMIT PDUs to generate a single message to deliver 1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SmsReceiverRec *SmsReceiver; 1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SmsReceiver sms_receiver_create( void ); 1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void sms_receiver_destroy( SmsReceiver rec ); 1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sms_receiver_add_submit_pdu( SmsReceiver rec, SmsPDU submit_pdu ); 1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sms_receiver_get_text_message( SmsReceiver rec, int index, unsigned char* utf8, int utf8len ); 1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SmsPDU* sms_receiver_create_deliver( SmsReceiver rec, int index, const SmsAddressRec* from ); 1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* _android_sms_h */ 118