00001 /*! 00002 @class BlueConvert 00003 @brief Konvertiert 7bit GSM Zeichensaetze vom Telephon und zurueck. 00004 @author Thomas Gemperli, <bluephone@gemperli.net> 00005 @version 1.0 00006 @date 2004-08-03 00007 @par This program is free software; you can redistribute it and/or 00008 modify it under the terms of the GNU General Public License. 00009 @file blueconvert.h 00010 */ 00011 00012 00013 #ifndef BLUECONVERT_H 00014 #define BLUECONVERT_H 00015 00016 00017 #include <qstring.h> 00018 00019 00020 00021 /** 00022 * Diese Klasse dient der Umwandlung der 7Bit GSM Zeichensaetze vom Telephon zu PC Unicode und umgekehrt, 00023 * weiter der Umwandlung des "ERICSSON" Zeichensatzes zu PC Unicode und ebenfalls auch umgekehrt. 00024 * Sie stellt ebenfalls Methoden zur codierung oder decodierung eines SMS PUD zur Verfuegung. 00025 * Einige Methoden (v.a. die riesen Cases) dieser Klasse sind uebernommen von scmxx, 00026 * einer aelteren Suite von Terminalprogrammen fuer aeltere Simens Mobil Telephone. 00027 * scmxx wurde von Hendrik Sattler geschrieben und unter GPL veroeffentlicht. 00028 * Die Programme sowie deren Source sind unter http://www.hendrik-sattler.de/scmxx/ verfuegbar. 00029 * Die uebernommenen Methoden habe ich an meine Beduerfnisse angepasst. 00030 */ 00031 class BlueConvert{ 00032 00033 public: 00034 00035 /** 00036 * Erstellt ein BlueConvert Objekt. 00037 */ 00038 BlueConvert(); 00039 00040 00041 /** 00042 * Destruktor 00043 */ 00044 ~BlueConvert(); 00045 00046 00047 /** 00048 * Diese Methode konvertiert den GSM Zeichensatz in Unicode. 00049 * Wird benoetigt, um das Telephonbuch vom Telephon zu lesen. 00050 * Parameter: QString input 00051 * Rueckgabewert: QString UnicodeString 00052 */ 00053 QString convert_from_gsm (const QString& input); 00054 00055 00056 /** 00057 * Diese Methode konvertiert Unicode in den GSM Zeichensatz. 00058 * Wird benoetigt, um das Telephonbuch auf das Telephon zu schreiben. 00059 * Parameter: QString input 00060 * Rueckgabewert: QString GSMString 00061 */ 00062 QString convert_to_gsm (const QString& input); 00063 00064 00065 /** 00066 * Diese Methode konvertiert das GSM 7-Bit Hex PDU Format in Unicode. 00067 * Wird benoetigt, um SMS vom Telephon zu lesen. 00068 * Parameter: QString input 00069 * Rueckgabewert: QString decodedMessage 00070 */ 00071 QString decodeMessage(QString encodedMessage); 00072 00073 00074 /** 00075 * Diese Methode konvertiert Unicode in das GSM 7-Bit Hex PDU Format. 00076 * Wird benoetigt, um SMS auf das Telephon zu schreiben rsp. zu versenden. 00077 * Parameter: QString input, int Length 00078 * Rueckgabewert: QString encodedMessage 00079 */ 00080 QString encodeMessage(QString decodedMessage, int longMessage); 00081 00082 00083 /** 00084 * Diese Methode extrahiert die einzelnen Daten aus dem PDU Format. 00085 * Ist v.a. String Akrobatik. Eine gute Erklaerung zum Thema befindet sich da: 00086 * http://www.nobbi.com/sms_pdu.htm 00087 * Parameter: QString input, int Length 00088 */ 00089 void extractPduData(QString PDU); 00090 00091 00092 /** 00093 * Diese Methode erstellt einen PDU Datenblock. 00094 * Ist v.a. String Akrobatik. Eine gute Erklaerung zum Thema befindet sich da: 00095 * http://www.nobbi.com/sms_pdu.htm 00096 * Parameter: QString recipient, QString message, int index, int id 00097 */ 00098 void createPduData(QString recipient, QString message, int index, int id); 00099 00100 00101 /** 00102 * Diese Methode swappt Bits. 00103 * Einige Daten (z.B. smsc Nummer) in einer PDU sind BCD codiert. 00104 * Parameter: QString toSwap 00105 * Rueckgabewert: QString swapped 00106 */ 00107 QString decodeBCD(QString toSwap); 00108 00109 00110 /** 00111 * Diese Methode liefert den decodierten Sender einer SMS zurueck. 00112 * Rueckgabewert: QString m_sender 00113 */ 00114 QString getSender(); 00115 00116 00117 /** 00118 * Diese Methode liefert das decodierte Datum einer SMS zurueck. 00119 * Rueckgabewert: QString m_date 00120 */ 00121 QString getDate(); 00122 00123 00124 /** 00125 * Diese Methode liefert die decodierte Nachricht einer SMS zurueck. 00126 * Rueckgabewert: QString m_message 00127 */ 00128 QString getMessage(); 00129 00130 00131 /** 00132 * Diese Methode liefert eine encodierte PDU zurueck. 00133 * Rueckgabewert: QString m_PDU 00134 */ 00135 QString getPdu(); 00136 00137 00138 00139 private: 00140 00141 /** Enthaelt die PDU Daten (GSM 7-Bit Hex) als QString. 00142 * Ein PDU Block sieht z.B. folgendermassen aus: 00143 * 079194712272303325000C9194711232547600000BD4F29C4E2FE3E9BA4D19 00144 * Siehe auch den Kommentar zu extractPduData. 00145 */ 00146 QString m_PDU; 00147 00148 /** Enthaelt die Absendernummer der Nachricht. */ 00149 QString m_sender; 00150 00151 /** Enthaelt die eigentliche Nachricht. */ 00152 QString m_message; 00153 00154 /** Enthaelt das Empfangsdatum der Nachricht. */ 00155 QString m_date; 00156 00157 /** Enthaelt die aktuelle Position der Verarbeitung im PDU. */ 00158 int m_posInPdu; 00159 00160 /** Enthaelt den Typ der SMSC-Adresse. */ 00161 int m_smscType; 00162 00163 /** Enthaelt die Länge der SMSC-Adresse. */ 00164 int m_smscLen; 00165 00166 /** Enthaelt die Länge der Absendernummer. */ 00167 int m_senderLength; 00168 00169 /** Enthaelt den Typ der Absendernummer. */ 00170 QString m_senderType; 00171 00172 /** Enthaelt die Laenge des User Data Headers. */ 00173 int m_udhLength; 00174 00175 /** Enthaelt Informationen zum Reply Header. */ 00176 int m_rp; 00177 00178 /** Enthaelt die Laenge des Reply Headers. */ 00179 int m_rplength; 00180 00181 /** Hilfsvariable. */ 00182 int m_ie[8]; 00183 00184 /** Enthaelt die Länge der eigentlichen Nachricht. */ 00185 int m_messageLength; 00186 00187 00188 /** Enthaelt den BCD swap String. */ 00189 QString m_swapped; 00190 00191 00192 /** Enthaelt die Empfaengernummer einer Nachricht. */ 00193 QString m_recipient; 00194 00195 /** Der Index auf dem Telephon einer Nachricht. */ 00196 int m_index; 00197 00198 /** Die ID einer Nachricht. */ 00199 int m_id; 00200 00201 /** Falls eine ueberlange Nachricht gesendet wird, enthaelt diese Variable die Ueberlaenge. */ 00202 int m_longMessage; 00203 00204 /** Enthaelt den Typ der Empfaengernummer (National/International). Default ist 85 (National). */ 00205 QString m_recipientType; 00206 00207 /** Enthaelt die Laenge der Empfaengernummer. */ 00208 int m_recipientLength; 00209 00210 /** Enthaelt die Laenge der Empfaengernummer in Hex. */ 00211 QString m_recipientLengthHex; 00212 00213 /** Enthaelt die Laenge des Restes (>160) einer Nachricht bei einer ueberlangen Nachricht. */ 00214 QString m_carryoverLength; 00215 00216 /** Enthaelt die eigentliche Nachricht m PDU Format. */ 00217 QString m_encodedMessage; 00218 00219 00220 }; 00221 00222 00223 #endif 00224 00225
1.3.7