Home | History | Annotate | Download | only in telephony
      1 /* Copyright (C) 2007-2008 The Android Open Source Project
      2 **
      3 ** This software is licensed under the terms of the GNU General Public
      4 ** License version 2, as published by the Free Software Foundation, and
      5 ** may be copied, distributed, and modified under those terms.
      6 **
      7 ** This program is distributed in the hope that it will be useful,
      8 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
      9 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     10 ** GNU General Public License for more details.
     11 */
     12 #ifndef _android_sms_h
     13 #define _android_sms_h
     14 
     15 #include <time.h>
     16 
     17 /** MESSAGE TEXT
     18  **/
     19 /* convert a quoted message text into a utf8 string. Note: you can use 'str' as the destination buffer
     20  * with the current implementation. always return the number of utf8 bytes corresponding to the original
     21  * message string, even if utf8 is NULL and utf8len is 0
     22  */
     23 extern int  sms_utf8_from_message_str( const char*  str, int  strlen, unsigned char*  utf8, int  utf8len );
     24 
     25 /* the equivalent in the opposite direction
     26  */
     27 extern int  sms_utf8_to_message_str( const unsigned char*  utf8, int  utf8len, char*  str, int  strlen );
     28 
     29 /** TIMESTAMPS
     30  **/
     31 
     32 /* An SMS timestamp structure */
     33 typedef struct {
     34     unsigned char  data[7];
     35 } SmsTimeStampRec, *SmsTimeStamp;
     36 
     37 extern void  sms_timestamp_now( SmsTimeStamp  stamp );
     38 extern int   sms_timestamp_to_tm( SmsTimeStamp  stamp, struct tm*  tm );
     39 
     40 /** SMS ADDRESSES
     41  **/
     42 
     43 #define  SMS_ADDRESS_MAX_SIZE  16
     44 
     45 typedef struct {
     46     unsigned char  len;
     47     unsigned char  toa;
     48     unsigned char  data[ SMS_ADDRESS_MAX_SIZE ];
     49 } SmsAddressRec, *SmsAddress;
     50 
     51 extern int  sms_address_from_str( SmsAddress  address, const char*  src, int  srclen );
     52 extern int  sms_address_to_str( SmsAddress  address, char*  src, int  srclen );
     53 
     54 extern int  sms_address_from_bytes( SmsAddress  address, const unsigned char*  buf, int  buflen );
     55 extern int  sms_address_to_bytes  ( SmsAddress  address, unsigned char*  buf, int  bufsize );
     56 extern int  sms_address_from_hex  ( SmsAddress  address, const char*  hex, int  hexlen );
     57 extern int  sms_address_to_hex    ( SmsAddress  address, char*   hex, int  hexsize );
     58 
     59 /** SMS PROTOCOL DATA UNITS
     60  **/
     61 
     62 typedef struct SmsPDURec*   SmsPDU;
     63 
     64 extern SmsPDU*  smspdu_create_deliver_utf8( const unsigned char*   utf8,
     65                                             int                    utf8len,
     66                                             const SmsAddressRec*   sender_address,
     67                                             const SmsTimeStampRec* timestamp );
     68 
     69 extern void     smspdu_free_list( SmsPDU*  pdus );
     70 
     71 extern SmsPDU   smspdu_create_from_hex( const char*  hex, int  hexlen );
     72 
     73 extern int      smspdu_to_hex( SmsPDU  pdu, char*  hex, int  hexsize );
     74 
     75 /* free a given SMS PDU */
     76 extern void     smspdu_free( SmsPDU  pdu );
     77 
     78 typedef enum {
     79     SMS_PDU_INVALID = 0,
     80     SMS_PDU_DELIVER,
     81     SMS_PDU_SUBMIT,
     82     SMS_PDU_STATUS_REPORT
     83 } SmsPduType;
     84 
     85 extern SmsPduType    smspdu_get_type( SmsPDU  pdu );
     86 
     87 /* retrieve the sender address of a SMS-DELIVER pdu, returns -1 otherwise */
     88 extern int  smspdu_get_sender_address( SmsPDU  pdu, SmsAddress  address );
     89 
     90 /* retrieve the service center timestamp of a SMS-DELIVER pdu, return -1 otherwise */
     91 extern int  smspdu_get_sc_timestamp( SmsPDU  pdu, SmsTimeStamp  timestamp );
     92 
     93 /* retrieve the receiver address of a SMS-SUBMIT pdu, return -1 otherwise */
     94 extern int  smspdu_get_receiver_address( SmsPDU  pdu, SmsAddress  address );
     95 
     96 extern int  smspdu_get_ref      ( SmsPDU  pdu );
     97 extern int  smspdu_get_max_index( SmsPDU  pdu );
     98 extern int  smspdu_get_cur_index( SmsPDU  pdu );
     99 
    100 /* get the message embedded in a SMS PDU as a utf8 byte array, returns the length of the message in bytes */
    101 /* or -1 in case of error */
    102 extern int  smspdu_get_text_message( SmsPDU  pdu, unsigned char*  utf8, int  utf8len );
    103 
    104 /** SMS SUBMIT RECEIVER
    105  ** collects one or more SMS-SUBMIT PDUs to generate a single message to deliver
    106  **/
    107 
    108 typedef struct SmsReceiverRec  *SmsReceiver;
    109 
    110 extern SmsReceiver   sms_receiver_create( void );
    111 extern void          sms_receiver_destroy( SmsReceiver  rec );
    112 
    113 extern int           sms_receiver_add_submit_pdu( SmsReceiver  rec, SmsPDU       submit_pdu );
    114 extern int           sms_receiver_get_text_message( SmsReceiver  rec, int  index, unsigned char*  utf8, int  utf8len );
    115 extern SmsPDU*       sms_receiver_create_deliver( SmsReceiver  rec, int  index, const SmsAddressRec*  from );
    116 
    117 #endif /* _android_sms_h */
    118