Author: flynd
Date: Tue Oct 19 04:38:54 2010
New Revision: 7936
Log:
Converted parts of RMS plugin to use strings instead of char pointers.
Modified:
trunk/rms/src/rms.cpp
trunk/rms/src/rms.h
Modified: trunk/rms/src/rms.cpp
==============================================================================
--- trunk/rms/src/rms.cpp (original)
+++ trunk/rms/src/rms.cpp Tue Oct 19 04:38:54 2010
@@ -24,6 +24,7 @@
#include <climits>
#include <cstdio>
#include <cstring>
+#include <sstream>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
@@ -548,7 +549,7 @@
/*---------------------------------------------------------------------------
* CRMSClient::GetProtocol
*-------------------------------------------------------------------------*/
-unsigned long CRMSClient::GetProtocol(const char *szData)
+unsigned long CRMSClient::getProtocol(const string& data)
{
unsigned long nPPID = 0;
@@ -556,7 +557,7 @@
gPluginManager.getProtocolPluginsList(plugins);
BOOST_FOREACH(Licq::ProtocolPlugin::Ptr plugin, plugins)
{
- if (strcasecmp(plugin->getName(), szData) == 0)
+ if (strcasecmp(plugin->getName(), data.c_str()) == 0)
{
nPPID = plugin->getProtocolId();
break;
@@ -569,10 +570,9 @@
/*---------------------------------------------------------------------------
* CRMSClient::ParseUser
*-------------------------------------------------------------------------*/
-void CRMSClient::ParseUser(const char *szData)
+void CRMSClient::ParseUser(const string& strData)
{
myUserId = UserId();
- string strData(szData);
string::size_type nPos= strData.find_last_of(".");
if (nPos == string::npos)
{
@@ -589,7 +589,7 @@
{
string strId(strData, 0, strData.find_last_of("."));
string strProtocol(strData, strData.find_last_of(".")+1, strData.size());
- myUserId = UserId(strId, GetProtocol(strProtocol.c_str()));
+ myUserId = UserId(strId, getProtocol(strProtocol));
}
}
@@ -784,7 +784,8 @@
{
if (data_line[0] == '.' && data_line[1] == '\0') return true;
- m_nTextPos += sprintf(&m_szText[m_nTextPos], "%s\n", data_line);
+ myText += data_line;
+ myText += "\n";
return false;
}
@@ -822,13 +823,11 @@
{
char *szId = strdup(data_arg);
NEXT_WORD(data_arg);
- unsigned long nPPID = GetProtocol(data_arg);
+ unsigned long nPPID = getProtocol(data_arg);
UserId userId = UserId(szId, nPPID);
//XXX Handle the case when we have the owner
- if (szId == 0)
- m_nUin = strtoul(gUserManager.ownerUserId(LICQ_PPID).accountId().c_str(), (char**)NULL, 10);
// Print the user info
Licq::UserReadGuard u(userId);
@@ -903,7 +902,7 @@
{
string strStatus(strData, 0, strData.find_last_of("."));
string strProtocol(strData, strData.find_last_of(".")+1, strData.size());
- unsigned long nPPID = GetProtocol(strProtocol.c_str());
+ unsigned long nPPID = getProtocol(strProtocol);
char *szStatus = strdup(strStatus.c_str());
changeStatus(nPPID, szStatus);
free(szStatus);
@@ -1176,8 +1175,7 @@
ParseUser(data_arg);
- m_szText[0] = '\0';
- m_nTextPos = 0;
+ myText.clear();
m_nState = STATE_ENTERxMESSAGE;
return fflush(fs);
@@ -1186,8 +1184,8 @@
int CRMSClient::Process_MESSAGE_text()
{
//XXX Give a tag...
- m_szText[strlen(m_szText) - 1] = '\0';
- unsigned long tag = gProtocolManager.sendMessage(myUserId, m_szText,
+ myText.erase(myText.size() - 1);
+ unsigned long tag = gProtocolManager.sendMessage(myUserId, myText,
true, ICQ_TCPxMSG_NORMAL);
fprintf(fs, "%d [%ld] Sending message to %s.\n", CODE_COMMANDxSTART,
@@ -1222,8 +1220,8 @@
int CRMSClient::Process_URL()
{
ParseUser(data_arg);
-
- m_nTextPos = 0;
+
+ myText.clear();
m_nState = STATE_ENTERxURL;
return fflush(fs);
@@ -1232,13 +1230,12 @@
int CRMSClient::Process_URL_url()
{
- strcpy(m_szLine, data_line);
+ myLine = data_line;
fprintf(fs, "%d Enter description, terminate with a . on a line by itself:\n",
CODE_ENTERxTEXT);
- m_szText[0] = '\0';
- m_nTextPos = 0;
+ myText.clear();
m_nState = STATE_ENTERxURLxDESCRIPTION;
return fflush(fs);
@@ -1247,8 +1244,8 @@
int CRMSClient::Process_URL_text()
{
- unsigned long tag = gProtocolManager.sendUrl(myUserId, m_szLine,
- m_szText, true, ICQ_TCPxMSG_NORMAL);
+ unsigned long tag = gProtocolManager.sendUrl(myUserId, myLine,
+ myText, true, ICQ_TCPxMSG_NORMAL);
fprintf(fs, "%d [%ld] Sending URL to %s.\n", CODE_COMMANDxSTART,
tag, myUserId.toString().c_str());
@@ -1290,7 +1287,7 @@
fprintf(fs, "%d Enter NUMBER:\n", CODE_ENTERxLINE);
m_nUin = nUin;
- m_nTextPos = 0;
+ myText.clear();
m_nState = STATE_ENTERxSMSxNUMBER;
return fflush(fs);
@@ -1299,13 +1296,12 @@
int CRMSClient::Process_SMS_number()
{
- strcpy(m_szLine, data_line);
+ myLine = data_line;
fprintf(fs, "%d Enter message, terminate with a . on a line by itself:\n",
CODE_ENTERxTEXT);
- m_szText[0] = '\0';
- m_nTextPos = 0;
+ myText.clear();
m_nState = STATE_ENTERxSMSxMESSAGE;
return fflush(fs);
@@ -1317,10 +1313,10 @@
char id[16];
snprintf(id, 16, "%lu", m_nUin);
Licq::UserId userId(id, LICQ_PPID);
- unsigned long tag = gLicqDaemon->icqSendSms(userId, m_szLine, m_szText);
+ unsigned long tag = gLicqDaemon->icqSendSms(userId, myLine, myText);
fprintf(fs, "%d [%lu] Sending SMS to %lu (%s).\n", CODE_COMMANDxSTART,
- tag, m_nUin, m_szLine);
+ tag, m_nUin, myLine.c_str());
tags.push_back(tag);
m_nState = STATE_COMMAND;
@@ -1354,8 +1350,7 @@
fprintf(fs, "%d Enter %sauto response, terminate with a . on a line by itself:\n",
CODE_ENTERxTEXT, myUserId.isValid() ? "custom " : "");
- m_szText[0] = '\0';
- m_nTextPos = 0;
+ myText.clear();
m_nState = STATE_ENTERxAUTOxRESPONSE;
return fflush(fs);
@@ -1367,13 +1362,13 @@
{
Licq::OwnerWriteGuard o(LICQ_PPID);
if (o.isLocked())
- o->setAutoResponse(m_szText);
+ o->setAutoResponse(myText);
}
else
{
Licq::UserWriteGuard u(myUserId);
if (u.isLocked())
- u->setCustomAutoResponse(m_szText);
+ u->setCustomAutoResponse(myText);
}
fprintf(fs, "%d Auto response saved.\n", CODE_RESULTxSUCCESS);
@@ -1490,59 +1485,53 @@
void CRMSClient::printUserEvent(const Licq::UserEvent* e, const string& alias)
{
- if (e)
- {
- char szEventHeader[75]; // Allows 50 chars for a nick
- switch (e->SubCommand())
- {
- case ICQ_CMDxSUB_MSG:
- sprintf(szEventHeader, "%d Message ", CODE_VIEWxMSG);
- break;
-
- case ICQ_CMDxSUB_URL:
- sprintf(szEventHeader, "%d URL ", CODE_VIEWxURL);
- break;
-
- case ICQ_CMDxSUB_CHAT:
- sprintf(szEventHeader, "%d Chat Request ", CODE_VIEWxCHAT);
- break;
-
- case ICQ_CMDxSUB_FILE:
- sprintf(szEventHeader, "%d File Request ", CODE_VIEWxFILE);
- break;
-
- default:
- sprintf(szEventHeader, "%d Unknown Event ", CODE_VIEWxUNKNOWN);
- }
-
- strcat(szEventHeader, "from ");
- strncat(szEventHeader, alias.c_str(), 50);
- strcat(szEventHeader, "\n\0");
-
- // Write out the event header
- fprintf(fs, szEventHeader);
-
- // Timestamp
- char szTimestamp[39];
- char szTime[25];
- time_t nMessageTime = e->Time();
- struct tm *pTM = localtime(&nMessageTime);
- strftime(szTime, 25, "%Y-%m-%d %H:%M:%S", pTM);
- sprintf(szTimestamp, "%d Sent At ", CODE_VIEWxTIME);
- strncat(szTimestamp, szTime, 25);
- strcat(szTimestamp, "\n\0");
- fprintf(fs, szTimestamp);
-
- // Message
- fprintf(fs, "%d Message Start\n", CODE_VIEWxTEXTxSTART);
- fprintf(fs, "%s", e->text().c_str());
- fprintf(fs, "\n");
- fprintf(fs, "%d Message Complete\n", CODE_VIEWxTEXTxEND);
- }
- else
+ if (e == NULL)
{
fprintf(fs, "%d Invalid event\n", CODE_EVENTxERROR);
- }
+ return;
+ }
+
+ std::ostringstream eventHeader;
+ switch (e->SubCommand())
+ {
+ case ICQ_CMDxSUB_MSG:
+ eventHeader << CODE_VIEWxMSG << " Message";
+ break;
+
+ case ICQ_CMDxSUB_URL:
+ eventHeader << CODE_VIEWxURL << " URL";
+ break;
+
+ case ICQ_CMDxSUB_CHAT:
+ eventHeader << CODE_VIEWxCHAT << " Chat Request";
+ break;
+
+ case ICQ_CMDxSUB_FILE:
+ eventHeader << CODE_VIEWxFILE << " File Request";
+ break;
+
+ default:
+ eventHeader << CODE_VIEWxUNKNOWN << " Unknown Event";
+ }
+
+ eventHeader << " from ";
+ eventHeader << alias;
+ eventHeader << "\n";
+
+ // Write out the event header
+ fputs(eventHeader.str().c_str(), fs);
+
+ // Timestamp
+ char szTime[25];
+ time_t nMessageTime = e->Time();
+ struct tm* pTM = localtime(&nMessageTime);
+ strftime(szTime, 25, "%Y-%m-%d %H:%M:%S", pTM);
+ fprintf(fs, "%d Sent At %s\n", CODE_VIEWxTIME, szTime);
+
+ // Message
+ fprintf(fs, "%d Message Start\n", CODE_VIEWxTEXTxSTART);
+ fputs(e->text().c_str(), fs);
+ fprintf(fs, "\n%d Message Complete\n", CODE_VIEWxTEXTxEND);
}
/*---------------------------------------------------------------------------
@@ -1558,7 +1547,7 @@
{
char *szId = strdup(data_arg);
NEXT_WORD(data_arg);
- unsigned long nPPID = GetProtocol(data_arg);
+ unsigned long nPPID = getProtocol(data_arg);
UserId userId(szId, nPPID);
if (gUserManager.addUser(userId) != 0)
Modified: trunk/rms/src/rms.h
==============================================================================
--- trunk/rms/src/rms.h (original)
+++ trunk/rms/src/rms.h Tue Oct 19 04:38:54 2010
@@ -118,16 +118,15 @@
unsigned long m_nUin;
Licq::UserId myUserId;
- char m_szText[MAX_TEXT_LENGTH + 1];
- char m_szLine[MAX_LINE_LENGTH + 1];
- unsigned short m_nTextPos;
+ std::string myText;
+ std::string myLine;
int StateMachine();
int ProcessCommand();
bool ProcessEvent(Licq::Event* e);
bool AddLineToText();
- unsigned long GetProtocol(const char *);
- void ParseUser(const char *);
+ unsigned long getProtocol(const std::string& data);
+ void ParseUser(const std::string& data);
int changeStatus(unsigned long, const char *);
int Process_MESSAGE_text();
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.