summaryrefslogtreecommitdiff
path: root/indra/llmessage
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llmessage')
-rw-r--r--[-rwxr-xr-x]indra/llmessage/CMakeLists.txt2
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llares.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llares.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llareslistener.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llareslistener.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llassetstorage.cpp6
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llassetstorage.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llavatarnamecache.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llavatarnamecache.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llblowfishcipher.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llblowfishcipher.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llbuffer.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llbuffer.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llbufferstream.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llbufferstream.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llcachename.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llcachename.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llchainio.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llchainio.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llcipher.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llcircuit.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llcircuit.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llclassifiedflags.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llclassifiedflags.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llcurl.cpp5
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llcurl.h1
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lldatapacker.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lldatapacker.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lldbstrings.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lldispatcher.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lldispatcher.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lleventflags.h0
-rw-r--r--indra/llmessage/llexperiencecache.cpp641
-rw-r--r--indra/llmessage/llexperiencecache.h104
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llextendedstatus.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llfiltersd2xmlrpc.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llfiltersd2xmlrpc.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llfollowcamparams.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhost.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhost.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpassetstorage.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpassetstorage.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpclient.cpp11
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpclient.h8
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpclientadapter.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpclientadapter.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpclientinterface.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpconstants.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpconstants.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpnode.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpnode.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpnodeadapter.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpsender.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llhttpsender.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llinstantmessage.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llinstantmessage.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llinvite.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lliobuffer.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lliobuffer.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lliohttpserver.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lliohttpserver.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lliopipe.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lliopipe.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lliosocket.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lliosocket.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llioutil.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llioutil.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llloginflags.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmail.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmail.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessagebuilder.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessagebuilder.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessageconfig.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessageconfig.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessagereader.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessagereader.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessagesenderinterface.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessagetemplate.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessagetemplate.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessagetemplateparser.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessagetemplateparser.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessagethrottle.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmessagethrottle.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llmsgvariabletype.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llnamevalue.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llnamevalue.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llnullcipher.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llnullcipher.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llpacketack.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llpacketack.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llpacketbuffer.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llpacketbuffer.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llpacketring.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llpacketring.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llpartdata.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llpartdata.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llproxy.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llproxy.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llpumpio.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llpumpio.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llqueryflags.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llregionflags.h47
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llregionhandle.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdappservices.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdappservices.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdhttpserver.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdhttpserver.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdmessage.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdmessage.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdmessagebuilder.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdmessagebuilder.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdmessagereader.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdmessagereader.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdrpcclient.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdrpcclient.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdrpcserver.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llsdrpcserver.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llservice.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llservice.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llservicebuilder.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llservicebuilder.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llstoredmessage.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llstoredmessage.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltaskname.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llteleportflags.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltemplatemessagebuilder.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltemplatemessagebuilder.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltemplatemessagedispatcher.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltemplatemessagedispatcher.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltemplatemessagereader.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltemplatemessagereader.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llthrottle.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llthrottle.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltransfermanager.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltransfermanager.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltransfersourceasset.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltransfersourceasset.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltransfersourcefile.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltransfersourcefile.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltransfertargetfile.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltransfertargetfile.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltransfertargetvfile.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltransfertargetvfile.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltrustedmessageservice.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lltrustedmessageservice.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llurlrequest.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llurlrequest.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lluseroperation.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/lluseroperation.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llvehicleparams.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llxfer.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llxfer.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llxfer_file.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llxfer_file.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llxfer_mem.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llxfer_mem.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llxfer_vfile.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llxfer_vfile.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llxfermanager.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llxfermanager.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llxorcipher.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/llxorcipher.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/machine.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/machine.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/mean_collision_data.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/message.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/message.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/message_prehash.cpp2
-rw-r--r--[-rwxr-xr-x]indra/llmessage/message_prehash.h2
-rw-r--r--[-rwxr-xr-x]indra/llmessage/message_string_table.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/net.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/net.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/partsyspacket.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/partsyspacket.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/patch_code.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/patch_code.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/patch_dct.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/patch_dct.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/patch_idct.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/sound_ids.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/sound_ids.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/commtest.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/llareslistener_test.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/llavatarnamecache_test.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/llcurl_stub.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/llhost_test.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/llhttpclient_test.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/llhttpclientadapter_test.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/llhttpnode_stub.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/llmockhttpclient.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/llnamevalue_test.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/llpartdata_test.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/llsdmessage_test.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/lltesthttpclientadapter.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/lltesthttpclientadapter.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/lltestmessagesender.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/lltestmessagesender.h0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/lltrustedmessageservice_test.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/llxfer_file_test.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llmessage/tests/networkio.h0
201 files changed, 815 insertions, 14 deletions
diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt
index 40eddcb0ab..0a308fbf10 100755..100644
--- a/indra/llmessage/CMakeLists.txt
+++ b/indra/llmessage/CMakeLists.txt
@@ -42,6 +42,7 @@ set(llmessage_SOURCE_FILES
llcurl.cpp
lldatapacker.cpp
lldispatcher.cpp
+ llexperiencecache.cpp
llfiltersd2xmlrpc.cpp
llhost.cpp
llhttpassetstorage.cpp
@@ -133,6 +134,7 @@ set(llmessage_HEADER_FILES
lldbstrings.h
lldispatcher.h
lleventflags.h
+ llexperiencecache.h
llextendedstatus.h
llfiltersd2xmlrpc.h
llfollowcamparams.h
diff --git a/indra/llmessage/llares.cpp b/indra/llmessage/llares.cpp
index 9f90ae1544..9f90ae1544 100755..100644
--- a/indra/llmessage/llares.cpp
+++ b/indra/llmessage/llares.cpp
diff --git a/indra/llmessage/llares.h b/indra/llmessage/llares.h
index c727363b60..c727363b60 100755..100644
--- a/indra/llmessage/llares.h
+++ b/indra/llmessage/llares.h
diff --git a/indra/llmessage/llareslistener.cpp b/indra/llmessage/llareslistener.cpp
index 3d65906b98..3d65906b98 100755..100644
--- a/indra/llmessage/llareslistener.cpp
+++ b/indra/llmessage/llareslistener.cpp
diff --git a/indra/llmessage/llareslistener.h b/indra/llmessage/llareslistener.h
index 780dcdd9c5..780dcdd9c5 100755..100644
--- a/indra/llmessage/llareslistener.h
+++ b/indra/llmessage/llareslistener.h
diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp
index 8ba2535531..61663e1982 100755..100644
--- a/indra/llmessage/llassetstorage.cpp
+++ b/indra/llmessage/llassetstorage.cpp
@@ -633,6 +633,10 @@ void LLAssetStorage::downloadCompleteCallback(
vfile.remove();
}
}
+
+ // we will be deleting elements of mPendingDownloads which req might be part of, save id and type for reference
+ LLUUID callback_id = req->getUUID();
+ LLAssetType::EType callback_type = req->getType();
// find and callback ALL pending requests for this UUID
// SJB: We process the callbacks in reverse order, I do not know if this is important,
@@ -660,7 +664,7 @@ void LLAssetStorage::downloadCompleteCallback(
{
add(sFailedDownloadCount, 1);
}
- tmp->mDownCallback(gAssetStorage->mVFS, req->getUUID(), req->getType(), tmp->mUserData, result, ext_status);
+ tmp->mDownCallback(gAssetStorage->mVFS, callback_id, callback_type, tmp->mUserData, result, ext_status);
}
delete tmp;
}
diff --git a/indra/llmessage/llassetstorage.h b/indra/llmessage/llassetstorage.h
index 1bb4acea9e..1bb4acea9e 100755..100644
--- a/indra/llmessage/llassetstorage.h
+++ b/indra/llmessage/llassetstorage.h
diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp
index 549708097a..549708097a 100755..100644
--- a/indra/llmessage/llavatarnamecache.cpp
+++ b/indra/llmessage/llavatarnamecache.cpp
diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h
index 5a10053a69..5a10053a69 100755..100644
--- a/indra/llmessage/llavatarnamecache.h
+++ b/indra/llmessage/llavatarnamecache.h
diff --git a/indra/llmessage/llblowfishcipher.cpp b/indra/llmessage/llblowfishcipher.cpp
index 0b5025a422..0b5025a422 100755..100644
--- a/indra/llmessage/llblowfishcipher.cpp
+++ b/indra/llmessage/llblowfishcipher.cpp
diff --git a/indra/llmessage/llblowfishcipher.h b/indra/llmessage/llblowfishcipher.h
index e2e54526e8..e2e54526e8 100755..100644
--- a/indra/llmessage/llblowfishcipher.h
+++ b/indra/llmessage/llblowfishcipher.h
diff --git a/indra/llmessage/llbuffer.cpp b/indra/llmessage/llbuffer.cpp
index d07d9980c3..d07d9980c3 100755..100644
--- a/indra/llmessage/llbuffer.cpp
+++ b/indra/llmessage/llbuffer.cpp
diff --git a/indra/llmessage/llbuffer.h b/indra/llmessage/llbuffer.h
index ccdb9fa7ee..ccdb9fa7ee 100755..100644
--- a/indra/llmessage/llbuffer.h
+++ b/indra/llmessage/llbuffer.h
diff --git a/indra/llmessage/llbufferstream.cpp b/indra/llmessage/llbufferstream.cpp
index ff1c9993cc..ff1c9993cc 100755..100644
--- a/indra/llmessage/llbufferstream.cpp
+++ b/indra/llmessage/llbufferstream.cpp
diff --git a/indra/llmessage/llbufferstream.h b/indra/llmessage/llbufferstream.h
index 19749612f3..19749612f3 100755..100644
--- a/indra/llmessage/llbufferstream.h
+++ b/indra/llmessage/llbufferstream.h
diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp
index daf3e0b4de..daf3e0b4de 100755..100644
--- a/indra/llmessage/llcachename.cpp
+++ b/indra/llmessage/llcachename.cpp
diff --git a/indra/llmessage/llcachename.h b/indra/llmessage/llcachename.h
index d238c3a247..d238c3a247 100755..100644
--- a/indra/llmessage/llcachename.h
+++ b/indra/llmessage/llcachename.h
diff --git a/indra/llmessage/llchainio.cpp b/indra/llmessage/llchainio.cpp
index bcda6746a1..bcda6746a1 100755..100644
--- a/indra/llmessage/llchainio.cpp
+++ b/indra/llmessage/llchainio.cpp
diff --git a/indra/llmessage/llchainio.h b/indra/llmessage/llchainio.h
index 6e4d6c2013..6e4d6c2013 100755..100644
--- a/indra/llmessage/llchainio.h
+++ b/indra/llmessage/llchainio.h
diff --git a/indra/llmessage/llcipher.h b/indra/llmessage/llcipher.h
index 76e3a7a5a3..76e3a7a5a3 100755..100644
--- a/indra/llmessage/llcipher.h
+++ b/indra/llmessage/llcipher.h
diff --git a/indra/llmessage/llcircuit.cpp b/indra/llmessage/llcircuit.cpp
index 8dbe2f8411..8dbe2f8411 100755..100644
--- a/indra/llmessage/llcircuit.cpp
+++ b/indra/llmessage/llcircuit.cpp
diff --git a/indra/llmessage/llcircuit.h b/indra/llmessage/llcircuit.h
index b8021bc9f0..b8021bc9f0 100755..100644
--- a/indra/llmessage/llcircuit.h
+++ b/indra/llmessage/llcircuit.h
diff --git a/indra/llmessage/llclassifiedflags.cpp b/indra/llmessage/llclassifiedflags.cpp
index f6084d4a60..f6084d4a60 100755..100644
--- a/indra/llmessage/llclassifiedflags.cpp
+++ b/indra/llmessage/llclassifiedflags.cpp
diff --git a/indra/llmessage/llclassifiedflags.h b/indra/llmessage/llclassifiedflags.h
index 17fc867453..17fc867453 100755..100644
--- a/indra/llmessage/llclassifiedflags.h
+++ b/indra/llmessage/llclassifiedflags.h
diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp
index 73df47b933..7e9ae8d108 100755..100644
--- a/indra/llmessage/llcurl.cpp
+++ b/indra/llmessage/llcurl.cpp
@@ -178,6 +178,11 @@ void LLCurl::Responder::setURL(const std::string& url)
mURL = url;
}
+const std::string& LLCurl::Responder::getURL()
+{
+ return mURL;
+}
+
void LLCurl::Responder::successResult(const LLSD& content)
{
setResult(HTTP_OK, "", content);
diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h
index 385d9fffa8..34758433c8 100755..100644
--- a/indra/llmessage/llcurl.h
+++ b/indra/llmessage/llcurl.h
@@ -147,6 +147,7 @@ public:
public:
void setHTTPMethod(EHTTPMethod method);
void setURL(const std::string& url);
+ const std::string& getURL();
void setResult(S32 status, const std::string& reason, const LLSD& content = LLSD());
void setResponseHeader(const std::string& header, const std::string& value);
diff --git a/indra/llmessage/lldatapacker.cpp b/indra/llmessage/lldatapacker.cpp
index 3510f93805..3510f93805 100755..100644
--- a/indra/llmessage/lldatapacker.cpp
+++ b/indra/llmessage/lldatapacker.cpp
diff --git a/indra/llmessage/lldatapacker.h b/indra/llmessage/lldatapacker.h
index 5140f56c01..5140f56c01 100755..100644
--- a/indra/llmessage/lldatapacker.h
+++ b/indra/llmessage/lldatapacker.h
diff --git a/indra/llmessage/lldbstrings.h b/indra/llmessage/lldbstrings.h
index e23d17d5b6..e23d17d5b6 100755..100644
--- a/indra/llmessage/lldbstrings.h
+++ b/indra/llmessage/lldbstrings.h
diff --git a/indra/llmessage/lldispatcher.cpp b/indra/llmessage/lldispatcher.cpp
index c40fe0d389..c40fe0d389 100755..100644
--- a/indra/llmessage/lldispatcher.cpp
+++ b/indra/llmessage/lldispatcher.cpp
diff --git a/indra/llmessage/lldispatcher.h b/indra/llmessage/lldispatcher.h
index 9d1751f588..9d1751f588 100755..100644
--- a/indra/llmessage/lldispatcher.h
+++ b/indra/llmessage/lldispatcher.h
diff --git a/indra/llmessage/lleventflags.h b/indra/llmessage/lleventflags.h
index 75d79071b1..75d79071b1 100755..100644
--- a/indra/llmessage/lleventflags.h
+++ b/indra/llmessage/lleventflags.h
diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp
new file mode 100644
index 0000000000..52b60a176e
--- /dev/null
+++ b/indra/llmessage/llexperiencecache.cpp
@@ -0,0 +1,641 @@
+/**
+ * @file llexperiencecache.cpp
+ * @brief llexperiencecache and related class definitions
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+#include "llexperiencecache.h"
+
+#include "llavatarname.h"
+#include "llframetimer.h"
+#include "llhttpclient.h"
+#include "llsdserialize.h"
+#include <set>
+#include <map>
+#include "boost/tokenizer.hpp"
+
+
+namespace LLExperienceCache
+{
+
+ typedef std::map<LLUUID, LLUUID> KeyMap;
+ KeyMap privateToPublicKeyMap;
+
+ void mapKeys(const LLSD& legacyKeys);
+
+ std::string sLookupURL;
+
+ typedef std::map<LLUUID, std::string> ask_queue_t;
+ ask_queue_t sAskQueue;
+
+ typedef std::map<LLUUID, F64> pending_queue_t;
+ pending_queue_t sPendingQueue;
+
+ cache_t sCache;
+ int sMaximumLookups = 10;
+
+ LLFrameTimer sRequestTimer;
+
+ // Periodically clean out expired entries from the cache
+ LLFrameTimer sEraseExpiredTimer;
+
+ // May have multiple callbacks for a single ID, which are
+ // represented as multiple slots bound to the signal.
+ // Avoid copying signals via pointers.
+ typedef std::map<LLUUID, callback_signal_t*> signal_map_t;
+ signal_map_t sSignalMap;
+
+
+
+ bool max_age_from_cache_control(const std::string& cache_control, S32 *max_age);
+ void eraseExpired();
+
+ void processExperience( const LLUUID& public_key, const LLSD& experience )
+ {
+ sCache[public_key]=experience;
+ LLSD & row = sCache[public_key];
+
+ if(row.has(EXPIRES))
+ {
+ row[EXPIRES] = row[EXPIRES].asReal() + LLFrameTimer::getTotalSeconds();
+ }
+
+ if(row.has(EXPERIENCE_ID))
+ {
+ sPendingQueue.erase(row[EXPERIENCE_ID].asUUID());
+ }
+
+ //signal
+ signal_map_t::iterator sig_it = sSignalMap.find(public_key);
+ if (sig_it != sSignalMap.end())
+ {
+ callback_signal_t* signal = sig_it->second;
+ (*signal)(experience);
+
+ sSignalMap.erase(public_key);
+
+ delete signal;
+ }
+ }
+
+ void initClass( )
+ {
+ }
+
+ const cache_t& getCached()
+ {
+ return sCache;
+ }
+
+ void setMaximumLookups( int maximumLookups)
+ {
+ sMaximumLookups = maximumLookups;
+ }
+
+ void bootstrap(const LLSD& legacyKeys, int initialExpiration)
+ {
+ mapKeys(legacyKeys);
+ LLSD::array_const_iterator it = legacyKeys.beginArray();
+ for(/**/; it != legacyKeys.endArray(); ++it)
+ {
+ LLSD experience = *it;
+ if(experience.has(EXPERIENCE_ID))
+ {
+ if(!experience.has(EXPIRES))
+ {
+ experience[EXPIRES] = initialExpiration;
+ }
+ processExperience(experience[EXPERIENCE_ID].asUUID(), experience);
+ }
+ else
+ {
+ LL_WARNS("ExperienceCache")
+ << "Skipping bootstrap entry which is missing " << EXPERIENCE_ID
+ << LL_ENDL;
+ }
+ }
+ }
+
+
+
+ bool expirationFromCacheControl(LLSD headers, F64 *expires)
+ {
+ // Allow the header to override the default
+ LLSD cache_control_header = headers["cache-control"];
+ if (cache_control_header.isDefined())
+ {
+ S32 max_age = 0;
+ std::string cache_control = cache_control_header.asString();
+ if (max_age_from_cache_control(cache_control, &max_age))
+ {
+ LL_WARNS("ExperienceCache")
+ << "got EXPIRES from headers, max_age " << max_age
+ << LL_ENDL;
+ F64 now = LLFrameTimer::getTotalSeconds();
+ *expires = now + (F64)max_age;
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+ static const std::string MAX_AGE("max-age");
+ static const boost::char_separator<char> EQUALS_SEPARATOR("=");
+ static const boost::char_separator<char> COMMA_SEPARATOR(",");
+
+ bool max_age_from_cache_control(const std::string& cache_control, S32 *max_age)
+ {
+ // Split the string on "," to get a list of directives
+ typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+ tokenizer directives(cache_control, COMMA_SEPARATOR);
+
+ tokenizer::iterator token_it = directives.begin();
+ for ( ; token_it != directives.end(); ++token_it)
+ {
+ // Tokens may have leading or trailing whitespace
+ std::string token = *token_it;
+ LLStringUtil::trim(token);
+
+ if (token.compare(0, MAX_AGE.size(), MAX_AGE) == 0)
+ {
+ // ...this token starts with max-age, so let's chop it up by "="
+ tokenizer subtokens(token, EQUALS_SEPARATOR);
+ tokenizer::iterator subtoken_it = subtokens.begin();
+
+ // Must have a token
+ if (subtoken_it == subtokens.end()) return false;
+ std::string subtoken = *subtoken_it;
+
+ // Must exactly equal "max-age"
+ LLStringUtil::trim(subtoken);
+ if (subtoken != MAX_AGE) return false;
+
+ // Must have another token
+ ++subtoken_it;
+ if (subtoken_it == subtokens.end()) return false;
+ subtoken = *subtoken_it;
+
+ // Must be a valid integer
+ // *NOTE: atoi() returns 0 for invalid values, so we have to
+ // check the string first.
+ // *TODO: Do servers ever send "0000" for zero? We don't handle it
+ LLStringUtil::trim(subtoken);
+ if (subtoken == "0")
+ {
+ *max_age = 0;
+ return true;
+ }
+ S32 val = atoi( subtoken.c_str() );
+ if (val > 0 && val < S32_MAX)
+ {
+ *max_age = val;
+ return true;
+ }
+ return false;
+ }
+ }
+ return false;
+ }
+
+
+ void importFile(std::istream& istr)
+ {
+ LLSD data;
+ S32 parse_count = LLSDSerialize::fromXMLDocument(data, istr);
+ if(parse_count < 1) return;
+
+ LLSD experiences = data["experiences"];
+
+ LLUUID public_key;
+ LLSD::map_const_iterator it = experiences.beginMap();
+ for(; it != experiences.endMap() ; ++it)
+ {
+ public_key.set(it->first);
+ sCache[public_key]=it->second;
+ }
+
+ LL_DEBUGS("ExperienceCache") << "importFile() loaded " << sCache.size() << LL_ENDL;
+ }
+
+ void exportFile(std::ostream& ostr)
+ {
+ LLSD experiences;
+
+ cache_t::const_iterator it =sCache.begin();
+ for( ; it != sCache.end() ; ++it)
+ {
+ if(!it->second.has(EXPERIENCE_ID) || it->second[EXPERIENCE_ID].asUUID().isNull() ||
+ it->second.has("DoesNotExist") || (it->second.has(PROPERTIES) && it->second[PROPERTIES].asInteger() & PROPERTY_INVALID))
+ continue;
+
+ experiences[it->first.asString()] = it->second;
+ }
+
+ LLSD data;
+ data["experiences"] = experiences;
+
+ LLSDSerialize::toPrettyXML(data, ostr);
+ }
+
+ class LLExperienceResponder : public LLHTTPClient::Responder
+ {
+ public:
+ LLExperienceResponder(const ask_queue_t& keys)
+ :mKeys(keys)
+ {
+
+ }
+
+ /*virtual*/ void httpCompleted()
+ {
+ LLSD experiences = getContent()["experience_keys"];
+ LLSD::array_const_iterator it = experiences.beginArray();
+ for( /**/ ; it != experiences.endArray(); ++it)
+ {
+ const LLSD& row = *it;
+ LLUUID public_key = row[EXPERIENCE_ID].asUUID();
+
+
+ LL_DEBUGS("ExperienceCache") << "Received result for " << public_key
+ << " display '" << row[LLExperienceCache::NAME].asString() << "'" << LL_ENDL ;
+
+ processExperience(public_key, row);
+ }
+
+ LLSD error_ids = getContent()["error_ids"];
+ LLSD::array_const_iterator errIt = error_ids.beginArray();
+ for( /**/ ; errIt != error_ids.endArray() ; ++errIt )
+ {
+ LLUUID id = errIt->asUUID();
+ LLSD exp;
+ exp[EXPIRES]=DEFAULT_EXPIRATION;
+ exp[EXPERIENCE_ID] = id;
+ exp[PROPERTIES]=PROPERTY_INVALID;
+ exp[MISSING]=true;
+ exp[QUOTA] = DEFAULT_QUOTA;
+
+ processExperience(id, exp);
+ LL_WARNS("ExperienceCache") << "LLExperienceResponder::result() error result for " << id << LL_ENDL ;
+ }
+
+ LL_DEBUGS("ExperienceCache") << sCache.size() << " cached experiences" << LL_ENDL;
+ }
+
+ /*virtual*/ void httpFailure()
+ {
+ LL_WARNS("ExperienceCache") << "Request failed "<<getStatus()<<" "<<getReason()<< LL_ENDL;
+ // We're going to construct a dummy record and cache it for a while,
+ // either briefly for a 503 Service Unavailable, or longer for other
+ // errors.
+ F64 retry_timestamp = errorRetryTimestamp(getStatus());
+
+
+ // Add dummy records for all agent IDs in this request
+ ask_queue_t::const_iterator it = mKeys.begin();
+ for ( ; it != mKeys.end(); ++it)
+ {
+
+ LLSD exp = get(it->first);
+ //leave the properties alone if we already have a cache entry for this xp
+ if(exp.isUndefined())
+ {
+ exp[PROPERTIES]=PROPERTY_INVALID;
+ }
+ exp[EXPIRES]=retry_timestamp;
+ exp[EXPERIENCE_ID] = it->first;
+ exp["key_type"] = it->second;
+ exp["uuid"] = it->first;
+ exp["error"] = (LLSD::Integer)getStatus();
+ exp[QUOTA] = DEFAULT_QUOTA;
+
+ LLExperienceCache::processExperience(it->first, exp);
+ }
+
+ }
+
+ // Return time to retry a request that generated an error, based on
+ // error type and headers. Return value is seconds-since-epoch.
+ F64 errorRetryTimestamp(S32 status)
+ {
+
+ // Retry-After takes priority
+ LLSD retry_after = getResponseHeaders()["retry-after"];
+ if (retry_after.isDefined())
+ {
+ // We only support the delta-seconds type
+ S32 delta_seconds = retry_after.asInteger();
+ if (delta_seconds > 0)
+ {
+ // ...valid delta-seconds
+ return F64(delta_seconds);
+ }
+ }
+
+ // If no Retry-After, look for Cache-Control max-age
+ F64 expires = 0.0;
+ if (LLExperienceCache::expirationFromCacheControl(getResponseHeaders(), &expires))
+ {
+ return expires;
+ }
+
+ // No information in header, make a guess
+ if (status == 503)
+ {
+ // ...service unavailable, retry soon
+ const F64 SERVICE_UNAVAILABLE_DELAY = 600.0; // 10 min
+ return SERVICE_UNAVAILABLE_DELAY;
+ }
+ else if (status == 499)
+ {
+ // ...we were probably too busy, retry quickly
+ const F64 BUSY_DELAY = 10.0; // 10 seconds
+ return BUSY_DELAY;
+
+ }
+ else
+ {
+ // ...other unexpected error
+ const F64 DEFAULT_DELAY = 3600.0; // 1 hour
+ return DEFAULT_DELAY;
+ }
+ }
+
+ private:
+ ask_queue_t mKeys;
+ };
+
+ void requestExperiences()
+ {
+ if(sAskQueue.empty() || sLookupURL.empty())
+ return;
+
+ F64 now = LLFrameTimer::getTotalSeconds();
+
+ const U32 EXP_URL_SEND_THRESHOLD = 3000;
+ const U32 PAGE_SIZE = EXP_URL_SEND_THRESHOLD/UUID_STR_LENGTH;
+
+ std::ostringstream ostr;
+
+ ask_queue_t keys;
+
+ ostr << sLookupURL << "?page_size=" << PAGE_SIZE;
+
+
+ int request_count = 0;
+ while(!sAskQueue.empty() && request_count < sMaximumLookups)
+ {
+ ask_queue_t::iterator it = sAskQueue.begin();
+ const LLUUID& key = it->first;
+ const std::string& key_type = it->second;
+
+ ostr << '&' << key_type << '=' << key.asString() ;
+
+ keys[key]=key_type;
+ request_count++;
+
+ sPendingQueue[key] = now;
+
+ if(ostr.tellp() > EXP_URL_SEND_THRESHOLD)
+ {
+ LL_DEBUGS("ExperienceCache") << "requestExperiences() query: " << ostr.str() << LL_ENDL;
+ LLHTTPClient::get(ostr.str(), new LLExperienceResponder(keys));
+ ostr.clear();
+ ostr.str(sLookupURL);
+ ostr << "?page_size=" << PAGE_SIZE;
+ keys.clear();
+ }
+ sAskQueue.erase(it);
+ }
+
+ if(ostr.tellp() > sLookupURL.size())
+ {
+ LL_DEBUGS("ExperienceCache") << "requestExperiences() query 2: " << ostr.str() << LL_ENDL;
+ LLHTTPClient::get(ostr.str(), new LLExperienceResponder(keys));
+ }
+ }
+
+ bool isRequestPending(const LLUUID& public_key)
+ {
+ bool isPending = false;
+ const F64 PENDING_TIMEOUT_SECS = 5.0 * 60.0;
+
+ pending_queue_t::const_iterator it = sPendingQueue.find(public_key);
+
+ if(it != sPendingQueue.end())
+ {
+ F64 expire_time = LLFrameTimer::getTotalSeconds() - PENDING_TIMEOUT_SECS;
+ isPending = (it->second > expire_time);
+ }
+
+ return isPending;
+ }
+
+
+ void setLookupURL( const std::string& lookup_url )
+ {
+ sLookupURL = lookup_url;
+ if(!sLookupURL.empty())
+ {
+ sLookupURL += "id/";
+ }
+ }
+
+ bool hasLookupURL()
+ {
+ return !sLookupURL.empty();
+ }
+
+ void idle()
+ {
+
+ const F32 SECS_BETWEEN_REQUESTS = 0.1f;
+ if (!sRequestTimer.checkExpirationAndReset(SECS_BETWEEN_REQUESTS))
+ {
+ return;
+ }
+
+ // Must be large relative to above
+ const F32 ERASE_EXPIRED_TIMEOUT = 60.f; // seconds
+ if (sEraseExpiredTimer.checkExpirationAndReset(ERASE_EXPIRED_TIMEOUT))
+ {
+ eraseExpired();
+ }
+
+
+ if(!sAskQueue.empty())
+ {
+ requestExperiences();
+ }
+ }
+
+ void erase( const LLUUID& key )
+ {
+ cache_t::iterator it = sCache.find(key);
+
+ if(it != sCache.end())
+ {
+ sCache.erase(it);
+ }
+ }
+
+ void eraseExpired()
+ {
+ F64 now = LLFrameTimer::getTotalSeconds();
+ cache_t::iterator it = sCache.begin();
+ while (it != sCache.end())
+ {
+ cache_t::iterator cur = it;
+ LLSD& exp = cur->second;
+ ++it;
+
+ if(exp.has(EXPIRES) && exp[EXPIRES].asReal() < now)
+ {
+ if(!exp.has(EXPERIENCE_ID))
+ {
+ LL_WARNS("ExperienceCache") << "Removing experience with no id " << LL_ENDL ;
+ sCache.erase(cur);
+ }
+ else
+ {
+ LLUUID id = exp[EXPERIENCE_ID].asUUID();
+ LLUUID private_key = exp.has(LLExperienceCache::PRIVATE_KEY) ? exp[LLExperienceCache::PRIVATE_KEY].asUUID():LLUUID::null;
+ if(private_key.notNull() || !exp.has("DoesNotExist"))
+ {
+ fetch(id, true);
+ }
+ else
+ {
+ LL_WARNS("ExperienceCache") << "Removing invalid experience " << id << LL_ENDL ;
+ sCache.erase(cur);
+ }
+ }
+ }
+ }
+ }
+
+
+ bool fetch( const LLUUID& key, bool refresh/* = true*/ )
+ {
+ if(!key.isNull() && !isRequestPending(key) && (refresh || sCache.find(key)==sCache.end()))
+ {
+ LL_DEBUGS("ExperienceCache") << " queue request for " << EXPERIENCE_ID << " " << key << LL_ENDL ;
+ sAskQueue[key]=EXPERIENCE_ID;
+
+ return true;
+ }
+ return false;
+ }
+
+ void insert(const LLSD& experience_data )
+ {
+ if(experience_data.has(EXPERIENCE_ID))
+ {
+ processExperience(experience_data[EXPERIENCE_ID].asUUID(), experience_data);
+ }
+ else
+ {
+ LL_WARNS("ExperienceCache") << ": Ignoring cache insert of experience which is missing " << EXPERIENCE_ID << LL_ENDL;
+ }
+ }
+ static LLSD empty;
+ const LLSD& get(const LLUUID& key)
+ {
+ if(key.isNull()) return empty;
+ cache_t::const_iterator it = sCache.find(key);
+
+ if (it != sCache.end())
+ {
+ return it->second;
+ }
+
+ fetch(key);
+
+ return empty;
+ }
+ void get( const LLUUID& key, callback_slot_t slot )
+ {
+ if(key.isNull()) return;
+
+ cache_t::const_iterator it = sCache.find(key);
+ if (it != sCache.end())
+ {
+ // ...name already exists in cache, fire callback now
+ callback_signal_t signal;
+ signal.connect(slot);
+
+ signal(it->second);
+ return;
+ }
+
+ fetch(key);
+
+ // always store additional callback, even if request is pending
+ signal_map_t::iterator sig_it = sSignalMap.find(key);
+ if (sig_it == sSignalMap.end())
+ {
+ // ...new callback for this id
+ callback_signal_t* signal = new callback_signal_t();
+ signal->connect(slot);
+ sSignalMap[key] = signal;
+ }
+ else
+ {
+ // ...existing callback, bind additional slot
+ callback_signal_t* signal = sig_it->second;
+ signal->connect(slot);
+ }
+ }
+
+}
+
+
+void LLExperienceCache::mapKeys( const LLSD& legacyKeys )
+{
+ LLSD::array_const_iterator exp = legacyKeys.beginArray();
+ for(/**/ ; exp != legacyKeys.endArray() ; ++exp)
+ {
+ if(exp->has(LLExperienceCache::EXPERIENCE_ID) && exp->has(LLExperienceCache::PRIVATE_KEY))
+ {
+ privateToPublicKeyMap[(*exp)[LLExperienceCache::PRIVATE_KEY].asUUID()]=(*exp)[LLExperienceCache::EXPERIENCE_ID].asUUID();
+ }
+ }
+}
+
+
+LLUUID LLExperienceCache::getExperienceId(const LLUUID& private_key, bool null_if_not_found)
+{
+ if (private_key.isNull())
+ return LLUUID::null;
+
+ KeyMap::const_iterator it=privateToPublicKeyMap.find(private_key);
+ if(it == privateToPublicKeyMap.end())
+ {
+ if(null_if_not_found)
+ {
+ return LLUUID::null;
+ }
+ return private_key;
+ }
+ LL_WARNS("LLExperience") << "converted private key " << private_key << " to experience_id " << it->second << LL_ENDL;
+ return it->second;
+}
diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h
new file mode 100644
index 0000000000..e669ee888e
--- /dev/null
+++ b/indra/llmessage/llexperiencecache.h
@@ -0,0 +1,104 @@
+/**
+ * @file llexperiencecache.h
+ * @brief Caches information relating to experience keys
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+
+#ifndef LL_LLEXPERIENCECACHE_H
+#define LL_LLEXPERIENCECACHE_H
+
+#include "linden_common.h"
+#include <boost/signals2.hpp>
+
+class LLSD;
+class LLUUID;
+
+
+
+namespace LLExperienceCache
+{
+ const std::string PRIVATE_KEY = "private_id";
+ const std::string MISSING = "DoesNotExist";
+
+ const std::string AGENT_ID = "agent_id";
+ const std::string GROUP_ID = "group_id";
+ const std::string EXPERIENCE_ID = "public_id";
+ const std::string NAME = "name";
+ const std::string PROPERTIES = "properties";
+ const std::string EXPIRES = "expiration";
+ const std::string DESCRIPTION = "description";
+ const std::string QUOTA = "quota";
+ const std::string MATURITY = "maturity";
+ const std::string METADATA = "extended_metadata";
+ const std::string SLURL = "slurl";
+
+
+ // should be in sync with experience-api/experiences/models.py
+ const int PROPERTY_INVALID = 1 << 0;
+ const int PROPERTY_PRIVILEGED = 1 << 3;
+ const int PROPERTY_GRID = 1 << 4;
+ const int PROPERTY_PRIVATE = 1 << 5;
+ const int PROPERTY_DISABLED = 1 << 6;
+ const int PROPERTY_SUSPENDED = 1 << 7;
+
+
+ // default values
+ const static F64 DEFAULT_EXPIRATION = 600.0;
+ const static S32 DEFAULT_QUOTA = 128; // this is megabytes
+
+ // Callback types for get() below
+ typedef boost::signals2::signal<void (const LLSD& experience)>
+ callback_signal_t;
+ typedef callback_signal_t::slot_type callback_slot_t;
+ typedef std::map<LLUUID, LLSD> cache_t;
+
+
+ void setLookupURL(const std::string& lookup_url);
+ bool hasLookupURL();
+
+ void setMaximumLookups(int maximumLookups);
+
+ void idle();
+ void exportFile(std::ostream& ostr);
+ void importFile(std::istream& istr);
+ void initClass();
+ void bootstrap(const LLSD& legacyKeys, int initialExpiration);
+
+ void erase(const LLUUID& key);
+ bool fetch(const LLUUID& key, bool refresh=false);
+ void insert(const LLSD& experience_data);
+ const LLSD& get(const LLUUID& key);
+
+ // If name information is in cache, callback will be called immediately.
+ void get(const LLUUID& key, callback_slot_t slot);
+
+ const cache_t& getCached();
+
+ // maps an experience private key to the experience id
+ LLUUID getExperienceId(const LLUUID& private_key, bool null_if_not_found=false);
+
+};
+
+#endif // LL_LLEXPERIENCECACHE_H
diff --git a/indra/llmessage/llextendedstatus.h b/indra/llmessage/llextendedstatus.h
index 8ce173d1ff..8ce173d1ff 100755..100644
--- a/indra/llmessage/llextendedstatus.h
+++ b/indra/llmessage/llextendedstatus.h
diff --git a/indra/llmessage/llfiltersd2xmlrpc.cpp b/indra/llmessage/llfiltersd2xmlrpc.cpp
index d3e195789b..d3e195789b 100755..100644
--- a/indra/llmessage/llfiltersd2xmlrpc.cpp
+++ b/indra/llmessage/llfiltersd2xmlrpc.cpp
diff --git a/indra/llmessage/llfiltersd2xmlrpc.h b/indra/llmessage/llfiltersd2xmlrpc.h
index 0c9a0dc95b..0c9a0dc95b 100755..100644
--- a/indra/llmessage/llfiltersd2xmlrpc.h
+++ b/indra/llmessage/llfiltersd2xmlrpc.h
diff --git a/indra/llmessage/llfollowcamparams.h b/indra/llmessage/llfollowcamparams.h
index 25208031db..25208031db 100755..100644
--- a/indra/llmessage/llfollowcamparams.h
+++ b/indra/llmessage/llfollowcamparams.h
diff --git a/indra/llmessage/llhost.cpp b/indra/llmessage/llhost.cpp
index 63c15f0d5e..63c15f0d5e 100755..100644
--- a/indra/llmessage/llhost.cpp
+++ b/indra/llmessage/llhost.cpp
diff --git a/indra/llmessage/llhost.h b/indra/llmessage/llhost.h
index 0cf52a4151..0cf52a4151 100755..100644
--- a/indra/llmessage/llhost.h
+++ b/indra/llmessage/llhost.h
diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp
index e202154445..e202154445 100755..100644
--- a/indra/llmessage/llhttpassetstorage.cpp
+++ b/indra/llmessage/llhttpassetstorage.cpp
diff --git a/indra/llmessage/llhttpassetstorage.h b/indra/llmessage/llhttpassetstorage.h
index 783e95cac6..783e95cac6 100755..100644
--- a/indra/llmessage/llhttpassetstorage.h
+++ b/indra/llmessage/llhttpassetstorage.h
diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp
index f8db3dded2..60f17e6870 100755..100644
--- a/indra/llmessage/llhttpclient.cpp
+++ b/indra/llmessage/llhttpclient.cpp
@@ -572,6 +572,17 @@ void LLHTTPClient::patch(
request(url, HTTP_PATCH, new LLSDInjector(body), responder, timeout, headers);
}
+void LLHTTPClient::putRaw(
+ const std::string& url,
+ const U8* data,
+ S32 size,
+ ResponderPtr responder,
+ const LLSD& headers,
+ const F32 timeout)
+{
+ request(url, HTTP_PUT, new RawInjector(data, size), responder, timeout, headers);
+}
+
void LLHTTPClient::post(
const std::string& url,
const LLSD& body,
diff --git a/indra/llmessage/llhttpclient.h b/indra/llmessage/llhttpclient.h
index b18258fd7b..fd48b4a743 100755..100644
--- a/indra/llmessage/llhttpclient.h
+++ b/indra/llmessage/llhttpclient.h
@@ -79,6 +79,14 @@ public:
ResponderPtr,
const LLSD& headers = LLSD(),
const F32 timeout=HTTP_REQUEST_EXPIRY_SECS);
+ static void putRaw(
+ const std::string& url,
+ const U8* data,
+ S32 size,
+ ResponderPtr responder,
+ const LLSD& headers = LLSD(),
+ const F32 timeout=HTTP_REQUEST_EXPIRY_SECS);
+
static void patch(
const std::string& url,
diff --git a/indra/llmessage/llhttpclientadapter.cpp b/indra/llmessage/llhttpclientadapter.cpp
index b56a804f94..b56a804f94 100755..100644
--- a/indra/llmessage/llhttpclientadapter.cpp
+++ b/indra/llmessage/llhttpclientadapter.cpp
diff --git a/indra/llmessage/llhttpclientadapter.h b/indra/llmessage/llhttpclientadapter.h
index 270282c66f..270282c66f 100755..100644
--- a/indra/llmessage/llhttpclientadapter.h
+++ b/indra/llmessage/llhttpclientadapter.h
diff --git a/indra/llmessage/llhttpclientinterface.h b/indra/llmessage/llhttpclientinterface.h
index 12a3857a61..12a3857a61 100755..100644
--- a/indra/llmessage/llhttpclientinterface.h
+++ b/indra/llmessage/llhttpclientinterface.h
diff --git a/indra/llmessage/llhttpconstants.cpp b/indra/llmessage/llhttpconstants.cpp
index 32f76f0d70..32f76f0d70 100755..100644
--- a/indra/llmessage/llhttpconstants.cpp
+++ b/indra/llmessage/llhttpconstants.cpp
diff --git a/indra/llmessage/llhttpconstants.h b/indra/llmessage/llhttpconstants.h
index d6bcbd3c19..d6bcbd3c19 100755..100644
--- a/indra/llmessage/llhttpconstants.h
+++ b/indra/llmessage/llhttpconstants.h
diff --git a/indra/llmessage/llhttpnode.cpp b/indra/llmessage/llhttpnode.cpp
index f235965879..f235965879 100755..100644
--- a/indra/llmessage/llhttpnode.cpp
+++ b/indra/llmessage/llhttpnode.cpp
diff --git a/indra/llmessage/llhttpnode.h b/indra/llmessage/llhttpnode.h
index 1144d88be1..1144d88be1 100755..100644
--- a/indra/llmessage/llhttpnode.h
+++ b/indra/llmessage/llhttpnode.h
diff --git a/indra/llmessage/llhttpnodeadapter.h b/indra/llmessage/llhttpnodeadapter.h
index 22984c4478..22984c4478 100755..100644
--- a/indra/llmessage/llhttpnodeadapter.h
+++ b/indra/llmessage/llhttpnodeadapter.h
diff --git a/indra/llmessage/llhttpsender.cpp b/indra/llmessage/llhttpsender.cpp
index 5363088d79..5363088d79 100755..100644
--- a/indra/llmessage/llhttpsender.cpp
+++ b/indra/llmessage/llhttpsender.cpp
diff --git a/indra/llmessage/llhttpsender.h b/indra/llmessage/llhttpsender.h
index ff8fa2f95b..ff8fa2f95b 100755..100644
--- a/indra/llmessage/llhttpsender.h
+++ b/indra/llmessage/llhttpsender.h
diff --git a/indra/llmessage/llinstantmessage.cpp b/indra/llmessage/llinstantmessage.cpp
index b7f3e6e4f7..b7f3e6e4f7 100755..100644
--- a/indra/llmessage/llinstantmessage.cpp
+++ b/indra/llmessage/llinstantmessage.cpp
diff --git a/indra/llmessage/llinstantmessage.h b/indra/llmessage/llinstantmessage.h
index f7118f8ccf..f7118f8ccf 100755..100644
--- a/indra/llmessage/llinstantmessage.h
+++ b/indra/llmessage/llinstantmessage.h
diff --git a/indra/llmessage/llinvite.h b/indra/llmessage/llinvite.h
index e5d573c1e3..e5d573c1e3 100755..100644
--- a/indra/llmessage/llinvite.h
+++ b/indra/llmessage/llinvite.h
diff --git a/indra/llmessage/lliobuffer.cpp b/indra/llmessage/lliobuffer.cpp
index bbd7b8777d..bbd7b8777d 100755..100644
--- a/indra/llmessage/lliobuffer.cpp
+++ b/indra/llmessage/lliobuffer.cpp
diff --git a/indra/llmessage/lliobuffer.h b/indra/llmessage/lliobuffer.h
index 3349848947..3349848947 100755..100644
--- a/indra/llmessage/lliobuffer.h
+++ b/indra/llmessage/lliobuffer.h
diff --git a/indra/llmessage/lliohttpserver.cpp b/indra/llmessage/lliohttpserver.cpp
index d9042fa8b0..d9042fa8b0 100755..100644
--- a/indra/llmessage/lliohttpserver.cpp
+++ b/indra/llmessage/lliohttpserver.cpp
diff --git a/indra/llmessage/lliohttpserver.h b/indra/llmessage/lliohttpserver.h
index a23eafe58a..a23eafe58a 100755..100644
--- a/indra/llmessage/lliohttpserver.h
+++ b/indra/llmessage/lliohttpserver.h
diff --git a/indra/llmessage/lliopipe.cpp b/indra/llmessage/lliopipe.cpp
index 4676a9a8f0..4676a9a8f0 100755..100644
--- a/indra/llmessage/lliopipe.cpp
+++ b/indra/llmessage/lliopipe.cpp
diff --git a/indra/llmessage/lliopipe.h b/indra/llmessage/lliopipe.h
index 7fd4cee8ba..7fd4cee8ba 100755..100644
--- a/indra/llmessage/lliopipe.h
+++ b/indra/llmessage/lliopipe.h
diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp
index b7460df508..b7460df508 100755..100644
--- a/indra/llmessage/lliosocket.cpp
+++ b/indra/llmessage/lliosocket.cpp
diff --git a/indra/llmessage/lliosocket.h b/indra/llmessage/lliosocket.h
index f840f0275c..f840f0275c 100755..100644
--- a/indra/llmessage/lliosocket.h
+++ b/indra/llmessage/lliosocket.h
diff --git a/indra/llmessage/llioutil.cpp b/indra/llmessage/llioutil.cpp
index b8443c0600..b8443c0600 100755..100644
--- a/indra/llmessage/llioutil.cpp
+++ b/indra/llmessage/llioutil.cpp
diff --git a/indra/llmessage/llioutil.h b/indra/llmessage/llioutil.h
index e8d245f530..e8d245f530 100755..100644
--- a/indra/llmessage/llioutil.h
+++ b/indra/llmessage/llioutil.h
diff --git a/indra/llmessage/llloginflags.h b/indra/llmessage/llloginflags.h
index 45833fc914..45833fc914 100755..100644
--- a/indra/llmessage/llloginflags.h
+++ b/indra/llmessage/llloginflags.h
diff --git a/indra/llmessage/llmail.cpp b/indra/llmessage/llmail.cpp
index 134154aa6c..134154aa6c 100755..100644
--- a/indra/llmessage/llmail.cpp
+++ b/indra/llmessage/llmail.cpp
diff --git a/indra/llmessage/llmail.h b/indra/llmessage/llmail.h
index 3791714363..3791714363 100755..100644
--- a/indra/llmessage/llmail.h
+++ b/indra/llmessage/llmail.h
diff --git a/indra/llmessage/llmessagebuilder.cpp b/indra/llmessage/llmessagebuilder.cpp
index e2ed968a57..e2ed968a57 100755..100644
--- a/indra/llmessage/llmessagebuilder.cpp
+++ b/indra/llmessage/llmessagebuilder.cpp
diff --git a/indra/llmessage/llmessagebuilder.h b/indra/llmessage/llmessagebuilder.h
index bf5be929f2..bf5be929f2 100755..100644
--- a/indra/llmessage/llmessagebuilder.h
+++ b/indra/llmessage/llmessagebuilder.h
diff --git a/indra/llmessage/llmessageconfig.cpp b/indra/llmessage/llmessageconfig.cpp
index 64e79d6767..64e79d6767 100755..100644
--- a/indra/llmessage/llmessageconfig.cpp
+++ b/indra/llmessage/llmessageconfig.cpp
diff --git a/indra/llmessage/llmessageconfig.h b/indra/llmessage/llmessageconfig.h
index 1b39c386ca..1b39c386ca 100755..100644
--- a/indra/llmessage/llmessageconfig.h
+++ b/indra/llmessage/llmessageconfig.h
diff --git a/indra/llmessage/llmessagereader.cpp b/indra/llmessage/llmessagereader.cpp
index 1d1bee7f59..1d1bee7f59 100755..100644
--- a/indra/llmessage/llmessagereader.cpp
+++ b/indra/llmessage/llmessagereader.cpp
diff --git a/indra/llmessage/llmessagereader.h b/indra/llmessage/llmessagereader.h
index 3b77a6bfe4..3b77a6bfe4 100755..100644
--- a/indra/llmessage/llmessagereader.h
+++ b/indra/llmessage/llmessagereader.h
diff --git a/indra/llmessage/llmessagesenderinterface.h b/indra/llmessage/llmessagesenderinterface.h
index ac0f9f7edb..ac0f9f7edb 100755..100644
--- a/indra/llmessage/llmessagesenderinterface.h
+++ b/indra/llmessage/llmessagesenderinterface.h
diff --git a/indra/llmessage/llmessagetemplate.cpp b/indra/llmessage/llmessagetemplate.cpp
index c4c7e66703..c4c7e66703 100755..100644
--- a/indra/llmessage/llmessagetemplate.cpp
+++ b/indra/llmessage/llmessagetemplate.cpp
diff --git a/indra/llmessage/llmessagetemplate.h b/indra/llmessage/llmessagetemplate.h
index a44e16fc3a..a44e16fc3a 100755..100644
--- a/indra/llmessage/llmessagetemplate.h
+++ b/indra/llmessage/llmessagetemplate.h
diff --git a/indra/llmessage/llmessagetemplateparser.cpp b/indra/llmessage/llmessagetemplateparser.cpp
index 1f7c09dbe5..1f7c09dbe5 100755..100644
--- a/indra/llmessage/llmessagetemplateparser.cpp
+++ b/indra/llmessage/llmessagetemplateparser.cpp
diff --git a/indra/llmessage/llmessagetemplateparser.h b/indra/llmessage/llmessagetemplateparser.h
index 372a2b292d..372a2b292d 100755..100644
--- a/indra/llmessage/llmessagetemplateparser.h
+++ b/indra/llmessage/llmessagetemplateparser.h
diff --git a/indra/llmessage/llmessagethrottle.cpp b/indra/llmessage/llmessagethrottle.cpp
index 579d6d7187..579d6d7187 100755..100644
--- a/indra/llmessage/llmessagethrottle.cpp
+++ b/indra/llmessage/llmessagethrottle.cpp
diff --git a/indra/llmessage/llmessagethrottle.h b/indra/llmessage/llmessagethrottle.h
index 4ea84f712a..4ea84f712a 100755..100644
--- a/indra/llmessage/llmessagethrottle.h
+++ b/indra/llmessage/llmessagethrottle.h
diff --git a/indra/llmessage/llmsgvariabletype.h b/indra/llmessage/llmsgvariabletype.h
index c4de822b46..c4de822b46 100755..100644
--- a/indra/llmessage/llmsgvariabletype.h
+++ b/indra/llmessage/llmsgvariabletype.h
diff --git a/indra/llmessage/llnamevalue.cpp b/indra/llmessage/llnamevalue.cpp
index c51883ee3d..c51883ee3d 100755..100644
--- a/indra/llmessage/llnamevalue.cpp
+++ b/indra/llmessage/llnamevalue.cpp
diff --git a/indra/llmessage/llnamevalue.h b/indra/llmessage/llnamevalue.h
index f8b556b5fe..f8b556b5fe 100755..100644
--- a/indra/llmessage/llnamevalue.h
+++ b/indra/llmessage/llnamevalue.h
diff --git a/indra/llmessage/llnullcipher.cpp b/indra/llmessage/llnullcipher.cpp
index b32e7e6fa6..b32e7e6fa6 100755..100644
--- a/indra/llmessage/llnullcipher.cpp
+++ b/indra/llmessage/llnullcipher.cpp
diff --git a/indra/llmessage/llnullcipher.h b/indra/llmessage/llnullcipher.h
index a9f9a1ce03..a9f9a1ce03 100755..100644
--- a/indra/llmessage/llnullcipher.h
+++ b/indra/llmessage/llnullcipher.h
diff --git a/indra/llmessage/llpacketack.cpp b/indra/llmessage/llpacketack.cpp
index c3c022c297..c3c022c297 100755..100644
--- a/indra/llmessage/llpacketack.cpp
+++ b/indra/llmessage/llpacketack.cpp
diff --git a/indra/llmessage/llpacketack.h b/indra/llmessage/llpacketack.h
index f0ed923f19..f0ed923f19 100755..100644
--- a/indra/llmessage/llpacketack.h
+++ b/indra/llmessage/llpacketack.h
diff --git a/indra/llmessage/llpacketbuffer.cpp b/indra/llmessage/llpacketbuffer.cpp
index ccf991b1a7..ccf991b1a7 100755..100644
--- a/indra/llmessage/llpacketbuffer.cpp
+++ b/indra/llmessage/llpacketbuffer.cpp
diff --git a/indra/llmessage/llpacketbuffer.h b/indra/llmessage/llpacketbuffer.h
index 14b6f9d5d2..14b6f9d5d2 100755..100644
--- a/indra/llmessage/llpacketbuffer.h
+++ b/indra/llmessage/llpacketbuffer.h
diff --git a/indra/llmessage/llpacketring.cpp b/indra/llmessage/llpacketring.cpp
index 687212ea10..687212ea10 100755..100644
--- a/indra/llmessage/llpacketring.cpp
+++ b/indra/llmessage/llpacketring.cpp
diff --git a/indra/llmessage/llpacketring.h b/indra/llmessage/llpacketring.h
index b214271e78..b214271e78 100755..100644
--- a/indra/llmessage/llpacketring.h
+++ b/indra/llmessage/llpacketring.h
diff --git a/indra/llmessage/llpartdata.cpp b/indra/llmessage/llpartdata.cpp
index 53aa35c0f9..53aa35c0f9 100755..100644
--- a/indra/llmessage/llpartdata.cpp
+++ b/indra/llmessage/llpartdata.cpp
diff --git a/indra/llmessage/llpartdata.h b/indra/llmessage/llpartdata.h
index ed5c1a6ac7..ed5c1a6ac7 100755..100644
--- a/indra/llmessage/llpartdata.h
+++ b/indra/llmessage/llpartdata.h
diff --git a/indra/llmessage/llproxy.cpp b/indra/llmessage/llproxy.cpp
index 9b8d19cc3e..9b8d19cc3e 100755..100644
--- a/indra/llmessage/llproxy.cpp
+++ b/indra/llmessage/llproxy.cpp
diff --git a/indra/llmessage/llproxy.h b/indra/llmessage/llproxy.h
index a919370540..a919370540 100755..100644
--- a/indra/llmessage/llproxy.h
+++ b/indra/llmessage/llproxy.h
diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp
index 506ccc98a4..506ccc98a4 100755..100644
--- a/indra/llmessage/llpumpio.cpp
+++ b/indra/llmessage/llpumpio.cpp
diff --git a/indra/llmessage/llpumpio.h b/indra/llmessage/llpumpio.h
index d2c5d37571..d2c5d37571 100755..100644
--- a/indra/llmessage/llpumpio.h
+++ b/indra/llmessage/llpumpio.h
diff --git a/indra/llmessage/llqueryflags.h b/indra/llmessage/llqueryflags.h
index 14a62de04f..14a62de04f 100755..100644
--- a/indra/llmessage/llqueryflags.h
+++ b/indra/llmessage/llqueryflags.h
diff --git a/indra/llmessage/llregionflags.h b/indra/llmessage/llregionflags.h
index 40d7b04a90..eb0c4e6d1e 100755..100644
--- a/indra/llmessage/llregionflags.h
+++ b/indra/llmessage/llregionflags.h
@@ -148,19 +148,20 @@ const U32 ESTATE_ACCESS_ALL = ESTATE_ACCESS_ALLOWED_AGENTS
| ESTATE_ACCESS_BANNED_AGENTS
| ESTATE_ACCESS_MANAGERS;
-// for EstateOwnerRequest, estateaccessdelta message
-const U32 ESTATE_ACCESS_APPLY_TO_ALL_ESTATES = 1 << 0;
-const U32 ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES = 1 << 1;
-
-const U32 ESTATE_ACCESS_ALLOWED_AGENT_ADD = 1 << 2;
-const U32 ESTATE_ACCESS_ALLOWED_AGENT_REMOVE = 1 << 3;
-const U32 ESTATE_ACCESS_ALLOWED_GROUP_ADD = 1 << 4;
-const U32 ESTATE_ACCESS_ALLOWED_GROUP_REMOVE = 1 << 5;
-const U32 ESTATE_ACCESS_BANNED_AGENT_ADD = 1 << 6;
-const U32 ESTATE_ACCESS_BANNED_AGENT_REMOVE = 1 << 7;
-const U32 ESTATE_ACCESS_MANAGER_ADD = 1 << 8;
-const U32 ESTATE_ACCESS_MANAGER_REMOVE = 1 << 9;
-const U32 ESTATE_ACCESS_NO_REPLY = 1 << 10;
+// for EstateOwnerRequest, estateaccessdelta, estateexperiencedelta messages
+const U32 ESTATE_ACCESS_APPLY_TO_ALL_ESTATES = 1U << 0;
+const U32 ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES = 1U << 1;
+
+const U32 ESTATE_ACCESS_ALLOWED_AGENT_ADD = 1U << 2;
+const U32 ESTATE_ACCESS_ALLOWED_AGENT_REMOVE = 1U << 3;
+const U32 ESTATE_ACCESS_ALLOWED_GROUP_ADD = 1U << 4;
+const U32 ESTATE_ACCESS_ALLOWED_GROUP_REMOVE = 1U << 5;
+const U32 ESTATE_ACCESS_BANNED_AGENT_ADD = 1U << 6;
+const U32 ESTATE_ACCESS_BANNED_AGENT_REMOVE = 1U << 7;
+const U32 ESTATE_ACCESS_MANAGER_ADD = 1U << 8;
+const U32 ESTATE_ACCESS_MANAGER_REMOVE = 1U << 9;
+const U32 ESTATE_ACCESS_NO_REPLY = 1U << 10;
+const U32 ESTATE_ACCESS_FAILED_BAN_ESTATE_MANAGER = 1U << 11;
const S32 ESTATE_MAX_MANAGERS = 10;
const S32 ESTATE_MAX_ACCESS_IDS = 500; // max for access, banned
@@ -171,6 +172,26 @@ const U32 SWD_OTHERS_LAND_ONLY = (1 << 0);
const U32 SWD_ALWAYS_RETURN_OBJECTS = (1 << 1);
const U32 SWD_SCRIPTED_ONLY = (1 << 2);
+// Controls experience key validity in the estate
+const U32 EXPERIENCE_KEY_TYPE_NONE = 0;
+const U32 EXPERIENCE_KEY_TYPE_BLOCKED = 1;
+const U32 EXPERIENCE_KEY_TYPE_ALLOWED = 2;
+const U32 EXPERIENCE_KEY_TYPE_TRUSTED = 3;
+
+const U32 EXPERIENCE_KEY_TYPE_FIRST = EXPERIENCE_KEY_TYPE_BLOCKED;
+const U32 EXPERIENCE_KEY_TYPE_LAST = EXPERIENCE_KEY_TYPE_TRUSTED;
+
+//
+const U32 ESTATE_EXPERIENCE_TRUSTED_ADD = 1U << 2;
+const U32 ESTATE_EXPERIENCE_TRUSTED_REMOVE = 1U << 3;
+const U32 ESTATE_EXPERIENCE_ALLOWED_ADD = 1U << 4;
+const U32 ESTATE_EXPERIENCE_ALLOWED_REMOVE = 1U << 5;
+const U32 ESTATE_EXPERIENCE_BLOCKED_ADD = 1U << 6;
+const U32 ESTATE_EXPERIENCE_BLOCKED_REMOVE = 1U << 7;
+
+const S32 ESTATE_MAX_EXPERIENCE_IDS = 8;
+
+
#endif
diff --git a/indra/llmessage/llregionhandle.h b/indra/llmessage/llregionhandle.h
index 085757dcbc..085757dcbc 100755..100644
--- a/indra/llmessage/llregionhandle.h
+++ b/indra/llmessage/llregionhandle.h
diff --git a/indra/llmessage/llsdappservices.cpp b/indra/llmessage/llsdappservices.cpp
index 4ca45267bd..4ca45267bd 100755..100644
--- a/indra/llmessage/llsdappservices.cpp
+++ b/indra/llmessage/llsdappservices.cpp
diff --git a/indra/llmessage/llsdappservices.h b/indra/llmessage/llsdappservices.h
index e76e20cea9..e76e20cea9 100755..100644
--- a/indra/llmessage/llsdappservices.h
+++ b/indra/llmessage/llsdappservices.h
diff --git a/indra/llmessage/llsdhttpserver.cpp b/indra/llmessage/llsdhttpserver.cpp
index 8ac6b3cb12..8ac6b3cb12 100755..100644
--- a/indra/llmessage/llsdhttpserver.cpp
+++ b/indra/llmessage/llsdhttpserver.cpp
diff --git a/indra/llmessage/llsdhttpserver.h b/indra/llmessage/llsdhttpserver.h
index 39f9204604..39f9204604 100755..100644
--- a/indra/llmessage/llsdhttpserver.h
+++ b/indra/llmessage/llsdhttpserver.h
diff --git a/indra/llmessage/llsdmessage.cpp b/indra/llmessage/llsdmessage.cpp
index 61fcc5dd2f..61fcc5dd2f 100755..100644
--- a/indra/llmessage/llsdmessage.cpp
+++ b/indra/llmessage/llsdmessage.cpp
diff --git a/indra/llmessage/llsdmessage.h b/indra/llmessage/llsdmessage.h
index e5d532d6a4..e5d532d6a4 100755..100644
--- a/indra/llmessage/llsdmessage.h
+++ b/indra/llmessage/llsdmessage.h
diff --git a/indra/llmessage/llsdmessagebuilder.cpp b/indra/llmessage/llsdmessagebuilder.cpp
index 49456c71ed..49456c71ed 100755..100644
--- a/indra/llmessage/llsdmessagebuilder.cpp
+++ b/indra/llmessage/llsdmessagebuilder.cpp
diff --git a/indra/llmessage/llsdmessagebuilder.h b/indra/llmessage/llsdmessagebuilder.h
index 9c7c1bfde3..9c7c1bfde3 100755..100644
--- a/indra/llmessage/llsdmessagebuilder.h
+++ b/indra/llmessage/llsdmessagebuilder.h
diff --git a/indra/llmessage/llsdmessagereader.cpp b/indra/llmessage/llsdmessagereader.cpp
index b729ebafa9..b729ebafa9 100755..100644
--- a/indra/llmessage/llsdmessagereader.cpp
+++ b/indra/llmessage/llsdmessagereader.cpp
diff --git a/indra/llmessage/llsdmessagereader.h b/indra/llmessage/llsdmessagereader.h
index 3b3d7fbfbe..3b3d7fbfbe 100755..100644
--- a/indra/llmessage/llsdmessagereader.h
+++ b/indra/llmessage/llsdmessagereader.h
diff --git a/indra/llmessage/llsdrpcclient.cpp b/indra/llmessage/llsdrpcclient.cpp
index eb773ceb3a..eb773ceb3a 100755..100644
--- a/indra/llmessage/llsdrpcclient.cpp
+++ b/indra/llmessage/llsdrpcclient.cpp
diff --git a/indra/llmessage/llsdrpcclient.h b/indra/llmessage/llsdrpcclient.h
index c4e0333ca3..c4e0333ca3 100755..100644
--- a/indra/llmessage/llsdrpcclient.h
+++ b/indra/llmessage/llsdrpcclient.h
diff --git a/indra/llmessage/llsdrpcserver.cpp b/indra/llmessage/llsdrpcserver.cpp
index c3ed19889e..c3ed19889e 100755..100644
--- a/indra/llmessage/llsdrpcserver.cpp
+++ b/indra/llmessage/llsdrpcserver.cpp
diff --git a/indra/llmessage/llsdrpcserver.h b/indra/llmessage/llsdrpcserver.h
index 415bd31c26..415bd31c26 100755..100644
--- a/indra/llmessage/llsdrpcserver.h
+++ b/indra/llmessage/llsdrpcserver.h
diff --git a/indra/llmessage/llservice.cpp b/indra/llmessage/llservice.cpp
index ddcc13d969..ddcc13d969 100755..100644
--- a/indra/llmessage/llservice.cpp
+++ b/indra/llmessage/llservice.cpp
diff --git a/indra/llmessage/llservice.h b/indra/llmessage/llservice.h
index 9c09aeb44c..9c09aeb44c 100755..100644
--- a/indra/llmessage/llservice.h
+++ b/indra/llmessage/llservice.h
diff --git a/indra/llmessage/llservicebuilder.cpp b/indra/llmessage/llservicebuilder.cpp
index cf2e42f95c..cf2e42f95c 100755..100644
--- a/indra/llmessage/llservicebuilder.cpp
+++ b/indra/llmessage/llservicebuilder.cpp
diff --git a/indra/llmessage/llservicebuilder.h b/indra/llmessage/llservicebuilder.h
index 968995edf2..968995edf2 100755..100644
--- a/indra/llmessage/llservicebuilder.h
+++ b/indra/llmessage/llservicebuilder.h
diff --git a/indra/llmessage/llstoredmessage.cpp b/indra/llmessage/llstoredmessage.cpp
index 9f2f2bcda7..9f2f2bcda7 100755..100644
--- a/indra/llmessage/llstoredmessage.cpp
+++ b/indra/llmessage/llstoredmessage.cpp
diff --git a/indra/llmessage/llstoredmessage.h b/indra/llmessage/llstoredmessage.h
index 9c98e2c558..9c98e2c558 100755..100644
--- a/indra/llmessage/llstoredmessage.h
+++ b/indra/llmessage/llstoredmessage.h
diff --git a/indra/llmessage/lltaskname.h b/indra/llmessage/lltaskname.h
index 5dbd9c6223..5dbd9c6223 100755..100644
--- a/indra/llmessage/lltaskname.h
+++ b/indra/llmessage/lltaskname.h
diff --git a/indra/llmessage/llteleportflags.h b/indra/llmessage/llteleportflags.h
index b3fcad036e..b3fcad036e 100755..100644
--- a/indra/llmessage/llteleportflags.h
+++ b/indra/llmessage/llteleportflags.h
diff --git a/indra/llmessage/lltemplatemessagebuilder.cpp b/indra/llmessage/lltemplatemessagebuilder.cpp
index 8d7c4c0282..8d7c4c0282 100755..100644
--- a/indra/llmessage/lltemplatemessagebuilder.cpp
+++ b/indra/llmessage/lltemplatemessagebuilder.cpp
diff --git a/indra/llmessage/lltemplatemessagebuilder.h b/indra/llmessage/lltemplatemessagebuilder.h
index 4f614a4657..4f614a4657 100755..100644
--- a/indra/llmessage/lltemplatemessagebuilder.h
+++ b/indra/llmessage/lltemplatemessagebuilder.h
diff --git a/indra/llmessage/lltemplatemessagedispatcher.cpp b/indra/llmessage/lltemplatemessagedispatcher.cpp
index ee7a4e7e71..ee7a4e7e71 100755..100644
--- a/indra/llmessage/lltemplatemessagedispatcher.cpp
+++ b/indra/llmessage/lltemplatemessagedispatcher.cpp
diff --git a/indra/llmessage/lltemplatemessagedispatcher.h b/indra/llmessage/lltemplatemessagedispatcher.h
index fe77f92074..fe77f92074 100755..100644
--- a/indra/llmessage/lltemplatemessagedispatcher.h
+++ b/indra/llmessage/lltemplatemessagedispatcher.h
diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp
index 406afadd2f..406afadd2f 100755..100644
--- a/indra/llmessage/lltemplatemessagereader.cpp
+++ b/indra/llmessage/lltemplatemessagereader.cpp
diff --git a/indra/llmessage/lltemplatemessagereader.h b/indra/llmessage/lltemplatemessagereader.h
index fcf8f92fa6..fcf8f92fa6 100755..100644
--- a/indra/llmessage/lltemplatemessagereader.h
+++ b/indra/llmessage/lltemplatemessagereader.h
diff --git a/indra/llmessage/llthrottle.cpp b/indra/llmessage/llthrottle.cpp
index 7605da4d3f..7605da4d3f 100755..100644
--- a/indra/llmessage/llthrottle.cpp
+++ b/indra/llmessage/llthrottle.cpp
diff --git a/indra/llmessage/llthrottle.h b/indra/llmessage/llthrottle.h
index e43e54f61b..e43e54f61b 100755..100644
--- a/indra/llmessage/llthrottle.h
+++ b/indra/llmessage/llthrottle.h
diff --git a/indra/llmessage/lltransfermanager.cpp b/indra/llmessage/lltransfermanager.cpp
index ec7b21d8b6..ec7b21d8b6 100755..100644
--- a/indra/llmessage/lltransfermanager.cpp
+++ b/indra/llmessage/lltransfermanager.cpp
diff --git a/indra/llmessage/lltransfermanager.h b/indra/llmessage/lltransfermanager.h
index 6aad153c24..6aad153c24 100755..100644
--- a/indra/llmessage/lltransfermanager.h
+++ b/indra/llmessage/lltransfermanager.h
diff --git a/indra/llmessage/lltransfersourceasset.cpp b/indra/llmessage/lltransfersourceasset.cpp
index 80ed3340c6..80ed3340c6 100755..100644
--- a/indra/llmessage/lltransfersourceasset.cpp
+++ b/indra/llmessage/lltransfersourceasset.cpp
diff --git a/indra/llmessage/lltransfersourceasset.h b/indra/llmessage/lltransfersourceasset.h
index 3abda83cf8..3abda83cf8 100755..100644
--- a/indra/llmessage/lltransfersourceasset.h
+++ b/indra/llmessage/lltransfersourceasset.h
diff --git a/indra/llmessage/lltransfersourcefile.cpp b/indra/llmessage/lltransfersourcefile.cpp
index 1f284a158d..1f284a158d 100755..100644
--- a/indra/llmessage/lltransfersourcefile.cpp
+++ b/indra/llmessage/lltransfersourcefile.cpp
diff --git a/indra/llmessage/lltransfersourcefile.h b/indra/llmessage/lltransfersourcefile.h
index 985042417e..985042417e 100755..100644
--- a/indra/llmessage/lltransfersourcefile.h
+++ b/indra/llmessage/lltransfersourcefile.h
diff --git a/indra/llmessage/lltransfertargetfile.cpp b/indra/llmessage/lltransfertargetfile.cpp
index ca0318a2d6..ca0318a2d6 100755..100644
--- a/indra/llmessage/lltransfertargetfile.cpp
+++ b/indra/llmessage/lltransfertargetfile.cpp
diff --git a/indra/llmessage/lltransfertargetfile.h b/indra/llmessage/lltransfertargetfile.h
index 6d03ff2d2e..6d03ff2d2e 100755..100644
--- a/indra/llmessage/lltransfertargetfile.h
+++ b/indra/llmessage/lltransfertargetfile.h
diff --git a/indra/llmessage/lltransfertargetvfile.cpp b/indra/llmessage/lltransfertargetvfile.cpp
index 3c234b9726..3c234b9726 100755..100644
--- a/indra/llmessage/lltransfertargetvfile.cpp
+++ b/indra/llmessage/lltransfertargetvfile.cpp
diff --git a/indra/llmessage/lltransfertargetvfile.h b/indra/llmessage/lltransfertargetvfile.h
index 23a65e4bb2..23a65e4bb2 100755..100644
--- a/indra/llmessage/lltransfertargetvfile.h
+++ b/indra/llmessage/lltransfertargetvfile.h
diff --git a/indra/llmessage/lltrustedmessageservice.cpp b/indra/llmessage/lltrustedmessageservice.cpp
index 5bd1112cfe..5bd1112cfe 100755..100644
--- a/indra/llmessage/lltrustedmessageservice.cpp
+++ b/indra/llmessage/lltrustedmessageservice.cpp
diff --git a/indra/llmessage/lltrustedmessageservice.h b/indra/llmessage/lltrustedmessageservice.h
index 12a37bb535..12a37bb535 100755..100644
--- a/indra/llmessage/lltrustedmessageservice.h
+++ b/indra/llmessage/lltrustedmessageservice.h
diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp
index 1294379eca..1294379eca 100755..100644
--- a/indra/llmessage/llurlrequest.cpp
+++ b/indra/llmessage/llurlrequest.cpp
diff --git a/indra/llmessage/llurlrequest.h b/indra/llmessage/llurlrequest.h
index 88fccd4bf6..88fccd4bf6 100755..100644
--- a/indra/llmessage/llurlrequest.h
+++ b/indra/llmessage/llurlrequest.h
diff --git a/indra/llmessage/lluseroperation.cpp b/indra/llmessage/lluseroperation.cpp
index c506af19ce..c506af19ce 100755..100644
--- a/indra/llmessage/lluseroperation.cpp
+++ b/indra/llmessage/lluseroperation.cpp
diff --git a/indra/llmessage/lluseroperation.h b/indra/llmessage/lluseroperation.h
index 7db5f0b27f..7db5f0b27f 100755..100644
--- a/indra/llmessage/lluseroperation.h
+++ b/indra/llmessage/lluseroperation.h
diff --git a/indra/llmessage/llvehicleparams.h b/indra/llmessage/llvehicleparams.h
index f34df7744e..f34df7744e 100755..100644
--- a/indra/llmessage/llvehicleparams.h
+++ b/indra/llmessage/llvehicleparams.h
diff --git a/indra/llmessage/llxfer.cpp b/indra/llmessage/llxfer.cpp
index 4aba5cae72..4aba5cae72 100755..100644
--- a/indra/llmessage/llxfer.cpp
+++ b/indra/llmessage/llxfer.cpp
diff --git a/indra/llmessage/llxfer.h b/indra/llmessage/llxfer.h
index edf5eeb82d..edf5eeb82d 100755..100644
--- a/indra/llmessage/llxfer.h
+++ b/indra/llmessage/llxfer.h
diff --git a/indra/llmessage/llxfer_file.cpp b/indra/llmessage/llxfer_file.cpp
index 257a13f277..257a13f277 100755..100644
--- a/indra/llmessage/llxfer_file.cpp
+++ b/indra/llmessage/llxfer_file.cpp
diff --git a/indra/llmessage/llxfer_file.h b/indra/llmessage/llxfer_file.h
index a37dda6732..a37dda6732 100755..100644
--- a/indra/llmessage/llxfer_file.h
+++ b/indra/llmessage/llxfer_file.h
diff --git a/indra/llmessage/llxfer_mem.cpp b/indra/llmessage/llxfer_mem.cpp
index 3bea08f2e5..3bea08f2e5 100755..100644
--- a/indra/llmessage/llxfer_mem.cpp
+++ b/indra/llmessage/llxfer_mem.cpp
diff --git a/indra/llmessage/llxfer_mem.h b/indra/llmessage/llxfer_mem.h
index b5adf837df..b5adf837df 100755..100644
--- a/indra/llmessage/llxfer_mem.h
+++ b/indra/llmessage/llxfer_mem.h
diff --git a/indra/llmessage/llxfer_vfile.cpp b/indra/llmessage/llxfer_vfile.cpp
index 4a378d1d34..4a378d1d34 100755..100644
--- a/indra/llmessage/llxfer_vfile.cpp
+++ b/indra/llmessage/llxfer_vfile.cpp
diff --git a/indra/llmessage/llxfer_vfile.h b/indra/llmessage/llxfer_vfile.h
index 048bf49dcc..048bf49dcc 100755..100644
--- a/indra/llmessage/llxfer_vfile.h
+++ b/indra/llmessage/llxfer_vfile.h
diff --git a/indra/llmessage/llxfermanager.cpp b/indra/llmessage/llxfermanager.cpp
index 0ab67b8dda..0ab67b8dda 100755..100644
--- a/indra/llmessage/llxfermanager.cpp
+++ b/indra/llmessage/llxfermanager.cpp
diff --git a/indra/llmessage/llxfermanager.h b/indra/llmessage/llxfermanager.h
index b3d110e7a1..b3d110e7a1 100755..100644
--- a/indra/llmessage/llxfermanager.h
+++ b/indra/llmessage/llxfermanager.h
diff --git a/indra/llmessage/llxorcipher.cpp b/indra/llmessage/llxorcipher.cpp
index 9053e1b2f1..9053e1b2f1 100755..100644
--- a/indra/llmessage/llxorcipher.cpp
+++ b/indra/llmessage/llxorcipher.cpp
diff --git a/indra/llmessage/llxorcipher.h b/indra/llmessage/llxorcipher.h
index c5b0700f0d..c5b0700f0d 100755..100644
--- a/indra/llmessage/llxorcipher.h
+++ b/indra/llmessage/llxorcipher.h
diff --git a/indra/llmessage/machine.cpp b/indra/llmessage/machine.cpp
index 1e9c9c3c9a..1e9c9c3c9a 100755..100644
--- a/indra/llmessage/machine.cpp
+++ b/indra/llmessage/machine.cpp
diff --git a/indra/llmessage/machine.h b/indra/llmessage/machine.h
index 07aadd47d2..07aadd47d2 100755..100644
--- a/indra/llmessage/machine.h
+++ b/indra/llmessage/machine.h
diff --git a/indra/llmessage/mean_collision_data.h b/indra/llmessage/mean_collision_data.h
index 29de091603..29de091603 100755..100644
--- a/indra/llmessage/mean_collision_data.h
+++ b/indra/llmessage/mean_collision_data.h
diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp
index e9ce94ab3b..e9ce94ab3b 100755..100644
--- a/indra/llmessage/message.cpp
+++ b/indra/llmessage/message.cpp
diff --git a/indra/llmessage/message.h b/indra/llmessage/message.h
index 348b09b992..348b09b992 100755..100644
--- a/indra/llmessage/message.h
+++ b/indra/llmessage/message.h
diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp
index a62b9c3227..5c6b3d5fab 100755..100644
--- a/indra/llmessage/message_prehash.cpp
+++ b/indra/llmessage/message_prehash.cpp
@@ -1385,3 +1385,5 @@ char const* const _PREHASH_AppearanceVersion = LLMessageStringTable::getInstance
char const* const _PREHASH_CofVersion = LLMessageStringTable::getInstance()->getString("CofVersion");
char const* const _PREHASH_AppearanceHover = LLMessageStringTable::getInstance()->getString("AppearanceHover");
char const* const _PREHASH_HoverHeight = LLMessageStringTable::getInstance()->getString("HoverHeight");
+char const* const _PREHASH_Experience = LLMessageStringTable::getInstance()->getString("Experience");
+char const* const _PREHASH_ExperienceID = LLMessageStringTable::getInstance()->getString("ExperienceID");
diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h
index 573c8e466f..e696c3b0ca 100755..100644
--- a/indra/llmessage/message_prehash.h
+++ b/indra/llmessage/message_prehash.h
@@ -1385,4 +1385,6 @@ extern char const* const _PREHASH_AppearanceVersion;
extern char const* const _PREHASH_CofVersion;
extern char const* const _PREHASH_AppearanceHover;
extern char const* const _PREHASH_HoverHeight;
+extern char const* const _PREHASH_Experience;
+extern char const* const _PREHASH_ExperienceID;
#endif
diff --git a/indra/llmessage/message_string_table.cpp b/indra/llmessage/message_string_table.cpp
index e4f5fb3a38..e4f5fb3a38 100755..100644
--- a/indra/llmessage/message_string_table.cpp
+++ b/indra/llmessage/message_string_table.cpp
diff --git a/indra/llmessage/net.cpp b/indra/llmessage/net.cpp
index 523bcbb60d..523bcbb60d 100755..100644
--- a/indra/llmessage/net.cpp
+++ b/indra/llmessage/net.cpp
diff --git a/indra/llmessage/net.h b/indra/llmessage/net.h
index beb67bae4e..beb67bae4e 100755..100644
--- a/indra/llmessage/net.h
+++ b/indra/llmessage/net.h
diff --git a/indra/llmessage/partsyspacket.cpp b/indra/llmessage/partsyspacket.cpp
index d87de38aa5..d87de38aa5 100755..100644
--- a/indra/llmessage/partsyspacket.cpp
+++ b/indra/llmessage/partsyspacket.cpp
diff --git a/indra/llmessage/partsyspacket.h b/indra/llmessage/partsyspacket.h
index d9abecea3f..d9abecea3f 100755..100644
--- a/indra/llmessage/partsyspacket.h
+++ b/indra/llmessage/partsyspacket.h
diff --git a/indra/llmessage/patch_code.cpp b/indra/llmessage/patch_code.cpp
index 32f8d80782..32f8d80782 100755..100644
--- a/indra/llmessage/patch_code.cpp
+++ b/indra/llmessage/patch_code.cpp
diff --git a/indra/llmessage/patch_code.h b/indra/llmessage/patch_code.h
index 4c87c9808a..4c87c9808a 100755..100644
--- a/indra/llmessage/patch_code.h
+++ b/indra/llmessage/patch_code.h
diff --git a/indra/llmessage/patch_dct.cpp b/indra/llmessage/patch_dct.cpp
index b5518b61ea..b5518b61ea 100755..100644
--- a/indra/llmessage/patch_dct.cpp
+++ b/indra/llmessage/patch_dct.cpp
diff --git a/indra/llmessage/patch_dct.h b/indra/llmessage/patch_dct.h
index 101231ec84..101231ec84 100755..100644
--- a/indra/llmessage/patch_dct.h
+++ b/indra/llmessage/patch_dct.h
diff --git a/indra/llmessage/patch_idct.cpp b/indra/llmessage/patch_idct.cpp
index 9ce35df284..9ce35df284 100755..100644
--- a/indra/llmessage/patch_idct.cpp
+++ b/indra/llmessage/patch_idct.cpp
diff --git a/indra/llmessage/sound_ids.cpp b/indra/llmessage/sound_ids.cpp
index 2b8a0807c6..2b8a0807c6 100755..100644
--- a/indra/llmessage/sound_ids.cpp
+++ b/indra/llmessage/sound_ids.cpp
diff --git a/indra/llmessage/sound_ids.h b/indra/llmessage/sound_ids.h
index 6a2e343ad3..6a2e343ad3 100755..100644
--- a/indra/llmessage/sound_ids.h
+++ b/indra/llmessage/sound_ids.h
diff --git a/indra/llmessage/tests/commtest.h b/indra/llmessage/tests/commtest.h
index 0d149b5258..0d149b5258 100755..100644
--- a/indra/llmessage/tests/commtest.h
+++ b/indra/llmessage/tests/commtest.h
diff --git a/indra/llmessage/tests/llareslistener_test.cpp b/indra/llmessage/tests/llareslistener_test.cpp
index c04696c86b..c04696c86b 100755..100644
--- a/indra/llmessage/tests/llareslistener_test.cpp
+++ b/indra/llmessage/tests/llareslistener_test.cpp
diff --git a/indra/llmessage/tests/llavatarnamecache_test.cpp b/indra/llmessage/tests/llavatarnamecache_test.cpp
index ec6b65d483..ec6b65d483 100755..100644
--- a/indra/llmessage/tests/llavatarnamecache_test.cpp
+++ b/indra/llmessage/tests/llavatarnamecache_test.cpp
diff --git a/indra/llmessage/tests/llcurl_stub.cpp b/indra/llmessage/tests/llcurl_stub.cpp
index b7fdf4f437..b7fdf4f437 100755..100644
--- a/indra/llmessage/tests/llcurl_stub.cpp
+++ b/indra/llmessage/tests/llcurl_stub.cpp
diff --git a/indra/llmessage/tests/llhost_test.cpp b/indra/llmessage/tests/llhost_test.cpp
index efca1bbfca..efca1bbfca 100755..100644
--- a/indra/llmessage/tests/llhost_test.cpp
+++ b/indra/llmessage/tests/llhost_test.cpp
diff --git a/indra/llmessage/tests/llhttpclient_test.cpp b/indra/llmessage/tests/llhttpclient_test.cpp
index a32bfa59ce..a32bfa59ce 100755..100644
--- a/indra/llmessage/tests/llhttpclient_test.cpp
+++ b/indra/llmessage/tests/llhttpclient_test.cpp
diff --git a/indra/llmessage/tests/llhttpclientadapter_test.cpp b/indra/llmessage/tests/llhttpclientadapter_test.cpp
index e9ce116bb3..e9ce116bb3 100755..100644
--- a/indra/llmessage/tests/llhttpclientadapter_test.cpp
+++ b/indra/llmessage/tests/llhttpclientadapter_test.cpp
diff --git a/indra/llmessage/tests/llhttpnode_stub.cpp b/indra/llmessage/tests/llhttpnode_stub.cpp
index 479a256bdd..479a256bdd 100755..100644
--- a/indra/llmessage/tests/llhttpnode_stub.cpp
+++ b/indra/llmessage/tests/llhttpnode_stub.cpp
diff --git a/indra/llmessage/tests/llmockhttpclient.h b/indra/llmessage/tests/llmockhttpclient.h
index af26bf8803..af26bf8803 100755..100644
--- a/indra/llmessage/tests/llmockhttpclient.h
+++ b/indra/llmessage/tests/llmockhttpclient.h
diff --git a/indra/llmessage/tests/llnamevalue_test.cpp b/indra/llmessage/tests/llnamevalue_test.cpp
index 8902fdd2e8..8902fdd2e8 100755..100644
--- a/indra/llmessage/tests/llnamevalue_test.cpp
+++ b/indra/llmessage/tests/llnamevalue_test.cpp
diff --git a/indra/llmessage/tests/llpartdata_test.cpp b/indra/llmessage/tests/llpartdata_test.cpp
index de81e0bbb2..de81e0bbb2 100755..100644
--- a/indra/llmessage/tests/llpartdata_test.cpp
+++ b/indra/llmessage/tests/llpartdata_test.cpp
diff --git a/indra/llmessage/tests/llsdmessage_test.cpp b/indra/llmessage/tests/llsdmessage_test.cpp
index 44b024a83f..44b024a83f 100755..100644
--- a/indra/llmessage/tests/llsdmessage_test.cpp
+++ b/indra/llmessage/tests/llsdmessage_test.cpp
diff --git a/indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp b/indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp
index 3b04530c1a..3b04530c1a 100755..100644
--- a/indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp
+++ b/indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp
diff --git a/indra/llmessage/tests/lltesthttpclientadapter.cpp b/indra/llmessage/tests/lltesthttpclientadapter.cpp
index 4539e4a540..4539e4a540 100755..100644
--- a/indra/llmessage/tests/lltesthttpclientadapter.cpp
+++ b/indra/llmessage/tests/lltesthttpclientadapter.cpp
diff --git a/indra/llmessage/tests/lltesthttpclientadapter.h b/indra/llmessage/tests/lltesthttpclientadapter.h
index c29cbb3a2a..c29cbb3a2a 100755..100644
--- a/indra/llmessage/tests/lltesthttpclientadapter.h
+++ b/indra/llmessage/tests/lltesthttpclientadapter.h
diff --git a/indra/llmessage/tests/lltestmessagesender.cpp b/indra/llmessage/tests/lltestmessagesender.cpp
index ee40e0249e..ee40e0249e 100755..100644
--- a/indra/llmessage/tests/lltestmessagesender.cpp
+++ b/indra/llmessage/tests/lltestmessagesender.cpp
diff --git a/indra/llmessage/tests/lltestmessagesender.h b/indra/llmessage/tests/lltestmessagesender.h
index bb89289585..bb89289585 100755..100644
--- a/indra/llmessage/tests/lltestmessagesender.h
+++ b/indra/llmessage/tests/lltestmessagesender.h
diff --git a/indra/llmessage/tests/lltrustedmessageservice_test.cpp b/indra/llmessage/tests/lltrustedmessageservice_test.cpp
index 55748ad27e..55748ad27e 100755..100644
--- a/indra/llmessage/tests/lltrustedmessageservice_test.cpp
+++ b/indra/llmessage/tests/lltrustedmessageservice_test.cpp
diff --git a/indra/llmessage/tests/llxfer_file_test.cpp b/indra/llmessage/tests/llxfer_file_test.cpp
index a8c1adf9b4..a8c1adf9b4 100755..100644
--- a/indra/llmessage/tests/llxfer_file_test.cpp
+++ b/indra/llmessage/tests/llxfer_file_test.cpp
diff --git a/indra/llmessage/tests/networkio.h b/indra/llmessage/tests/networkio.h
index 2aff90ca1e..2aff90ca1e 100755..100644
--- a/indra/llmessage/tests/networkio.h
+++ b/indra/llmessage/tests/networkio.h