Hooking sending IMs

From Second Life Wiki
Jump to: navigation, search
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;
}