summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/lib/python/indra/base/metrics.py23
-rw-r--r--indra/lib/python/indra/util/llsubprocess.py106
-rw-r--r--indra/llmessage/llhost.cpp12
-rw-r--r--indra/llmessage/llhost.h4
-rw-r--r--indra/newview/llfloaterpostcard.cpp35
-rw-r--r--indra/newview/llfloaterpostcard.h1
6 files changed, 136 insertions, 45 deletions
diff --git a/indra/lib/python/indra/base/metrics.py b/indra/lib/python/indra/base/metrics.py
index 751757d5b0..d26f571be7 100644
--- a/indra/lib/python/indra/base/metrics.py
+++ b/indra/lib/python/indra/base/metrics.py
@@ -31,12 +31,23 @@ $/LicenseInfo$
import sys
from indra.base import llsd
-def log(location, stats, file=None):
- "Write a standard llmetrics log"
- metrics = {'location':location, 'stats':stats}
- if file is None:
+_sequence_id = 0
+
+def record_metrics(table, stats, dest=None):
+ "Write a standard metrics log"
+ _log("LLMETRICS", table, stats, dest)
+
+def record_event(table, data, dest=None):
+ "Write a standard logmessage log"
+ _log("LLLOGMESSAGE", table, data, dest)
+
+def _log(header, table, data, dest):
+ if dest is None:
# do this check here in case sys.stdout changes at some
# point. as a default parameter, it will never be
# re-evaluated.
- file = sys.stdout
- print >>file, "LLMETRICS:", llsd.format_notation(metrics)
+ dest = sys.stdout
+ global _sequence_id
+ print >>dest, header, "(" + str(_sequence_id) + ")",
+ print >>dest, table, llsd.format_notation(data)
+ _sequence_id += 1
diff --git a/indra/lib/python/indra/util/llsubprocess.py b/indra/lib/python/indra/util/llsubprocess.py
new file mode 100644
index 0000000000..b6082de74a
--- /dev/null
+++ b/indra/lib/python/indra/util/llsubprocess.py
@@ -0,0 +1,106 @@
+"""\
+@file llsubprocess.py
+@author Phoenix
+@date 2008-01-18
+@brief The simplest possible wrapper for a common sub-process paradigm.
+
+$LicenseInfo:firstyear=2007&license=mit$
+
+Copyright (c) 2007, Linden Research, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+$/LicenseInfo$
+"""
+
+import os
+import popen2
+import time
+import select
+
+class Timeout(RuntimeError):
+ "Exception raised when a subprocess times out."
+ pass
+
+def run(command, args=None, data=None, timeout=None):
+ """\
+@brief Run command with arguments
+
+This is it. This is the function I want to run all the time when doing
+subprocces, but end up copying the code everywhere. none of the
+standard commands are secure and provide a way to specify input, get
+all the output, and get the result.
+@param command A string specifying a process to launch.
+@param args Arguments to be passed to command. Must be list, tuple or None.
+@param data input to feed to the command.
+@param timeout Maximum number of many seconds to run.
+@return Returns (result, stdout, stderr) from process.
+"""
+ cmd = [command]
+ if args:
+ cmd.extend([str(arg) for arg in args])
+ #print "cmd: ","' '".join(cmd)
+ child = popen2.Popen3(cmd, True)
+ #print child.pid
+ out = []
+ err = []
+ result = -1
+ time_left = timeout
+ tochild = [child.tochild.fileno()]
+ while True:
+ time_start = time.time()
+ #print "time:",time_left
+ p_in, p_out, p_err = select.select(
+ [child.fromchild.fileno(), child.childerr.fileno()],
+ tochild,
+ [],
+ time_left)
+ if p_in:
+ new_line = os.read(child.fromchild.fileno(), 32 * 1024)
+ if new_line:
+ #print "line:",new_line
+ out.append(new_line)
+ new_line = os.read(child.childerr.fileno(), 32 * 1024)
+ if new_line:
+ #print "error:", new_line
+ err.append(new_line)
+ if p_out:
+ if data:
+ #print "p_out"
+ bytes = os.write(child.tochild.fileno(), data)
+ data = data[bytes:]
+ if len(data) == 0:
+ data = None
+ tochild = []
+ child.tochild.close()
+ result = child.poll()
+ if result != -1:
+ child.tochild.close()
+ child.fromchild.close()
+ child.childerr.close()
+ break
+ if time_left is not None:
+ time_left -= (time.time() - time_start)
+ if time_left < 0:
+ raise Timeout
+ #print "result:",result
+ out = ''.join(out)
+ #print "stdout:", out
+ err = ''.join(err)
+ #print "stderr:", err
+ return result, out, err
diff --git a/indra/llmessage/llhost.cpp b/indra/llmessage/llhost.cpp
index b73becfa71..4d10f06051 100644
--- a/indra/llmessage/llhost.cpp
+++ b/indra/llmessage/llhost.cpp
@@ -132,14 +132,13 @@ void LLHost::getHostName(char *buf, S32 len) const
}
}
-LLString LLHost::getHostName() const
+std::string LLHost::getHostName() const
{
- hostent *he;
-
+ hostent* he;
if (INVALID_HOST_IP_ADDRESS == mIP)
{
llwarns << "LLHost::getHostName() : Invalid IP address" << llendl;
- return "";
+ return std::string();
}
he = gethostbyaddr((char *)&mIP, sizeof(mIP), AF_INET);
if (!he)
@@ -151,12 +150,11 @@ LLString LLHost::getHostName() const
llwarns << "LLHost::getHostName() : Couldn't find host name for address " << mIP << ", Error: "
<< h_errno << llendl;
#endif
- return "";
+ return std::string();
}
else
{
- LLString hostname = he->h_name;
- return hostname;
+ return ll_safe_string(he->h_name);
}
}
diff --git a/indra/llmessage/llhost.h b/indra/llmessage/llhost.h
index e6f811ac08..a865ad616c 100644
--- a/indra/llmessage/llhost.h
+++ b/indra/llmessage/llhost.h
@@ -38,8 +38,6 @@
#include "net.h"
-#include "llstring.h"
-
const U32 INVALID_PORT = 0;
const U32 INVALID_HOST_IP_ADDRESS = 0x0;
@@ -102,7 +100,7 @@ public:
void getIPString(char* buffer, S32 length) const; // writes IP into buffer
std::string getIPString() const;
void getHostName(char *buf, S32 len) const;
- LLString getHostName() const;
+ std::string getHostName() const;
std::string getIPandPort() const;
friend std::ostream& operator<< (std::ostream& os, const LLHost &hh);
diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index 5306ce11b1..1f5ebec684 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -113,25 +113,12 @@ BOOL LLFloaterPostcard::postBuild()
childSetAction("send_btn", onClickSend, this);
childDisable("from_form");
- childSetAction("publish_help_btn", onClickPublishHelp, this);
- if (gAgent.isTeen())
- {
- // Disable these buttons if they are PG (Teen) users
- childDisable("allow_publish_check");
- childHide("allow_publish_check");
- childDisable("publish_help_btn");
- childHide("publish_help_btn");
- childDisable("mature_check");
- childHide("mature_check");
- }
-
- LLString name_string;
+ std::string name_string;
gAgent.buildFullname(name_string);
-
childSetValue("name_form", LLSD(name_string));
- LLTextEditor *MsgField = LLUICtrlFactory::getTextEditorByName(this, "msg_form");
+ LLTextEditor* MsgField = LLUICtrlFactory::getTextEditorByName(this, "msg_form");
if (MsgField)
{
MsgField->setWordWrap(TRUE);
@@ -252,8 +239,8 @@ void LLFloaterPostcard::onClickSend(void* data)
{
LLFloaterPostcard *self = (LLFloaterPostcard *)data;
- LLString from(self->childGetValue("from_form").asString().c_str());
- LLString to(self->childGetValue("to_form").asString().c_str());
+ std::string from(self->childGetValue("from_form").asString());
+ std::string to(self->childGetValue("to_form").asString());
if (to.empty() || to.find('@') == std::string::npos)
{
@@ -267,7 +254,7 @@ void LLFloaterPostcard::onClickSend(void* data)
return;
}
- LLString subject(self->childGetValue("subject_form").asString().c_str());
+ std::string subject(self->childGetValue("subject_form").asString());
if(subject.empty() || !self->mHasFirstMsgFocus)
{
gViewerWindow->alertXml("PromptMissingSubjMsg", missingSubjMsgAlertCallback, self);
@@ -286,12 +273,6 @@ void LLFloaterPostcard::onClickSend(void* data)
}
// static
-void LLFloaterPostcard::onClickPublishHelp(void* data)
-{
- gViewerWindow->alertXml("ClickPublishHelpPostcard");
-}
-
-// static
void LLFloaterPostcard::uploadCallback(const LLUUID& asset_id, void *user_data, S32 result, LLExtStat ext_status) // StoreAssetData callback (fixed)
{
LLFloaterPostcard *self = (LLFloaterPostcard *)user_data;
@@ -321,8 +302,8 @@ void LLFloaterPostcard::uploadCallback(const LLUUID& asset_id, void *user_data,
msg->addString("Name", self->childGetValue("name_form").asString());
msg->addString("Subject", self->childGetValue("subject_form").asString());
msg->addString("Msg", self->childGetValue("msg_form").asString());
- msg->addBOOL("AllowPublish", self->childGetValue("allow_publish_check").asBoolean());
- msg->addBOOL("MaturePublish", self->childGetValue("mature_check").asBoolean());
+ msg->addBOOL("AllowPublish", FALSE);
+ msg->addBOOL("MaturePublish", FALSE);
gAgent.sendReliableMessage();
}
@@ -405,8 +386,6 @@ void LLFloaterPostcard::sendPostcard()
body["name"] = childGetValue("name_form").asString();
body["subject"] = childGetValue("subject_form").asString();
body["msg"] = childGetValue("msg_form").asString();
- body["allow-publish"] = childGetValue("allow_publish_check").asBoolean();
- body["mature-publish"] = childGetValue("mature_check").asBoolean();
LLHTTPClient::post(url, body, new LLSendPostcardResponder(body, mAssetID, LLAssetType::AT_IMAGE_JPEG));
}
else
diff --git a/indra/newview/llfloaterpostcard.h b/indra/newview/llfloaterpostcard.h
index 287d34c706..5e0efa0ccb 100644
--- a/indra/newview/llfloaterpostcard.h
+++ b/indra/newview/llfloaterpostcard.h
@@ -57,7 +57,6 @@ public:
static void onClickCancel(void* data);
static void onClickSend(void* data);
- static void onClickPublishHelp(void *data);
static void uploadCallback(const LLUUID& asset_id,
void *user_data,