diff options
| -rw-r--r-- | indra/newview/llimprocessing.cpp | 92 | 
1 files changed, 42 insertions, 50 deletions
| diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp index eca0600718..3d22410208 100644 --- a/indra/newview/llimprocessing.cpp +++ b/indra/newview/llimprocessing.cpp @@ -857,41 +857,24 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,              }              else // IM_TASK_INVENTORY_OFFERED              { -                if (offline == IM_OFFLINE && session_id.isNull() && aux_id.notNull() && binary_bucket_size > sizeof(S8)* 5) +                if (sizeof(S8) != binary_bucket_size)                  { -                    // cap received offline message -                    std::string str_bucket = ll_safe_string((char*)binary_bucket, binary_bucket_size); -                    typedef boost::tokenizer<boost::char_separator<char> > tokenizer; -                    boost::char_separator<char> sep("|", "", boost::keep_empty_tokens); -                    tokenizer tokens(str_bucket, sep); -                    tokenizer::iterator iter = tokens.begin(); - -                    info->mType = (LLAssetType::EType)(atoi((*(iter++)).c_str())); -                    // Note There is more elements in 'tokens' ... - -                    info->mObjectID = LLUUID::null; -                    info->mFromObject = TRUE; -                } -                else -                { -                    if (sizeof(S8) != binary_bucket_size) -                    { -                        LL_WARNS("Messaging") << "Malformed inventory offer from object" << LL_ENDL; -                        delete info; -                        break; -                    } -                    info->mType = (LLAssetType::EType) binary_bucket[0]; -                    info->mObjectID = LLUUID::null; -                    info->mFromObject = TRUE; +                    LL_WARNS("Messaging") << "Malformed inventory offer from object" << LL_ENDL; +                    delete info; +                    break;                  } +                info->mType = (LLAssetType::EType) binary_bucket[0]; +                info->mObjectID = LLUUID::null; +                info->mFromObject = TRUE;              }              info->mIM = dialog;              info->mFromID = from_id;              info->mFromGroup = from_group; -            info->mTransactionID = session_id;              info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType)); +            info->mTransactionID = session_id.notNull() ? session_id : aux_id; +              info->mFromName = name;              info->mDesc = message;              info->mHost = sender; @@ -1567,7 +1550,7 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)          return;      } -    if (gAgent.getRegion() == NULL) +    if (!gAgent.getRegion())      {          LL_WARNS("Messaging") << "Region null while attempting to load messages." << LL_ENDL;          return; @@ -1575,8 +1558,8 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)      LL_INFOS("Messaging") << "Processing offline messages." << LL_ENDL; -    std::vector<U8> data; -    S32 binary_bucket_size = 0; +//     std::vector<U8> data; +//     S32 binary_bucket_size = 0;      LLHost sender = gAgent.getRegionHost();      LLSD::array_iterator i = messages.beginArray(); @@ -1585,38 +1568,47 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)      {          const LLSD &message_data(*i); -        LLVector3 position(message_data["local_x"].asReal(), message_data["local_y"].asReal(), message_data["local_z"].asReal()); -        data = message_data["binary_bucket"].asBinary(); -        binary_bucket_size = data.size(); // message_data["count"] always 0 -        U32 parent_estate_id = message_data.has("parent_estate_id") ? message_data["parent_estate_id"].asInteger() : 1; // 1 - IMMainland +        /* RIDER: Many fields in this message are using a '_' rather than the standard '-'.  This  +         * should be changed but would require tight coordination with the simulator.  +         */ +        LLVector3 position; +        if (message_data.has("position")) +        { +            position.setValue(message_data["position"]); +        } +        else +        { +            position.set(message_data["local_x"].asReal(), message_data["local_y"].asReal(), message_data["local_z"].asReal()); +        } -        // Todo: once dirtsim-369 releases, remove one of the int/str options -        BOOL from_group; -        if (message_data["from_group"].isInteger()) +        std::vector<U8> bin_bucket; +        if (message_data.has("binary_bucket"))          { -            from_group = message_data["from_group"].asInteger(); +            bin_bucket = message_data["binary_bucket"].asBinary();          }          else          { -            from_group = message_data["from_group"].asString() == "Y"; +            bin_bucket.push_back(0);          } -        LLIMProcessing::processNewMessage(message_data["from_agent_id"].asUUID(), -            from_group, +        LLIMProcessing::processNewMessage( +            message_data["from_agent_id"].asUUID(), +            message_data["from_group"].asBoolean(),              message_data["to_agent_id"].asUUID(), -            IM_OFFLINE, -            (EInstantMessage)message_data["dialog"].asInteger(), -            LLUUID::null, // session id, since there is none we can only use frienship/group invite caps -            message_data["timestamp"].asInteger(), -            message_data["from_agent_name"].asString(), -            message_data["message"].asString(), -            parent_estate_id, +            static_cast<U8>(message_data["offline"].asInteger()), +            static_cast<EInstantMessage>(message_data["dialog"].asInteger()), +            message_data["transaction-id"].asUUID(), +            static_cast<U32>(message_data["timestamp"].asInteger()), +            message_data["from_name"].asString(), +            (message_data.has("message")) ? message_data["message"].asString() : std::string(), +            static_cast<U32>((message_data.has("parent_estate_id")) ? message_data["parent_estate_id"].asInteger() : 1), // 1 - IMMainland              message_data["region_id"].asUUID(),              position, -            &data[0], -            binary_bucket_size, +            bin_bucket.data(), +            bin_bucket.size(),              sender, -            message_data["asset_id"].asUUID()); // not necessarily an asset +            message_data["asset_id"].asUUID()); +      }  } | 
