diff options
| author | Aaron Brashears <aaronb@lindenlab.com> | 2008-02-08 23:43:16 +0000 | 
|---|---|---|
| committer | Aaron Brashears <aaronb@lindenlab.com> | 2008-02-08 23:43:16 +0000 | 
| commit | 446b7ecea2e1635bd66087894f23e3a45eb7b607 (patch) | |
| tree | 7727e7cca1f4b75f55a722ca48808db8fd2ec947 /indra | |
| parent | 8bd6a0b3217ea5614d2a29195e528aa8314f6342 (diff) | |
Result of svn merge -r79554:79558 svn+ssh://svn/svn/linden/branches/merge-dp into release
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/lib/python/indra/base/metrics.py | 23 | ||||
| -rw-r--r-- | indra/lib/python/indra/util/llsubprocess.py | 106 | ||||
| -rw-r--r-- | indra/llmessage/llhost.cpp | 12 | ||||
| -rw-r--r-- | indra/llmessage/llhost.h | 4 | ||||
| -rw-r--r-- | indra/newview/llfloaterpostcard.cpp | 35 | ||||
| -rw-r--r-- | indra/newview/llfloaterpostcard.h | 1 | 
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, | 
