1 /* 2 3 G N O K I I 4 5 A Linux/Unix toolset and driver for the mobile phones. 6 7 This file is part of gnokii. 8 9 Gnokii is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 2 of the License, or 12 (at your option) any later version. 13 14 Gnokii is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with gnokii; if not, write to the Free Software 21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 22 23 Copyright (C) 1999-2000 Hugh Blemings, Pavel Janik 24 Copyright (C) 2000-2004 BORBELY Zoltan 25 Copyright (C) 2000-2011 Pawel Kot 26 Copyright (C) 2000 Marcin Wiacek, Chris Kemp 27 Copyright (C) 2002 Ladis Michl 28 Copyright (C) 2003 Osma Suominen, Martin Goldhahn 29 30 Internal API for libgnokii 31 32 */ 33 34 #ifndef _gnokii_internal_h 35 #define _gnokii_internal_h 36 37 #include "compat.h" 38 #include "misc.h" 39 40 #if !defined(GNOKII_DEPRECATED) 41 # define GNOKII_DEPRECATED /* do not warn about deprecated functions here */ 42 #endif 43 44 #include "gnokii.h" 45 46 #define return_on_error(func) \ 47 do { \ 48 gn_error error; \ 49 error = func; \ 50 if (error != GN_ERR_NONE) \ 51 return error; \ 52 } while (0) 53 54 /* SMS */ 55 gn_error gn_sms_parse(gn_data *data); 56 gn_error gn_sms_pdu2raw(gn_sms_raw *rawsms, unsigned char *pdu, int pdu_len, int flags); 57 gn_error gn_sms_request(gn_data *data, struct gn_statemachine *state); 58 gn_error sms_prepare(gn_sms *sms, gn_sms_raw *rawsms); 59 gn_timestamp *sms_timestamp_unpack(unsigned char *number, gn_timestamp *dt); 60 unsigned char *sms_timestamp_pack(gn_timestamp *dt, unsigned char *number); 61 62 /* Statemachine */ 63 gn_error sm_initialise(struct gn_statemachine *state); 64 gn_error sm_message_send(u16 messagesize, u8 messagetype, void *message, struct gn_statemachine *state); 65 gn_error sm_wait_for(unsigned char messagetype, gn_data *data, struct gn_statemachine *state); 66 void sm_incoming_function(u8 messagetype, void *message, u16 messagesize, struct gn_statemachine *state); 67 void sm_incoming_acknowledge(struct gn_statemachine *state); 68 void sm_reset(struct gn_statemachine *state); 69 gn_error sm_error_get(unsigned char messagetype, struct gn_statemachine *state); 70 gn_error sm_block_timeout(int waitfor, int t, gn_data *data, struct gn_statemachine *state); 71 gn_error sm_block(int waitfor, gn_data *data, struct gn_statemachine *state); 72 gn_error sm_block_no_retry_timeout(int waitfor, int t, gn_data *data, struct gn_statemachine *state); 73 gn_error sm_block_no_retry(int waitfor, gn_data *data, struct gn_statemachine *state); 74 gn_error sm_block_ack(struct gn_statemachine *state); 75 void sm_message_dump(gn_log_func_t lfunc, int messagetype, unsigned char *message, int length); 76 void sm_unhandled_frame_dump(int messagetype, unsigned char *message, int length, struct gn_statemachine *state); 77 78 extern void hex2bin(unsigned char *dest, const unsigned char *src, unsigned int len); 79 extern void bin2hex(unsigned char *dest, const unsigned char *src, unsigned int len); 80 81 int char_7bit_unpack(unsigned int offset, unsigned int in_length, unsigned int out_length, 82 unsigned char *input, unsigned char *output); 83 int char_7bit_pack(unsigned int offset, unsigned char *input, unsigned char *output, 84 unsigned int *in_len); 85 86 int char_mblen(const char *src); 87 88 unsigned int char_unicode_decode(unsigned char* dest, const unsigned char* src, int len); 89 unsigned int char_unicode_encode(unsigned char* dest, const unsigned char* src, int len); 90 91 int char_default_alphabet_decode(unsigned char* dest, const unsigned char* src, int len); 92 size_t char_ascii_encode(char *dest, size_t dest_len, const char *src, size_t len); 93 94 void char_hex_decode(unsigned char* dest, const unsigned char* src, int len); 95 size_t char_hex_encode(char *dest, size_t dest_len, const char *src, size_t len); 96 97 void char_ucs2_decode(unsigned char* dest, const unsigned char* src, int len); 98 size_t char_ucs2_encode(char *dest, size_t dest_len, const char *src, size_t len); 99 100 unsigned char char_def_alphabet_encode(unsigned int value); 101 unsigned int char_def_alphabet_decode(unsigned char value); 102 103 size_t char_uni_alphabet_encode(const char *value, size_t n, wchar_t *dest, MBSTATE *mbs); 104 int char_uni_alphabet_decode(wchar_t value, unsigned char *dest, MBSTATE *mbs); 105 106 extern char *char_bcd_number_get(u8 *number); 107 extern int char_semi_octet_pack(char *number, unsigned char *output, gn_gsm_number_type type); 108 109 int ucs2_encode(char *outstring, int outlen, const char *instring, int inlen); 110 111 int char_def_alphabet_ext_count(unsigned char *input, int length); 112 bool char_def_alphabet_ext(unsigned int value); 113 114 int char_def_alphabet_string_copy(char *dest, const char *src, int len, int offset); 115 gn_sms_dcs_alphabet_type char_def_alphabet_string_stats(char *str, int *enc_chars, int *ext_chars); 116 117 /* Ringtones */ 118 int vcal_time_get(gn_timestamp *dt, char *time); 119 int calnote_fill(gn_calnote *note, char *type, char *text, char *desc, 120 char *time, char *alarm); 121 int todo_fill(gn_todo *note, char *text, char *todo_priority); 122 123 /* Ringtone Files */ 124 gn_error file_rtttl_save(FILE *file, gn_ringtone *ringtone); 125 gn_error file_ott_save(FILE *file, gn_ringtone *ringtone); 126 gn_error file_midi_save(FILE *file, gn_ringtone *ringtone); 127 gn_error file_nokraw_save(FILE *file, gn_ringtone *ringtone, int dct4); 128 129 gn_error file_rtttl_load(FILE *file, gn_ringtone *ringtone); 130 gn_error file_ott_load(FILE *file, gn_ringtone *ringtone); 131 gn_error file_midi_load(FILE *file, gn_ringtone *ringtone); 132 gn_error file_nokraw_load(FILE *file, gn_ringtone *ringtone); 133 134 /* Bitmap Files */ 135 136 void file_nol_save(FILE *file, gn_bmp *bitmap, gn_phone *info); 137 void file_ngg_save(FILE *file, gn_bmp *bitmap, gn_phone *info); 138 void file_nsl_save(FILE *file, gn_bmp *bitmap, gn_phone *info); 139 void file_nlm_save(FILE *file, gn_bmp *bitmap); 140 void file_ota_save(FILE *file, gn_bmp *bitmap); 141 void file_bmp_save(FILE *file, gn_bmp *bitmap); 142 143 #ifdef XPM 144 void file_xpm_save(char *filename, gn_bmp *bitmap); 145 #endif 146 147 gn_error file_ngg_load(FILE *file, gn_bmp *bitmap, gn_phone *info); 148 gn_error file_nol_load(FILE *file, gn_bmp *bitmap, gn_phone *info); 149 gn_error file_nsl_load(FILE *file, gn_bmp *bitmap); 150 gn_error file_nlm_load(FILE *file, gn_bmp *bitmap); 151 gn_error file_ota_load(FILE *file, gn_bmp *bitmap, gn_phone *info); 152 gn_error file_bmp_load(FILE *file, gn_bmp *bitmap); 153 154 #ifdef XPM 155 gn_error file_xpm_load(char *filename, gn_bmp *bitmap); 156 #endif 157 158 int ringtone_sms_encode(unsigned char *message, gn_ringtone *ringtone); 159 int imelody_sms_encode(unsigned char *imelody, unsigned char *message); 160 gn_error phonebook_decode(unsigned char *blockstart, int length, 161 gn_data *data, int blocks, int memtype, int speeddial_pos); 162 gn_error calnote_decode(unsigned char *message, int length, gn_data *data); 163 gn_error calnote_get_alarm(int alarmdiff, gn_timestamp *time, gn_timestamp *alarm); 164 165 int sms_nokia_smart_message_part_pack(unsigned char *msg, unsigned int size, 166 unsigned int type, bool first); 167 int sms_nokia_text_encode(unsigned char *text, unsigned char *message, bool first); 168 int sms_nokia_bitmap_encode(gn_bmp *bitmap, unsigned char *message, bool first); 169 170 struct gn_cfg_header *cfg_file_read(const char *filename); 171 typedef void (*cfg_foreach_func)(const char *section, const char *key, const char *value); 172 void cfg_foreach(const char *section, cfg_foreach_func func); 173 char *cfg_set(struct gn_cfg_header *cfg, const char *section, const char *key, const char *value); 174 int cfg_file_write(struct gn_cfg_header *cfg, const char *filename); 175 /* Get some information about the given phone */ 176 gn_phone_model *gn_cfg_get_phone_model(struct gn_cfg_header *cfg, const char *product_name); 177 178 gn_error isdn_cause2gn_error(char **src, char **msg, unsigned char loc, unsigned char cause); 179 180 int utf8_decode(char *dest, size_t destlen, const char *src, size_t inlen); 181 int utf8_encode(char *dest, int destlen, const char *src, int inlen); 182 183 int string_base64(const char *instring); 184 int base64_decode(char *dest, int destlen, const char *src, int inlen); 185 int base64_encode(char *dest, int destlen, const char *src, int inlen); 186 187 int utf8_base64_decode(char *dest, int destlen, const char *src, int inlen); 188 int utf8_base64_encode(char *dest, int destlen, const char *src, int inlen); 189 190 int add_slashes(char *dest, char *src, int maxlen, int len); 191 int strip_slashes(char *dest, const char *src, int maxlen, int len); 192 193 #endif /* _gnokii_internal_h */ 194