diff --git a/indra/llcommon/lluri.cpp b/indra/llcommon/lluri.cpp
index 96e0c3f16f..db881954ba 100644
--- a/indra/llcommon/lluri.cpp
+++ b/indra/llcommon/lluri.cpp
@@ -261,7 +261,7 @@ static BOOL isDefault(const std::string& scheme, U16 port)
void LLURI::parseAuthorityAndPathUsingOpaque()
{
- if (mScheme == "http" || mScheme == "https" || mScheme == "hop" ||
+ if (mScheme == "http" || mScheme == "https" || mScheme == "hop" || mScheme == "inworldz" || mScheme == "iw" ||
mScheme == "ftp" || mScheme == "secondlife" ||
mScheme == "x-grid-location-info")
{
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index c8f971c299..e3b67ffd35 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -42,7 +42,7 @@
// hop:// protocol>
//#define APP_HEADER_REGEX "((x-grid-location-info://[-\\w\\.]+/app)|(secondlife:///app))"
-#define APP_HEADER_REGEX "(((hop|x-grid-location-info)://[-\\w\\.\\:\\@]+/app)|((hop|secondlife):///app))"
+#define APP_HEADER_REGEX "(((hop|x-grid-location-info)://[-\\w\\.\\:\\@]+/app)|((hop|secondlife|inworldz|iw):///app))"
//
// Utility functions
@@ -340,7 +340,9 @@ std::string LLUrlEntryHTTPNoProtocol::getTooltip(const std::string &url) const
LLUrlEntryInvalidSLURL::LLUrlEntryInvalidSLURL()
: LLUrlEntryBase()
{
- mPattern = boost::regex("(http://(maps.secondlife.com|slurl.com)/secondlife/|secondlife://(/app/(worldmap|teleport)/)?)[^ /]+(/-?[0-9]+){1,3}(/?(\\?title|\\?img|\\?msg)=\\S*)?/?",
+ // Inworldz special
+ //mPattern = boost::regex("(http://(maps.secondlife.com|slurl.com)/secondlife/|secondlife://(/app/(worldmap|teleport)/)?)[^ /]+(/-?[0-9]+){1,3}(/?(\\?title|\\?img|\\?msg)=\\S*)?/?",
+ mPattern = boost::regex("(http://(maps.secondlife.com|slurl.com)/secondlife/|(secondlife|inworldz|iw)://(/app/(worldmap|teleport)/)?)[^ /]+(/-?[0-9]+){1,3}(/?(\\?title|\\?img|\\?msg)=\\S*)?/?",
boost::regex::perl|boost::regex::icase);
mMenuName = "menu_url_http.xml";
mTooltip = LLTrans::getString("TooltipHttpUrl");
@@ -1016,7 +1018,7 @@ LLUrlEntryObjectIM::LLUrlEntryObjectIM()
{
// hop:// protocol; Ansa: Stop at first space so we can use it in notifications!
//mPattern = boost::regex("secondlife:///app/objectim/[\\da-f-]+\?.*",
- mPattern = boost::regex("(hop|secondlife):///app/objectim/[\\da-f-]+\?[^ \t\r\n\v\f]*",
+ mPattern = boost::regex("(hop|secondlife|inworldz|iw):///app/objectim/[\\da-f-]+\?[^ \t\r\n\v\f]*",
//
boost::regex::perl|boost::regex::icase);
mMenuName = "menu_url_objectim.xml";
@@ -1145,7 +1147,9 @@ void LLUrlEntryParcel::processParcelInfo(const LLParcelData& parcel_data)
//
LLUrlEntryPlace::LLUrlEntryPlace()
{
- mPattern = boost::regex("((hop://[-\\w\\.\\:\\@]+/)|((x-grid-location-info://[-\\w\\.]+/region/)|(secondlife://)))\\S+/?(\\d+/\\d+/\\d+|\\d+/\\d+)/?", //
+ // Inworldz special
+ //mPattern = boost::regex("((hop://[-\\w\\.\\:\\@]+/)|((x-grid-location-info://[-\\w\\.]+/region/)|(secondlife://)))\\S+/?(\\d+/\\d+/\\d+|\\d+/\\d+)/?", //
+ mPattern = boost::regex("((hop://[-\\w\\.\\:\\@]+/)|((x-grid-location-info://[-\\w\\.]+/region/)|((secondlife|inworldz|iw)://)))\\S+/?(\\d+/\\d+/\\d+|\\d+/\\d+)/?", //
boost::regex::perl|boost::regex::icase);
mMenuName = "menu_url_slurl.xml";
mTooltip = LLTrans::getString("TooltipSLURL");
@@ -1327,7 +1331,7 @@ std::string LLUrlEntryTeleport::getLocation(const std::string &url) const
//
LLUrlEntrySL::LLUrlEntrySL()
{
- mPattern = boost::regex("(hop|secondlife)://(\\w+)?(:\\d+)?/\\S+", //
+ mPattern = boost::regex("(hop|secondlife|inworldz|iw)://(\\w+)?(:\\d+)?/\\S+", //
boost::regex::perl|boost::regex::icase);
mMenuName = "menu_url_slapp.xml";
mTooltip = LLTrans::getString("TooltipSLAPP");
@@ -1344,7 +1348,7 @@ std::string LLUrlEntrySL::getLabel(const std::string &url, const LLUrlLabelCallb
//
LLUrlEntrySLLabel::LLUrlEntrySLLabel()
{
- mPattern = boost::regex("\\[(hop|secondlife)://\\S+[ \t]+[^\\]]+\\]", //
+ mPattern = boost::regex("\\[(hop|secondlife|inworldz|iw)://\\S+[ \t]+[^\\]]+\\]", //
boost::regex::perl|boost::regex::icase);
mMenuName = "menu_url_slapp.xml";
mTooltip = LLTrans::getString("TooltipSLAPP");
diff --git a/indra/newview/fsgridhandler.cpp b/indra/newview/fsgridhandler.cpp
index 1a3aa35046..482e29ff47 100644
--- a/indra/newview/fsgridhandler.cpp
+++ b/indra/newview/fsgridhandler.cpp
@@ -1432,6 +1432,10 @@ std::string LLGridManager::getAppSLURLBase(const std::string& grid)
{
ret = mGridList[grid][GRID_APP_SLURL_BASE].asString();
}
+ else if (grid == INWORLDZ_URI)
+ {
+ ret = "inworldz:///app";
+ }
else
{
std::string app_base;
@@ -1463,6 +1467,6 @@ std::string LLGridManager::getAppSLURLBase(const std::string& grid)
ret = llformat(app_base.c_str(), grid_norm.c_str());
}
- LL_DEBUGS("GridManager") << "App slurl base: " << ret << LL_ENDL;
+ LL_DEBUGS("GridManager") << "App slurl base: " << ret << " - grid = " << grid << LL_ENDL;
return ret;
}
diff --git a/indra/newview/fsgridhandler.h b/indra/newview/fsgridhandler.h
index 7b293ebf07..9424787f57 100644
--- a/indra/newview/fsgridhandler.h
+++ b/indra/newview/fsgridhandler.h
@@ -70,6 +70,9 @@ const std::string GRID_SLURL_BASE = "slurl_base";
const std::string GRID_APP_SLURL_BASE = "app_slurl_base";
//
+// Inworldz special
+#define INWORLDZ_URI "inworldz.com:8002"
+
class GridInfoRequestResponder;
//
diff --git a/indra/newview/fsslurl.cpp b/indra/newview/fsslurl.cpp
index 93b1b840c2..5307651f5b 100644
--- a/indra/newview/fsslurl.cpp
+++ b/indra/newview/fsslurl.cpp
@@ -52,14 +52,17 @@ const char* LLSLURL::SLURL_X_GRID_LOCATION_INFO_SCHEME = "x-grid-location-info";
const char* LLSLURL::WWW_SLURL_COM = "www.slurl.com";
const char* LLSLURL::MAPS_SECONDLIFE_COM = "maps.secondlife.com";
-//
const char* LLSLURL::SLURL_COM = "slurl.com";
const char* LLSLURL::SLURL_APP_PATH = "app";
const char* LLSLURL::SLURL_SECONDLIFE_PATH = "secondlife";
const char* LLSLURL::SLURL_REGION_PATH = "region";
const char* LLSLURL::SIM_LOCATION_HOME = "home";
const char* LLSLURL::SIM_LOCATION_LAST = "last";
-//
+
+// Inworldz special
+const char* LLSLURL::SLURL_INWORLDZ_SCHEME = "inworldz";
+const char* LLSLURL::SLURL_IW_SCHEME = "iw";
+const char* LLSLURL::PLACES_INWORLDZ_COM = "places.inworldz.com";
// resolve a simstring from a slurl
LLSLURL::LLSLURL(const std::string& slurl)
@@ -212,7 +215,7 @@ LLSLURL::LLSLURL(const std::string& slurl)
if(mGrid.empty() && LLStartUp::getStartupState() == STATE_STARTED)
{
// we couldn't find the grid in the grid manager, so bail
- LL_WARNS() << "unable to find grid" << LL_ENDL;
+ LL_WARNS("SLURL") << "unable to find grid" << LL_ENDL;
return;
}
// set the type as appropriate.
@@ -241,6 +244,55 @@ LLSLURL::LLSLURL(const std::string& slurl)
path_array.insert(0, slurl_uri.hostNameAndPort());
}
}
+ else if (slurl_uri.scheme() == LLSLURL::SLURL_INWORLDZ_SCHEME ||
+ slurl_uri.scheme() == LLSLURL::SLURL_IW_SCHEME)
+ {
+ LL_DEBUGS("SLURL") << "inworldz scheme" << LL_ENDL;
+
+ mGrid = INWORLDZ_URI;
+
+ if (path_array[0].asString() == LLSLURL::SLURL_APP_PATH)
+ {
+ // it's in the form iw:///(app)
+ // so parse the grid name to derive the grid ID
+ if (!slurl_uri.hostNameAndPort().empty())
+ {
+ LL_DEBUGS("SLURL") << "(inworldz|iw):///app" << LL_ENDL;
+
+ mGrid = LLGridManager::getInstance()->getGridByProbing(slurl_uri.hostNameAndPort());
+ if (mGrid.empty())
+ {
+ mGrid = LLGridManager::getInstance()->getGridByProbing(slurl_uri.hostName());
+ }
+ }
+ else if (path_array[0].asString() == LLSLURL::SLURL_APP_PATH)
+ {
+ LL_DEBUGS("SLURL") << "(inworldz|iw):///app" << LL_ENDL;
+
+ // for app style slurls, where no grid name is specified, assume the currently
+ // selected or logged in grid.
+ mGrid = LLGridManager::getInstance()->getGridId();
+ }
+
+ if (mGrid.empty() && LLStartUp::getStartupState() == STATE_STARTED)
+ {
+ // we couldn't find the grid in the grid manager, so bail
+ LL_WARNS("SLURL")<<"unable to find grid"< or /app/, so it must be iw://
+ // therefore the hostname will be the region name, and it's a location type
+ mType = LOCATION;
+ // 'normalize' it so the region name is in fact the head of the path_array
+ path_array.insert(0, slurl_uri.hostName());
+ }
+ }
else if((slurl_uri.scheme() == LLSLURL::SLURL_HTTP_SCHEME)
|| (slurl_uri.scheme() == LLSLURL::SLURL_HTTPS_SCHEME)
|| (slurl_uri.scheme() == LLSLURL::SLURL_X_GRID_LOCATION_INFO_SCHEME)
@@ -257,6 +309,13 @@ LLSLURL::LLSLURL(const std::string& slurl)
else
mGrid = default_grid;
}
+ // places.inworldz.com isn't your regular everyday slurl
+ else if (slurl_uri.hostName() == LLSLURL::PLACES_INWORLDZ_COM)
+ {
+ // likewise, places.inworldz.com implies inworldz and a location
+ mGrid = INWORLDZ_URI;
+ mType = LOCATION;
+ }
else
{
LL_DEBUGS("SLURL") << "slurl style Standalone" << LL_ENDL;
@@ -330,14 +389,12 @@ LLSLURL::LLSLURL(const std::string& slurl)
path_array.erase(0);
// leave app appended.
}
-//
else if ( slurl_uri.scheme() == LLSLURL::HOP_SCHEME)
{
LL_DEBUGS("SLURL") << "It's a location hop" << LL_ENDL;
mType = LOCATION;
}
-//
- else
+ else if (slurl_uri.hostName() != LLSLURL::PLACES_INWORLDZ_COM)
{
LL_DEBUGS("SLURL") << "Not a valid https/http/x-grid-location-info slurl " << slurl << LL_ENDL;
// not a valid https/http/x-grid-location-info slurl, so it'll likely just be a URL
diff --git a/indra/newview/fsslurl.h b/indra/newview/fsslurl.h
index c2b9808819..ef19cda080 100644
--- a/indra/newview/fsslurl.h
+++ b/indra/newview/fsslurl.h
@@ -53,6 +53,11 @@ public:
static const char* SLURL_APP_PATH;
static const char* SLURL_REGION_PATH;
+ // Inworldz special
+ static const char* SLURL_INWORLDZ_SCHEME;
+ static const char* SLURL_IW_SCHEME;
+ static const char* PLACES_INWORLDZ_COM;
+
enum SLURL_TYPE
{
INVALID,
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index 5ba81247d4..dbe14c9616 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -836,7 +836,10 @@ void LLGroupActions::ejectFromGroup(const LLUUID& idGroup, const LLUUID& idAgent
LLSD payload;
payload["avatar_id"] = idAgent;
payload["group_id"] = idGroup;
- std::string fullname = LLSLURL("agent", idAgent, "inspect").getSLURLString();
+ // Show complete name in eject dialog
+ //std::string fullname = LLSLURL("agent", idAgent, "inspect").getSLURLString();
+ std::string fullname = LLSLURL("agent", idAgent, "completename").getSLURLString();
+ //
args["AVATAR_NAME"] = fullname;
LLNotificationsUtil::add("EjectGroupMemberWarning",
args,
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index 2337268cbd..48403afd8a 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -1199,8 +1199,11 @@ void LLPanelGroupMembersSubTab::confirmEjectMembers()
if (selection_count == 1)
{
LLSD args;
- std::string fullname;
- gCacheName->getFullName(mMembersList->getValue(), fullname);
+ // FIRE-19529: Group eject dialog doesn't show avatar name
+ //std::string fullname;
+ //gCacheName->getFullName(mMembersList->getValue(), fullname);
+ std::string fullname = LLSLURL("agent", mMembersList->getValue().asUUID(), "completename").getSLURLString();
+ //
args["AVATAR_NAME"] = fullname;
LLSD payload;
LLNotificationsUtil::add("EjectGroupMemberWarning",
diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp
index 8d07330cb1..4779fd7fa3 100644
--- a/indra/newview/llworldmapmessage.cpp
+++ b/indra/newview/llworldmapmessage.cpp
@@ -132,11 +132,6 @@ void LLWorldMapMessage::sendHandleRegionRequest(U64 region_handle,
void LLWorldMapMessage::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent)
{
-// Aurora Sim
-#ifdef OPENSIM
- if(LLGridManager::getInstance()->isInOpenSim()) return_nonexistent = true;
-#endif //OPENSIM
-// Aurora Sim
//LL_INFOS("World Map") << "LLWorldMap::sendMapBlockRequest()" << ", min = (" << min_x << ", " << min_y << "), max = (" << max_x << ", " << max_y << "), nonexistent = " << return_nonexistent << LL_ENDL;
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_MapBlockRequest);
@@ -216,9 +211,10 @@ void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**)
//
// was: llassert(!name.empty())
// which made debug builds impossible to use on OpenSim
- if(name.empty())
+ if (name.empty() && accesscode != 255)
{
LL_WARNS() << "MapBlockReply returned empty region name, not inserting in the world map" << LL_ENDL;
+ continue;
}
//
// Insert that region in the world map, if failure, flag it as a "null_sim"