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