Hooking sending IMs

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
void LLFloaterIMPanel::sendMsg()
{
       LLWString text = mInputEditor->getWText();
       LLWString::trim(text);
       if (!gAgent.isGodlike()
               && (mDialog == IM_NOTHING_SPECIAL)
               && mOtherParticipantUUID.isNull())
       {
               llinfos << "Cannot send IM to everyone unless you're a god." << llendl;
               return;
       }
       if(text.length() > 0)
       {
               // Truncate and convert to UTF8 for transport
               std::string utf8_text = wstring_to_utf8str(text);
               utf8_text = utf8str_truncate(utf8_text, MAX_MSG_BUF_SIZE - 1);
               std::string name;
               gAgent.buildFullname(name);
               PLUGIN_HOOK("LLFloaterIMPanel::sendMsg", &utf8_text, &mOtherParticipantUUID);
               const LLRelationship* info = NULL;
               info = LLAvatarTracker::instance().getBuddyInfo(mOtherParticipantUUID);
               U8 offline = (!info || info->isOnline()) ? IM_ONLINE : IM_OFFLINE;
     [...]
bool otr_impanel_hook(void *data1, void *data2) {
       fprintf(stderr, "otr_impanel_hook(%p, %p)\n", data1, data2);
       std::string *str=(std::string *)data1;
       // send OTR whitespace data tag
       str->append(OTRL_MESSAGE_TAG_BASE);
       str->append(OTRL_MESSAGE_TAG_V2);
       
       LLUUID *uuid=(LLUUID *) data2;
       char uuidbuf[40];
       uuid->toString(uuidbuf);
       fprintf(stderr, " %s to %s", str->c_str(), uuidbuf);
       floater_printf("Sent OTR whitespace tag to %s\n", uuidbuf);
       return TRUE;
}