Merge branch 'V2MultiWear' of git://github.com/Shyotl/SingularityViewer into V2MultiWear
Conflicts: indra/newview/lldynamictexture.cpp
This commit is contained in:
@@ -645,7 +645,7 @@ void LLMultisampleBuffer::release()
|
||||
|
||||
if (mTex.size() > 0)
|
||||
{
|
||||
sBytesAllocated -= mResX*mResY*4*mResX*mResY*4*mTex.size();
|
||||
sBytesAllocated -= mResX*mResY*4*mTex.size();
|
||||
glDeleteRenderbuffers(mTex.size(), (GLuint *) &mTex[0]);
|
||||
mTex.clear();
|
||||
|
||||
|
||||
@@ -396,8 +396,8 @@
|
||||
|
||||
<attachment_point
|
||||
id="39"
|
||||
group="9"
|
||||
pie_slice="1"
|
||||
group="6"
|
||||
pie_slice="0"
|
||||
name="Neck"
|
||||
joint="mNeck"
|
||||
position="0 0 0"
|
||||
@@ -406,8 +406,8 @@
|
||||
|
||||
<attachment_point
|
||||
id="40"
|
||||
group="9"
|
||||
pie_slice="2"
|
||||
group="6"
|
||||
pie_slice="4"
|
||||
name="Root"
|
||||
joint="mRoot"
|
||||
position="0 0 0"
|
||||
|
||||
@@ -2,31 +2,25 @@
|
||||
* @file llclassifiedinfo.cpp
|
||||
* @brief LLClassifiedInfo class definition
|
||||
*
|
||||
* $LicenseInfo:firstyear=2005&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2005-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* 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.
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
* 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.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* 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$
|
||||
*/
|
||||
|
||||
@@ -38,35 +32,19 @@
|
||||
LLClassifiedInfo::cat_map LLClassifiedInfo::sCategories;
|
||||
|
||||
// static
|
||||
void LLClassifiedInfo::loadCategories(LLUserAuth::options_t classified_options)
|
||||
void LLClassifiedInfo::loadCategories(const LLSD& options)
|
||||
{
|
||||
LLUserAuth::options_t::iterator resp_it;
|
||||
for (resp_it = classified_options.begin();
|
||||
resp_it != classified_options.end();
|
||||
++resp_it)
|
||||
for(LLSD::array_const_iterator resp_it = options.beginArray(),
|
||||
end = options.endArray(); resp_it != end; ++resp_it)
|
||||
{
|
||||
const LLUserAuth::response_t& response = *resp_it;
|
||||
|
||||
LLUserAuth::response_t::const_iterator option_it;
|
||||
|
||||
S32 cat_id = 0;
|
||||
option_it = response.find("category_id");
|
||||
if (option_it != response.end())
|
||||
LLSD name = (*resp_it)["category_name"];
|
||||
if(name.isDefined())
|
||||
{
|
||||
cat_id = atoi(option_it->second.c_str());
|
||||
LLSD id = (*resp_it)["category_id"];
|
||||
if(id.isDefined())
|
||||
{
|
||||
LLClassifiedInfo::sCategories[id.asInteger()] = name.asString();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Add the category id/name pair
|
||||
option_it = response.find("category_name");
|
||||
if (option_it != response.end())
|
||||
{
|
||||
LLClassifiedInfo::sCategories[cat_id] = option_it->second;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,31 +2,25 @@
|
||||
* @file llclassifiedinfo.h
|
||||
* @brief LLClassifiedInfo class definition
|
||||
*
|
||||
* $LicenseInfo:firstyear=2005&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2005-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* 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.
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
* 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.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* 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$
|
||||
*/
|
||||
|
||||
@@ -37,7 +31,6 @@
|
||||
|
||||
#include "v3dmath.h"
|
||||
#include "lluuid.h"
|
||||
#include "lluserauth.h"
|
||||
|
||||
class LLMessageSystem;
|
||||
|
||||
@@ -46,7 +39,7 @@ class LLClassifiedInfo
|
||||
public:
|
||||
LLClassifiedInfo() {}
|
||||
|
||||
static void loadCategories(LLUserAuth::options_t event_options);
|
||||
static void loadCategories(const LLSD& options);
|
||||
|
||||
typedef std::map<U32, std::string> cat_map;
|
||||
static cat_map sCategories;
|
||||
|
||||
@@ -152,8 +152,8 @@ void LLViewerDynamicTexture::preRender(BOOL clear_depth)
|
||||
mOrigin.mY += window_pos.mY;
|
||||
mOrigin.mY = llmax(mOrigin.mY, 0) ;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
// Set up camera
|
||||
LLViewerCamera* camera = LLViewerCamera::getInstance();
|
||||
@@ -221,7 +221,6 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
|
||||
}
|
||||
|
||||
bool use_fbo = gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete();
|
||||
|
||||
if (use_fbo)
|
||||
{
|
||||
gPipeline.mWaterDis.bindTarget();
|
||||
|
||||
@@ -101,35 +101,19 @@ void LLEventInfo::unpack(LLMessageSystem *msg)
|
||||
}
|
||||
|
||||
// static
|
||||
void LLEventInfo::loadCategories(LLUserAuth::options_t event_options)
|
||||
void LLEventInfo::loadCategories(LLSD& event_options)
|
||||
{
|
||||
LLUserAuth::options_t::iterator resp_it;
|
||||
for (resp_it = event_options.begin();
|
||||
resp_it != event_options.end();
|
||||
++resp_it)
|
||||
for(LLSD::array_const_iterator resp_it = event_options.beginArray(),
|
||||
end = event_options.endArray(); resp_it != end; ++resp_it)
|
||||
{
|
||||
const LLUserAuth::response_t& response = *resp_it;
|
||||
|
||||
LLUserAuth::response_t::const_iterator option_it;
|
||||
|
||||
S32 cat_id = 0;
|
||||
option_it = response.find("category_id");
|
||||
if (option_it != response.end())
|
||||
LLSD name = (*resp_it)["category_name"];
|
||||
if(name.isDefined())
|
||||
{
|
||||
cat_id = atoi(option_it->second.c_str());
|
||||
LLSD id = (*resp_it)["category_id"];
|
||||
if(id.isDefined())
|
||||
{
|
||||
LLEventInfo::sCategories[id.asInteger()] = name.asString();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Add the category id/name pair
|
||||
option_it = response.find("category_name");
|
||||
if (option_it != response.end())
|
||||
{
|
||||
LLEventInfo::sCategories[cat_id] = option_it->second;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ public:
|
||||
|
||||
void unpack(LLMessageSystem *msg);
|
||||
|
||||
static void loadCategories(LLUserAuth::options_t event_options);
|
||||
static void loadCategories(LLSD& event_options);
|
||||
|
||||
public:
|
||||
std::string mName;
|
||||
|
||||
@@ -115,15 +115,12 @@ bool LLEventNotifier::handleResponse(U32 eventId, LLVector3d eventPos, const LLS
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLEventNotifier::load(const LLUserAuth::options_t& event_options)
|
||||
void LLEventNotifier::load(const LLSD& event_options)
|
||||
{
|
||||
LLUserAuth::options_t::const_iterator resp_it;
|
||||
for (resp_it = event_options.begin();
|
||||
resp_it != event_options.end();
|
||||
++resp_it)
|
||||
for(LLSD::array_const_iterator resp_it = event_options.beginArray(),
|
||||
end = event_options.endArray(); resp_it != end; ++resp_it)
|
||||
{
|
||||
const LLUserAuth::response_t& response = *resp_it;
|
||||
|
||||
LLSD response = *resp_it;
|
||||
LLEventNotification *new_enp = new LLEventNotification();
|
||||
|
||||
if (!new_enp->load(response))
|
||||
@@ -134,6 +131,7 @@ void LLEventNotifier::load(const LLUserAuth::options_t& event_options)
|
||||
|
||||
mEventNotifications[new_enp->getEventID()] = new_enp;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void LLEventNotifier::add(U32 eventId)
|
||||
@@ -216,48 +214,47 @@ LLEventNotification::~LLEventNotification()
|
||||
}
|
||||
|
||||
|
||||
BOOL LLEventNotification::load(const LLUserAuth::response_t &response)
|
||||
BOOL LLEventNotification::load(const LLSD& response)
|
||||
{
|
||||
|
||||
LLUserAuth::response_t::const_iterator option_it;
|
||||
BOOL event_ok = TRUE;
|
||||
option_it = response.find("event_id");
|
||||
if (option_it != response.end())
|
||||
LLSD event_id = response["event_id"];
|
||||
if (event_id.isDefined())
|
||||
{
|
||||
mEventID = atoi(option_it->second.c_str());
|
||||
mEventID = event_id.asInteger();
|
||||
}
|
||||
else
|
||||
{
|
||||
event_ok = FALSE;
|
||||
}
|
||||
|
||||
option_it = response.find("event_name");
|
||||
if (option_it != response.end())
|
||||
LLSD event_name = response["event_name"];
|
||||
if (event_name.isDefined())
|
||||
{
|
||||
llinfos << "Event: " << option_it->second << llendl;
|
||||
mEventName = option_it->second;
|
||||
mEventName = event_name.asString();
|
||||
llinfos << "Event: " << mEventName << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
event_ok = FALSE;
|
||||
}
|
||||
/*
|
||||
option_it = response.find("event_date");
|
||||
if (option_it != response.end())
|
||||
LLSD event_date = response["event_date"];
|
||||
if (event_date.isDefined())
|
||||
{
|
||||
llinfos << "EventDate: " << option_it->second << llendl;
|
||||
mEventDateStr = option_it->second;
|
||||
mEventDate = event_date.asString();
|
||||
llinfos << "EventDate: " << mEventDate << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
event_ok = FALSE;
|
||||
}
|
||||
*/
|
||||
option_it = response.find("event_date_ut");
|
||||
if (option_it != response.end())
|
||||
LLSD event_date_ut = response["event_date_ut"];
|
||||
if (event_date_ut.isDefined())
|
||||
{
|
||||
llinfos << "EventDate: " << option_it->second << llendl;
|
||||
mEventDate = strtoul(option_it->second.c_str(), NULL, 10);
|
||||
std::string date = event_date_ut.asString();
|
||||
llinfos << "EventDate: " << date << llendl;
|
||||
mEventDate = strtoul(date.c_str(), NULL, 10);
|
||||
|
||||
// Convert to Pacific, based on server's opinion of whether
|
||||
// it's daylight savings time there.
|
||||
@@ -282,44 +279,44 @@ BOOL LLEventNotification::load(const LLUserAuth::response_t &response)
|
||||
S32 x_region = 0;
|
||||
S32 y_region = 0;
|
||||
|
||||
option_it = response.find("grid_x");
|
||||
if (option_it != response.end())
|
||||
LLSD grid_x_sd = response["grid_x"];
|
||||
if (grid_x_sd.isDefined())
|
||||
{
|
||||
llinfos << "GridX: " << option_it->second << llendl;
|
||||
grid_x= atoi(option_it->second.c_str());
|
||||
grid_x= grid_x_sd.asInteger();
|
||||
llinfos << "GridX: " << grid_x << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
event_ok = FALSE;
|
||||
}
|
||||
|
||||
option_it = response.find("grid_y");
|
||||
if (option_it != response.end())
|
||||
LLSD grid_y_sd = response["grid_y"];
|
||||
if (grid_y_sd.isDefined())
|
||||
{
|
||||
llinfos << "GridY: " << option_it->second << llendl;
|
||||
grid_y = atoi(option_it->second.c_str());
|
||||
grid_y= grid_y_sd.asInteger();
|
||||
llinfos << "GridY: " << grid_y << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
event_ok = FALSE;
|
||||
}
|
||||
|
||||
option_it = response.find("x_region");
|
||||
if (option_it != response.end())
|
||||
{
|
||||
llinfos << "RegionX: " << option_it->second << llendl;
|
||||
x_region = atoi(option_it->second.c_str());
|
||||
LLSD x_region_sd = response["x_region"];
|
||||
if (x_region_sd.isDefined())
|
||||
{
|
||||
x_region = x_region_sd.asInteger();
|
||||
llinfos << "RegionX: " << x_region << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
event_ok = FALSE;
|
||||
}
|
||||
|
||||
option_it = response.find("y_region");
|
||||
if (option_it != response.end())
|
||||
LLSD y_region_sd = response["y_region"];
|
||||
if (y_region_sd.isDefined())
|
||||
{
|
||||
llinfos << "RegionY: " << option_it->second << llendl;
|
||||
y_region = atoi(option_it->second.c_str());
|
||||
y_region = y_region_sd.asInteger();
|
||||
llinfos << "RegionY: " << y_region << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -52,7 +52,7 @@ public:
|
||||
void add(LLEventInfo &event_info); // Add a new notification for an event
|
||||
void add(U32 eventId);
|
||||
|
||||
void load(const LLUserAuth::options_t& event_options); // In the format that it comes in from LLUserAuth
|
||||
void load(const LLSD& event_options); // In the format that it comes in from login
|
||||
void remove(U32 event_id);
|
||||
|
||||
BOOL hasNotification(const U32 event_id);
|
||||
@@ -73,7 +73,7 @@ public:
|
||||
LLEventNotification();
|
||||
virtual ~LLEventNotification();
|
||||
|
||||
BOOL load(const LLUserAuth::response_t &en); // In the format it comes in from LLUserAuth
|
||||
BOOL load(const LLSD& en); // In the format it comes in from LLUserAuth
|
||||
BOOL load(const LLEventInfo &event_info); // From existing event_info on the viewer.
|
||||
//void setEventID(const U32 event_id);
|
||||
//void setEventName(std::string &event_name);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -44,6 +44,7 @@
|
||||
#include "llviewercontrol.h"
|
||||
#include "llxmlrpctransaction.h"
|
||||
#include "llsdutil.h"
|
||||
#include "stringize.h"
|
||||
|
||||
// NOTE: MUST include these after otherincludes since queue gets redefined!?!!
|
||||
#include <curl/curl.h>
|
||||
@@ -86,7 +87,6 @@ void LLUserAuth::reset()
|
||||
delete mTransaction;
|
||||
mTransaction = NULL;
|
||||
mResponses.clear();
|
||||
mOptions.clear();
|
||||
mResult.clear();
|
||||
}
|
||||
|
||||
@@ -319,51 +319,6 @@ LLUserAuth::UserAuthcode LLUserAuth::authResponse()
|
||||
return mAuthResponse;
|
||||
}
|
||||
|
||||
static void parseOptionInto(
|
||||
const std::string& id, XMLRPC_VALUE option, LLUserAuth::options_t& options)
|
||||
{
|
||||
std::string key;
|
||||
std::string val;
|
||||
XMLRPC_VALUE_TYPE_EASY type;
|
||||
XMLRPC_VALUE row = XMLRPC_VectorRewind(option);
|
||||
while(row)
|
||||
{
|
||||
XMLRPC_VALUE opt = XMLRPC_VectorRewind(row);
|
||||
LLUserAuth::response_t responses;
|
||||
while(opt)
|
||||
{
|
||||
key.assign(XMLRPC_GetValueID(opt));
|
||||
//llinfos << "option key: " << key << llendl;
|
||||
type = XMLRPC_GetValueTypeEasy(opt);
|
||||
if(xmlrpc_type_string == type)
|
||||
{
|
||||
val.assign(XMLRPC_GetValueString(opt));
|
||||
//llinfos << "string val: " << val << llendl;
|
||||
}
|
||||
else if(xmlrpc_type_int == type)
|
||||
{
|
||||
val = llformat("%d", XMLRPC_GetValueInt(opt));
|
||||
//llinfos << "int val: " << val << llendl;
|
||||
}
|
||||
else if(xmlrpc_type_double == type)
|
||||
{
|
||||
val = llformat("%g", XMLRPC_GetValueDouble(opt));
|
||||
//llinfos << "double val: " << val << llendl;
|
||||
}
|
||||
else
|
||||
{ // Can't understand the type
|
||||
val = "???";
|
||||
//llinfos << "unknown value type: " << type << llendl;
|
||||
}
|
||||
|
||||
responses.insert(LLUserAuth::response_t::value_type(key, val));
|
||||
opt = XMLRPC_VectorNext(row);
|
||||
}
|
||||
options.push_back(responses);
|
||||
row = XMLRPC_VectorNext(option);
|
||||
}
|
||||
}
|
||||
|
||||
LLUserAuth::UserAuthcode LLUserAuth::parseResponse()
|
||||
{
|
||||
// The job of this function is to parse sCurlDownloadArea and
|
||||
@@ -376,78 +331,90 @@ LLUserAuth::UserAuthcode LLUserAuth::parseResponse()
|
||||
|
||||
// clear out any old parsing
|
||||
mResponses.clear();
|
||||
mOptions.clear();
|
||||
|
||||
// Now, parse everything
|
||||
std::string key;
|
||||
std::string val;
|
||||
XMLRPC_VALUE param = NULL;
|
||||
XMLRPC_VALUE current = NULL;
|
||||
XMLRPC_VALUE_TYPE_EASY type;
|
||||
param = XMLRPC_RequestGetData(response);
|
||||
if(!param) goto exit;
|
||||
current = XMLRPC_VectorRewind(param);
|
||||
while(current)
|
||||
XMLRPC_VALUE param = XMLRPC_RequestGetData(response);
|
||||
if (! param)
|
||||
{
|
||||
key.assign(XMLRPC_GetValueID(current));
|
||||
lldebugs << "key: " << key << llendl;
|
||||
type = XMLRPC_GetValueTypeEasy(current);
|
||||
if(xmlrpc_type_string == type)
|
||||
{
|
||||
val.assign(XMLRPC_GetValueString(current));
|
||||
lldebugs << "val: " << val << llendl;
|
||||
mResponses.insert(response_t::value_type(key, val));
|
||||
}
|
||||
else if(xmlrpc_type_int == type)
|
||||
{
|
||||
val = llformat( "%d", XMLRPC_GetValueInt(current));
|
||||
lldebugs << "val: " << val << llendl;
|
||||
mResponses.insert(response_t::value_type(key, val));
|
||||
}
|
||||
else if(xmlrpc_type_array == type)
|
||||
{
|
||||
options_t options;
|
||||
parseOptionInto(key, current, options);
|
||||
mOptions.insert(all_options_t::value_type(key, options));
|
||||
}
|
||||
else
|
||||
{
|
||||
// whoops - bad response
|
||||
llwarns << "Unhandled xmlrpc type, key, value: " << type << " "
|
||||
<< key << " " << val << "." << llendl;
|
||||
rv = E_UNHANDLED_ERROR;
|
||||
break;
|
||||
}
|
||||
current = XMLRPC_VectorNext(param);
|
||||
rv = E_OK;
|
||||
lldebugs << "Response contains no data" << LL_ENDL;
|
||||
return rv;
|
||||
}
|
||||
|
||||
exit:
|
||||
// Now, parse everything
|
||||
mResponses = parseValues(rv, "", param);
|
||||
return rv;
|
||||
}
|
||||
|
||||
const std::string& LLUserAuth::getResponse(const std::string& key) const
|
||||
LLSD LLUserAuth::parseValues(UserAuthcode &auth_code, const std::string& key_pfx, XMLRPC_VALUE param)
|
||||
{
|
||||
response_t::const_iterator it = mResponses.find(key);
|
||||
if(it != mResponses.end())
|
||||
auth_code = E_OK;
|
||||
LLSD responses;
|
||||
for(XMLRPC_VALUE current = XMLRPC_VectorRewind(param); current;
|
||||
current = XMLRPC_VectorNext(param))
|
||||
{
|
||||
return((*it).second);
|
||||
}
|
||||
return LLStringUtil::null;
|
||||
}
|
||||
|
||||
BOOL LLUserAuth::getOptions(const std::string& key, options_t& options) const
|
||||
{
|
||||
all_options_t::const_iterator it = mOptions.find(key);
|
||||
if(it != mOptions.end())
|
||||
{
|
||||
// found the option set, copy them onto the container.
|
||||
std::back_insert_iterator<options_t> ii(options);
|
||||
std::copy((*it).second.begin(), (*it).second.end(), ii);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
std::string key(XMLRPC_GetValueID(current));
|
||||
lldebugs << "key: " << key_pfx << key << llendl;
|
||||
XMLRPC_VALUE_TYPE_EASY type = XMLRPC_GetValueTypeEasy(current);
|
||||
if(xmlrpc_type_string == type)
|
||||
{
|
||||
LLSD::String val(XMLRPC_GetValueString(current));
|
||||
lldebugs << "val: " << val << llendl;
|
||||
responses.insert(key,val);
|
||||
}
|
||||
else if(xmlrpc_type_int == type)
|
||||
{
|
||||
LLSD::Integer val(XMLRPC_GetValueInt(current));
|
||||
lldebugs << "val: " << val << llendl;
|
||||
responses.insert(key,val);
|
||||
}
|
||||
else if (xmlrpc_type_double == type)
|
||||
{
|
||||
LLSD::Real val(XMLRPC_GetValueDouble(current));
|
||||
lldebugs << "val: " << val << llendl;
|
||||
responses.insert(key,val);
|
||||
}
|
||||
else if(xmlrpc_type_array == type)
|
||||
{
|
||||
// We expect this to be an array of submaps. Walk the array,
|
||||
// recursively parsing each submap and collecting them.
|
||||
LLSD array;
|
||||
int i = 0; // for descriptive purposes
|
||||
for (XMLRPC_VALUE row = XMLRPC_VectorRewind(current); row;
|
||||
row = XMLRPC_VectorNext(current), ++i)
|
||||
{
|
||||
// Recursive call. For the lower-level key_pfx, if 'key'
|
||||
// is "foo", pass "foo[0]:", then "foo[1]:", etc. In the
|
||||
// nested call, a subkey "bar" will then be logged as
|
||||
// "foo[0]:bar", and so forth.
|
||||
// Parse the scalar subkey/value pairs from this array
|
||||
// entry into a temp submap. Collect such submaps in 'array'.
|
||||
std::string key_prefix = key_pfx;
|
||||
array.append(parseValues(auth_code,
|
||||
STRINGIZE(key_pfx << key << '[' << i << "]:"),
|
||||
row));
|
||||
}
|
||||
// Having collected an 'array' of 'submap's, insert that whole
|
||||
// 'array' as the value of this 'key'.
|
||||
responses.insert(key, array);
|
||||
}
|
||||
else if (xmlrpc_type_struct == type)
|
||||
{
|
||||
LLSD submap = parseValues(auth_code,
|
||||
STRINGIZE(key_pfx << key << ':'),
|
||||
current);
|
||||
responses.insert(key, submap);
|
||||
}
|
||||
else
|
||||
{
|
||||
// whoops - unrecognized type
|
||||
llwarns << "Unhandled xmlrpc type " << type << " for key "
|
||||
<< key_pfx << key << LL_ENDL;
|
||||
responses.insert(key, STRINGIZE("<bad XMLRPC type " << type << '>'));
|
||||
auth_code = E_UNHANDLED_ERROR;
|
||||
}
|
||||
}
|
||||
return responses;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -90,10 +90,6 @@ public:
|
||||
E_LAST // never use!
|
||||
} UserAuthcode;
|
||||
|
||||
// used for holding options
|
||||
typedef std::map<std::string, std::string> response_t;
|
||||
typedef std::vector<response_t> options_t;
|
||||
|
||||
// viewer auth version
|
||||
void authenticate(
|
||||
const std::string& auth_uri,
|
||||
@@ -140,8 +136,8 @@ public:
|
||||
|
||||
// function to get a direct reponse from the login api by
|
||||
// name. returns NULL if the named response was not found.
|
||||
const std::string& getResponse(const std::string& name) const;
|
||||
BOOL getOptions(const std::string& name, options_t& options) const;
|
||||
LLSD getResponse() const { return mResponses; }
|
||||
LLSD getResponse(const std::string& entry) const { return mResponses[entry]; }
|
||||
|
||||
F64 getLastTransferRateBPS() const { return mLastTransferRateBPS; }
|
||||
|
||||
@@ -152,12 +148,12 @@ private:
|
||||
std::string mErrorMessage;
|
||||
|
||||
// dealing with the XML
|
||||
typedef std::map<std::string, options_t> all_options_t;
|
||||
response_t mResponses;
|
||||
all_options_t mOptions;
|
||||
LLSD mResponses;
|
||||
|
||||
UserAuthcode parseResponse();
|
||||
|
||||
LLSD parseValues(UserAuthcode &auth_code, const std::string& key_pfx, XMLRPC_VALUE param);
|
||||
|
||||
F64 mLastTransferRateBPS; // bits per second, only valid after a big transfer like inventory
|
||||
};
|
||||
|
||||
|
||||
@@ -362,7 +362,7 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass, BOOL is_dummy )
|
||||
// rotateMat.setFwdRow( boneX );
|
||||
// rotateMat.setLeftRow( boneY );
|
||||
// rotateMat.setUpRow( boneZ );
|
||||
// gGL.multMAtrix( &rotateMat.mMatrix[0][0] );
|
||||
// gGL.multMatrix( &rotateMat.mMatrix[0][0] );
|
||||
|
||||
// // render the bone
|
||||
// gGL.color3f( 0.5f, 0.5f, 0.0f );
|
||||
|
||||
@@ -777,7 +777,7 @@ void LLViewerJointMesh::updateGeometry(LLFace *mFace, LLPolyMesh *mMesh)
|
||||
LLStrider<LLVector3> o_normals;
|
||||
|
||||
//get vertex and normal striders
|
||||
LLVertexBuffer *buffer = mFace->getVertexBuffer();
|
||||
LLVertexBuffer* buffer = mFace->getVertexBuffer();
|
||||
buffer->getVertexStrider(o_vertices, 0);
|
||||
buffer->getNormalStrider(o_normals, 0);
|
||||
|
||||
|
||||
@@ -2,31 +2,25 @@
|
||||
* @file llviewertextureanim.cpp
|
||||
* @brief LLViewerTextureAnim class implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2003-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* 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.
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
* 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.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* 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$
|
||||
*/
|
||||
|
||||
|
||||
@@ -2,31 +2,25 @@
|
||||
* @file llviewertextureanim.h
|
||||
* @brief LLViewerTextureAnim class header file
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2003-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* 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.
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
* 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.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* 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$
|
||||
*/
|
||||
|
||||
|
||||
@@ -6887,6 +6887,94 @@ The URL you clicked cannot be opened from this web browser.
|
||||
Could not get region capability '[CAPABILITY]'.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AvatarRezNotification"
|
||||
type="notifytip">
|
||||
( [EXISTENCE] seconds alive )
|
||||
Avatar '[NAME]' declouded after [TIME] seconds.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AvatarRezSelfBakedDoneNotification"
|
||||
type="notifytip">
|
||||
( [EXISTENCE] seconds alive )
|
||||
You finished baking your outfit after [TIME] seconds.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AvatarRezSelfBakedUpdateNotification"
|
||||
type="notifytip">
|
||||
( [EXISTENCE] seconds alive )
|
||||
You sent out an update of your appearance after [TIME] seconds.
|
||||
[STATUS]
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AvatarRezCloudNotification"
|
||||
type="notifytip">
|
||||
( [EXISTENCE] seconds alive )
|
||||
Avatar '[NAME]' became cloud.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AvatarRezArrivedNotification"
|
||||
type="notifytip">
|
||||
( [EXISTENCE] seconds alive )
|
||||
Avatar '[NAME]' appeared.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AvatarRezLeftCloudNotification"
|
||||
type="notifytip">
|
||||
( [EXISTENCE] seconds alive )
|
||||
Avatar '[NAME]' left after [TIME] seconds as cloud.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AvatarRezEnteredAppearanceNotification"
|
||||
type="notifytip">
|
||||
( [EXISTENCE] seconds alive )
|
||||
Avatar '[NAME]' entered appearance mode.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AvatarRezLeftAppearanceNotification"
|
||||
type="notifytip">
|
||||
( [EXISTENCE] seconds alive )
|
||||
Avatar '[NAME]' left appearance mode.
|
||||
</notification>
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AvatarRezLeftNotification"
|
||||
type="notifytip">
|
||||
( [EXISTENCE] seconds alive )
|
||||
Avatar '[NAME]' left as fully loaded.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AvatarRezSelfBakedTextureUploadNotification"
|
||||
type="notifytip">
|
||||
( [EXISTENCE] seconds alive )
|
||||
You uploaded a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] seconds.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="AvatarRezSelfBakedTextureUpdateNotification"
|
||||
type="notifytip">
|
||||
( [EXISTENCE] seconds alive )
|
||||
You locally updated a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] seconds.
|
||||
</notification>
|
||||
|
||||
<global name="UnsupportedCPU">
|
||||
- Your CPU speed does not meet the minimum requirements.
|
||||
</global>
|
||||
|
||||
Reference in New Issue
Block a user