From: Sergey K. <se...@us...> - 2002-08-22 16:05:53
|
Update of /cvsroot/licq/licq/src In directory usw-pr-cvs1:/tmp/cvs-serv14092/licq/src Modified Files: message.cpp Log Message: More complete SMS support: - Proper handling of send sms acks. - Processing incoming sms (not heavily tested). - Introduced simple xml tags parsing function GetXmlTag. - "Phone" and "Chars left" fields in SendSMS window. - Cellular phone number in sms stored in the history. Index: message.cpp =================================================================== RCS file: /cvsroot/licq/licq/src/message.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- message.cpp 11 Aug 2002 00:50:20 -0000 1.12 +++ message.cpp 22 Aug 2002 16:05:49 -0000 1.13 @@ -12,6 +12,7 @@ #include "licq_user.h" #include "licq_translate.h" #include "licq_icqd.h" +#include "support.h" #ifdef USE_HEBREW extern "C" { @@ -198,6 +199,7 @@ void CEventFile::CreateDescription() { + if (m_szText) delete [] m_szText; m_szText = new char[strlen(m_szFilename) + strlen(m_szFileDescription) + 64]; sprintf(m_szText, "File: %s (%ld bytes)\nDescription:\n%s\n", m_szFilename, m_nFileSize, m_szFileDescription); @@ -238,6 +240,7 @@ void CEventUrl::CreateDescription() { + if (m_szText) delete [] m_szText; m_szText = new char[strlen(m_szUrl) + strlen(m_szUrlDescription) + 64]; sprintf(m_szText, "Url: %s\nDescription:\n%s\n", m_szUrl, m_szUrlDescription); } @@ -311,6 +314,7 @@ void CEventChat::CreateDescription() { + if (m_szText) delete [] m_szText; if (m_szClients == NULL) { m_szText = new char [strlen(m_szReason) + 1]; strcpy(m_szText, m_szReason); @@ -356,6 +360,7 @@ void CEventAdded::CreateDescription() { + if (m_szText) delete [] m_szText; m_szText = new char[strlen(m_szAlias) + strlen(m_szFirstName) + strlen(m_szLastName) + strlen(m_szEmail) + 512]; //sprintf(m_szText, "%s (%s %s, %s), uin %ld, added you to their contact list.\n", @@ -405,6 +410,7 @@ void CEventAuthRequest::CreateDescription() { + if (m_szText) delete [] m_szText; m_szText = new char[strlen(m_szAlias) + strlen(m_szFirstName) + strlen(m_szLastName) + strlen(m_szEmail) + strlen(m_szReason) + 256]; @@ -455,6 +461,7 @@ void CEventAuthGranted::CreateDescription() { + if (m_szText) delete [] m_szText; m_szText = new char[strlen(m_szMessage) + 128]; int pos = sprintf(m_szText, "User %ld authorized you", m_nUin); if (m_szMessage[0] != '\0') @@ -494,6 +501,7 @@ void CEventAuthRefused::CreateDescription() { + if (m_szText) delete [] m_szText; m_szText = new char[strlen(m_szMessage) + 128]; int pos = sprintf(m_szText, "User %ld refused to authorize you", m_nUin); if (m_szMessage[0] != '\0') @@ -534,6 +542,7 @@ void CEventWebPanel::CreateDescription() { + if (m_szText) delete [] m_szText; m_szText = new char[strlen(m_szName) + strlen(m_szEmail) + strlen(m_szMessage) + 64]; sprintf(m_szText, "Message from %s (%s) through web panel:\n%s\n", m_szName, m_szEmail, m_szMessage); @@ -574,6 +583,7 @@ void CEventEmailPager::CreateDescription() { + if (m_szText) delete [] m_szText; m_szText = new char[strlen(m_szName) + strlen(m_szEmail) + strlen(m_szMessage) + 64]; sprintf(m_szText, "Message from %s (%s) through email pager:\n%s\n", m_szName, m_szEmail, m_szMessage); @@ -615,6 +625,7 @@ void CEventContactList::CreateDescription() { + if (m_szText) delete [] m_szText; m_szText = new char [m_vszFields.size() * 32 + 128]; char *szEnd = m_szText; szEnd += sprintf(m_szText, "Contact list (%d contacts):\n", m_vszFields.size()); @@ -672,28 +683,34 @@ } //=====CEventSms=============================================================== -CEventSms::CEventSms(const char *_szMessage, unsigned short _nCommand, - time_t _tTime, unsigned long _nFlags) +CEventSms::CEventSms(const char *_szNumber, const char *_szMessage, + unsigned short _nCommand, time_t _tTime, unsigned long _nFlags) : CUserEvent(ICQ_CMDxSUB_SMS, _nCommand, 0, _tTime, _nFlags) { + m_szNumber = strdup(_szNumber == NULL ? "" : _szNumber); m_szMessage = strdup(_szMessage == NULL ? "" : _szMessage); } void CEventSms::CreateDescription() { - m_szText = new char[strlen(m_szMessage) + 1]; - strcpy(m_szText, m_szMessage); + if (m_szText) delete [] m_szText; + m_szText = new char[strlen(m_szNumber) + strlen(m_szMessage) + 32]; + sprintf(m_szText, "Phone: %s\n%s\n", m_szNumber, m_szMessage); } CEventSms::~CEventSms() { - free (m_szMessage); + free(m_szNumber); + free(m_szMessage); } void CEventSms::AddToHistory(ICQUser *u, direction _nDir) { - char *szOut = new char[ (strlen(m_szMessage) << 1) + EVENT_HEADER_SIZE]; + char *szOut = new char[ (strlen(m_szNumber) << 1) + + (strlen(m_szMessage) << 1) + + + EVENT_HEADER_SIZE]; int nPos = AddToHistory_Header(_nDir, szOut); + nPos += sprintf(&szOut[nPos], ":%s\n", m_szNumber); AddStrWithColons(&szOut[nPos], m_szMessage); AddToHistory_Flush(u, szOut); delete [] szOut; @@ -701,8 +718,21 @@ CEventSms *CEventSms::Parse(char *sz, unsigned short nCmd, time_t nTime, unsigned long nFlags) { - gTranslator.ServerToClient (sz); - return new CEventSms(sz, nCmd, nTime, nFlags); + char *szXmlSms, *szNum, *szTxt; + + szXmlSms = GetXmlTag(sz, "sms_message"); + if (szXmlSms == NULL) return NULL; + + szNum = GetXmlTag(szXmlSms, "sender"); + szTxt = GetXmlTag(szXmlSms, "text"); + + CEventSms *e = new CEventSms(szNum, szTxt, nCmd, nTime, nFlags); + + if (szNum) free(szNum); + if (szTxt) free(szTxt); + free(szXmlSms); + + return e; } @@ -727,6 +757,7 @@ void CEventServerMessage::CreateDescription() { + if (m_szText) delete [] m_szText; m_szText = new char[strlen(m_szName) + strlen(m_szEmail) + strlen(m_szMessage) + 64]; sprintf(m_szText, "System Server Message from %s (%s):\n%s\n", m_szName, m_szEmail, m_szMessage); @@ -772,6 +803,7 @@ void CEventPlugin::CreateDescription() { + if (m_szText) delete [] m_szText; m_szText = new char[strlen(m_sz) + 1]; strcpy(m_szText, m_sz); } @@ -801,6 +833,7 @@ void CEventUnknownSysMsg::CreateDescription() { + if (m_szText) delete [] m_szText; m_szText = new char [strlen(m_szMsg) + 128]; sprintf(m_szText, "Unknown system message (0x%04X) from %ld:\n%s\n", m_nSubCommand, m_nUin, m_szMsg); @@ -839,7 +872,7 @@ "Authorization Request", "AUthorization Refused", "Authorization Granted", - "", + "Server Message", "", "", "Added to Contact List", |