Ejemplo n.º 1
0
/*
 * 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: &lt;a&gt;foo&lt;/a&gt;
	//    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;
}
Ejemplo n.º 2
0
/*
 * 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: &lt;a&gt;foo&lt;/a&gt;
	//    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;
}