summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorRider Linden <rider@lindenlab.com>2020-06-08 11:28:05 -0700
committerAndrey Lihatskiy <alihatskiy@productengine.com>2020-06-30 19:07:45 +0300
commitef2e575c0acf11346669b41cc688f07777cc2657 (patch)
tree36588d6b7f13ef7fc1c9ca03ef65cb1cdfabd48f /indra
parent45e956d0fb7adc7f26e1ff6b949eda86f3641bf0 (diff)
SL-11430, SL-9756: Take transaction-id from offline messages. Correct LLSD names. Use offline flag rather than implicit tests of session_id and aux_id.
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llimprocessing.cpp61
1 files changed, 35 insertions, 26 deletions
diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp
index b534fc0b4a..60f1de4e8c 100644
--- a/indra/newview/llimprocessing.cpp
+++ b/indra/newview/llimprocessing.cpp
@@ -857,7 +857,7 @@ 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 (offline)
{
// cap received offline message
std::string str_bucket = ll_safe_string((char*)binary_bucket, binary_bucket_size);
@@ -889,9 +889,10 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
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;
@@ -1569,7 +1570,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;
@@ -1577,8 +1578,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();
@@ -1587,38 +1588,46 @@ 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_id"].asUUID(),
+ message_data["from_group"].asBoolean(),
message_data["to_agent_id"].asUUID(),
- IM_OFFLINE,
- (EInstantMessage)message_data["dialog"].asInteger(),
- message_data["session_id"].asUUID(),
- 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());
}
}