/* * Initialize from an incoming libPurple callback parameters * * payload form: (Sprint) * { "serviceName": "gmail", "username": "******", "usernameFrom": "*****@*****.**", "messageText": "<body>test reply to phone<\/body>" } * { "serviceName": "aol", "username": "******", "usernameFrom": "palm", "messageText": "test incoming message" } * * */ MojErr IMMessage::initFromCallback(const char* serviceName, const char* username, const char* usernameFrom, const char* message) { MojErr err; // unescape, strip html // #/tmp/testsanitize "<a>foo</a>" // sanitized: <a>foo</a> // unsanitized: <a>foo</a> // removed: foo // first unescape since gtalk sends everything escaped // message is const char* - need a char* version char *unescapedMessage = unsanitizeHtml((char*)message); // now remove offending html // char * sanitizeHtml(const char *input, char **except, bool remove); // remove set to true if you want the the tags to actually be removed vs just "escaped". // except is an array of char* containing tags to ignore when sanitizing. The // last element must be a null. You need to include both beginning and ending // tag if you want both removed (i.e. "b", "/b", "i", "/i") char *sanitizedMessage = sanitizeHtml(unescapedMessage, (char**)IMMessage::trustedTags, true); // can't keep this log... //MojLogInfo(IMServiceApp::s_log, _T("original message: %s, unescaped message: %s, sanitized message: %s"), message, unescapedMessage, sanitizedMessage); err = msgText.assign(sanitizedMessage); MojErrCheck(err); // cleanup free(unescapedMessage); free(sanitizedMessage); // remove blanks and convert to lowercase // for AOL, this is screen name with no "@aol.com"... MojString formattedUserName; err = formattedUserName.assign(usernameFrom); MojErrCheck(err); err = unformatFromAddress(formattedUserName, fromAddress); MojErrCheck(err); err = toAddress.assign(username); MojErrCheck(err); err = msgType.assign(serviceName); MojErrCheck(err); // set time stamp to current time - seconds since 1/1/1970 // for some reason multiplying a time_t by 1000 doesn't work - you have to convert to a long first... //deviceTimestamp = time (NULL) * 1000; MojInt64 sec = time (NULL); deviceTimestamp = sec * 1000; // server timestamp is new Date().getTime() serverTimestamp = sec * 1000; return MojErrNone; }
/* * Initialize from an incoming libPurple callback parameters * * payload form: (Sprint) * { "serviceName": "gmail", "username": "******", "usernameFrom": "*****@*****.**", "messageText": "<body>test reply to phone<\/body>" } * { "serviceName": "aol", "username": "******", "usernameFrom": "palm", "messageText": "test incoming message" } * * */ MojErr IMMessage::initFromCallback(const char* serviceName, const char* username, const char* usernameFrom, const char* message) { MojErr err; // unescape, strip html // #/tmp/testsanitize "<a>foo</a>" // sanitized: <a>foo</a> // unsanitized: <a>foo</a> // removed: foo char* unescapedMessage = purple_unescape_html(message); char* sanitizedMessage = purple_markup_strip_html(unescapedMessage); g_free(unescapedMessage); msgText.assign(""); // Inefficient but working solution. // TODO: Implement proper sanitization (that just keeps br, u, l and i) for (char* ptr = sanitizedMessage; *ptr; ++ptr) if (*ptr == '\n') msgText.append("<br>"); else msgText.append(*ptr); err = msgText.assign(sanitizedMessage); g_free(sanitizedMessage); MojErrCheck(err); // remove blanks and convert to lowercase // for AOL, this is screen name with no "@aol.com"... MojString formattedUserName; err = formattedUserName.assign(usernameFrom); MojErrCheck(err); err = unformatFromAddress(formattedUserName, fromAddress); MojErrCheck(err); err = toAddress.assign(username); MojErrCheck(err); err = msgType.assign(serviceName); MojErrCheck(err); // set time stamp to current time - seconds since 1/1/1970 // for some reason multiplying a time_t by 1000 doesn't work - you have to convert to a long first... //deviceTimestamp = time (NULL) * 1000; MojInt64 sec = time (NULL); deviceTimestamp = sec * 1000; // server timestamp is new Date().getTime() serverTimestamp = sec * 1000; return MojErrNone; }