Skip to content

Commit 6deb37a

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents 95190f8 + 7b189e4 commit 6deb37a

File tree

14 files changed

+588
-101
lines changed

14 files changed

+588
-101
lines changed

examples/pxBenchmark/pxBenchmark_xcode/automation.sh

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,28 @@ BASE_URL="https://etwiki.sys.comcast.net/rest/api/content/558517563"
1111
STORAGE_URL="https://etwiki.sys.comcast.net/plugins/viewstorage/viewpagestorage.action?pageId=558517563"
1212
#PAGE_URL="https://etwiki.sys.comcast.net/display/RDK/GPU+and+CPU+Benchmark+Tests"
1313
FORM_PATH="/tmp/form.txt"
14+
CONFIG_PATH="/opt/pxbenchmark.conf"
1415
SPACE="YOUR_PERSONAL_SPACE"
1516
DATE=(`date +"%m\/%d\/%Y"`)
16-
USER=""
17-
PASSWORD=""
17+
USER=$(cat $CONFIG_PATH | grep ^user:$versionTag1 | cut -d ":" -f 2)
18+
echo "USER=$USER"
19+
PASSWORD=$(cat $CONFIG_PATH | grep ^password:$versionTag1 | cut -d ":" -f 2)
20+
echo "PASSWORD=$PASSWORD"
1821
FIRMWARE=$(cat $THIS_DIR/version.txt | grep ^imagename:$versionTag1 | cut -d ":" -f 2)
1922
echo "Firmware=$FIRMWARE"
2023

2124
DEVICE_NAME=$(cat $THIS_DIR/version.txt | grep ^JENKINS_JOB=$versionTag1 | cut -d "=" -f 2)
2225
echo "Device Name=$DEVICE_NAME"
2326

27+
if [[ $USER == '' ]]; then
2428
echo "Insert your account name:"
2529
read USER
30+
fi
31+
32+
if [[ $PASSWORD == '' ]]; then
2633
echo "Insert your password:"
2734
read -s PASSWORD
35+
fi
2836
#Download attachment to be edited
2937

3038
curl -u $USER:$PASSWORD $STORAGE_URL -o $FORM_PATH

examples/pxScene2d/src/rcvrcore/http_wrap.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ function Request(moduleName, appSceneContext, options, callback) {
186186
this.setTimeout = function () {
187187
if (!isBlocked) {
188188
if (isV8) {
189-
return httpRequest.setTimeout(arguments[0], arguments[1]);
189+
httpRequest.setTimeout(arguments[0], arguments[1]);
190190
} else {
191191
httpRequest.setTimeout.apply(httpRequest, arguments);
192192
}
@@ -196,7 +196,7 @@ function Request(moduleName, appSceneContext, options, callback) {
196196
this.end = function () {
197197
if (!isBlocked) {
198198
if (isV8) {
199-
return httpRequest.end();
199+
httpRequest.end();
200200
} else {
201201
httpRequest.end.apply(httpRequest, arguments);
202202
}

src/rtHttpRequest.cpp

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ rtHttpRequest::rtHttpRequest(const rtObjectRef& options)
6666
}
6767
if (port > 0) {
6868
rtValue portValue(port);
69-
url.append(":" + portValue.toString());
69+
rtString portStr = ":" + portValue.toString();
70+
if (!url.endsWith(portStr.cString())) {
71+
url.append(portStr);
72+
}
7073
}
7174
url.append(path.cString());
7275

@@ -93,27 +96,22 @@ rtHttpRequest::~rtHttpRequest()
9396

9497
rtError rtHttpRequest::addListener(const rtString& eventName, const rtFunctionRef& f)
9598
{
96-
mEmit->addListener(eventName, f);
97-
return RT_OK;
99+
return mEmit->addListener(eventName, f);
98100
}
99101

100102
rtError rtHttpRequest::once(const rtString& eventName, const rtFunctionRef& f)
101103
{
102-
mEmit->addListener(eventName, f);
103-
// TODO
104-
return RT_OK;
104+
return mEmit->addListener(eventName, f, true);
105105
}
106106

107107
rtError rtHttpRequest::removeAllListeners()
108108
{
109-
mEmit->clearListeners();
110-
return RT_OK;
109+
return mEmit->clearListeners();
111110
}
112111

113112
rtError rtHttpRequest::removeAllListenersByName(const rtString& eventName)
114113
{
115-
mEmit->setListener(eventName.cString(), NULL);
116-
return RT_OK;
114+
return mEmit->clearListeners(eventName.cString());
117115
}
118116

119117
rtError rtHttpRequest::abort() const
@@ -231,11 +229,14 @@ void rtHttpRequest::onDownloadComplete(rtFileDownloadRequest* downloadRequest)
231229
resp->setDownloadedData(downloadRequest->downloadedData(), downloadRequest->downloadedDataSize());
232230

233231
rtObjectRef ref = resp;
234-
req->mEmit.send("response", ref);
235232

236-
resp->onData();
237-
238-
resp->onEnd();
233+
if (downloadRequest->errorString().isEmpty()) {
234+
req->mEmit.send("response", ref);
235+
resp->onData();
236+
resp->onEnd();
237+
} else {
238+
req->mEmit.send("error", downloadRequest->errorString());
239+
}
239240
}
240241

241242
rtString rtHttpRequest::url() const

src/rtHttpResponse.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,27 +68,22 @@ rtError rtHttpResponse::headers(rtObjectRef& v) const
6868

6969
rtError rtHttpResponse::addListener(const rtString& eventName, const rtFunctionRef& f)
7070
{
71-
mEmit->addListener(eventName, f);
72-
return RT_OK;
71+
return mEmit->addListener(eventName, f);
7372
}
7473

7574
rtError rtHttpResponse::once(const rtString& eventName, const rtFunctionRef& f)
7675
{
77-
mEmit->addListener(eventName, f);
78-
// TODO
79-
return RT_OK;
76+
return mEmit->addListener(eventName, f, true);
8077
}
8178

8279
rtError rtHttpResponse::removeAllListeners()
8380
{
84-
mEmit->clearListeners();
85-
return RT_OK;
81+
return mEmit->clearListeners();
8682
}
8783

8884
rtError rtHttpResponse::removeAllListenersByName(const rtString& eventName)
8985
{
90-
mEmit->setListener(eventName.cString(), NULL);
91-
return RT_OK;
86+
return mEmit->clearListeners(eventName.cString());
9287
}
9388

9489
void rtHttpResponse::setStatusCode(int32_t v)

src/rtObject.cpp

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,14 @@ rtError rtEmit::setListener(const char* eventName, rtIFunction* f)
5656
e.isProp = true;
5757
e.markForDelete = false;
5858
e.fnHash = f->hash();
59-
mEntries.push_back(e);
59+
e.emitOnce = false;
60+
mEntries.push_back(e);
6061
}
6162

6263
return RT_OK;
6364
}
6465

65-
rtError rtEmit::addListener(const char* eventName, rtIFunction* f)
66+
rtError rtEmit::addListener(const char* eventName, rtIFunction* f, bool emitOnce)
6667
{
6768
if (!eventName || !f)
6869
return RT_ERROR;
@@ -88,6 +89,7 @@ rtError rtEmit::addListener(const char* eventName, rtIFunction* f)
8889
e.isProp = false;
8990
e.markForDelete = false;
9091
e.fnHash = f->hash();
92+
e.emitOnce = emitOnce;
9193
if (!mProcessingEvents)
9294
{
9395
mEntries.push_back(e);
@@ -166,6 +168,10 @@ rtError rtEmit::Send(int numArgs, const rtValue* args, rtValue* result)
166168
rtLogInfo("removing entry from remote client");
167169
it = mEntries.erase(it);
168170
}
171+
else if (e.emitOnce)
172+
{
173+
it = mEntries.erase(it);
174+
}
169175
else
170176
{
171177
++it;
@@ -208,6 +214,10 @@ rtError rtEmit::SendAsync(int numArgs, const rtValue* args)
208214
rtLogInfo("removing entry from remote client");
209215
it = mEntries.erase(it);
210216
}
217+
else if (e.emitOnce)
218+
{
219+
it = mEntries.erase(it);
220+
}
211221
else
212222
{
213223
++it;
@@ -249,13 +259,42 @@ void rtEmit::processPendingEvents()
249259
dest.isProp = src.isProp;
250260
dest.markForDelete = src.markForDelete;
251261
dest.fnHash = src.fnHash;
262+
dest.emitOnce = src.emitOnce;
252263

253264
mEntries.push_back(dest);
254265
++pendingit;
255266
}
256267
mPendingEntriesToAdd.clear();
257268
}
258269

270+
rtError rtEmit::clearListeners(const char* eventName)
271+
{
272+
if (!eventName)
273+
return RT_ERROR;
274+
275+
vector<_rtEmitEntry>::iterator it = mEntries.begin();
276+
while (it != mEntries.end())
277+
{
278+
_rtEmitEntry& e = (*it);
279+
if (e.n == eventName)
280+
{
281+
// if no events is being processed currently, remove the event entries
282+
if (!mProcessingEvents)
283+
it = mEntries.erase(it);
284+
else
285+
{
286+
it->markForDelete = true;
287+
++it;
288+
}
289+
}
290+
else
291+
{
292+
++it;
293+
}
294+
}
295+
return RT_OK;
296+
}
297+
259298
// rtEmitRef
260299
rtError rtEmitRef::Send(int numArgs,const rtValue* args,rtValue* result)
261300
{

src/rtObject.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -666,10 +666,11 @@ class rtEmit: public rtIFunction
666666
virtual unsigned long Release();
667667

668668
rtError setListener(const char* eventName, rtIFunction* f);
669-
rtError addListener(const char* eventName, rtIFunction* f);
669+
rtError addListener(const char* eventName, rtIFunction* f, bool emitOnce = false);
670670
rtError delListener(const char* eventName, rtIFunction* f);
671671

672672
rtError clearListeners() {mEntries.clear(); return RT_OK;}
673+
rtError clearListeners(const char* eventName);
673674

674675
virtual rtError Send(int numArgs,const rtValue* args,rtValue* result);
675676
virtual rtError SendAsync(int numArgs, const rtValue* args);
@@ -689,13 +690,14 @@ class rtEmit: public rtIFunction
689690
void processPendingEvents();
690691

691692
protected:
692-
struct _rtEmitEntry
693+
struct _rtEmitEntry
693694
{
694695
rtString n;
695696
rtFunctionRef f;
696697
bool isProp;
697698
bool markForDelete;
698699
size_t fnHash;
700+
bool emitOnce;
699701
};
700702

701703
std::vector<_rtEmitEntry> mEntries;

src/rtPermissions.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ bool rtPermissions::mEnabled = false;
3535
rtObjectRef rtPermissions::mConfig = NULL;
3636

3737
rtPermissions::rtPermissions(const char* origin)
38-
: mOrigin(origin)
38+
: mOrigin(rtUrlGetOrigin(origin))
3939
, mParent(NULL)
4040
{
4141
static bool didInit = false;
@@ -52,19 +52,19 @@ rtPermissions::rtPermissions(const char* origin)
5252
if (mConfig)
5353
{
5454
rtObjectRef assign = mConfig.get<rtObjectRef>("assign");
55-
if (origin && *origin && assign)
55+
if (!mOrigin.isEmpty() && assign)
5656
{
5757
rtString s;
58-
if (find(assign, origin, s) == RT_OK)
58+
if (find(assign, mOrigin.cString(), s) == RT_OK)
5959
{
6060
role = assign.get<rtString>(s.cString());
61-
rtLogInfo("permissions role '%s' for origin '%s", role.cString(), origin);
61+
rtLogInfo("permissions role '%s' for origin '%s", role.cString(), mOrigin.cString());
6262
}
6363
}
6464
}
6565

66-
if (origin && *origin && role.isEmpty())
67-
rtLogWarn("no permissions role for origin '%s'", origin);
66+
if (!mOrigin.isEmpty() && role.isEmpty())
67+
rtLogWarn("no permissions role for origin '%s'", mOrigin.cString());
6868

6969
if (!role.isEmpty())
7070
{

src/rtScriptV8/rtScriptV8.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -808,11 +808,6 @@ rtError rtScriptV8::init()
808808
V8::Initialize();
809809

810810
Isolate::CreateParams params;
811-
#ifdef USE_SYSTEM_V8
812-
const char* source1 = "function pxSceneFooFunction(){ return 0;}";
813-
static v8::StartupData data = v8::V8::CreateSnapshotDataBlob(source1);
814-
params.snapshot_blob = &data;
815-
#endif
816811
params.array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator();
817812
mIsolate = Isolate::New(params);
818813

src/rtUrlUtils.cpp

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,21 +106,61 @@ rtString rtUrlGetOrigin(const char* url)
106106
}
107107

108108
// See http://www.ietf.org/rfc/rfc3986.txt.
109-
// URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
110-
// scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
109+
// URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
110+
// scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
111+
// hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty
112+
// authority = [ userinfo "@" ] host [ ":" port ]
113+
// userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
114+
// unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
115+
// pct-encoded = "%" HEXDIG HEXDIG
116+
// sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
117+
// host = IP-literal / IPv4address / reg-name
118+
// path-abempty = *( "/" segment )
119+
// path-absolute = "/" [ segment-nz *( "/" segment ) ]
120+
// path-rootless = segment-nz *( "/" segment )
121+
// path-empty = 0<pchar>
122+
// segment = *pchar
123+
// segment-nz = 1*pchar
124+
// pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
125+
//
126+
// See https://tools.ietf.org/html/rfc6454#section-7.
127+
// serialized-origin = scheme "://" host [ ":" port ]
128+
// ; <scheme>, <host>, <port> from RFC 3986
129+
111130
u = url;
131+
132+
// scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
112133
for (; *u && (*u == '+' || *u == '-' || *u == '.' || isalpha(*u) || isdigit(*u)); u++);
134+
// URI = scheme ":" ...
113135
if (*u == ':' && u != url)
114136
{
115137
u++;
138+
// hier-part = "//" ...
116139
if (*u == '/' && *(u + 1) == '/')
117140
{
141+
const char* hier_part = u;
118142
u += 2;
143+
rtString scheme(url, (uint32_t) (u - 3 - url));
144+
145+
// URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
119146
for (; *u && *u != '/' && *u != '?' && *u != '#'; u++);
120-
uint32_t byteLen = (uint32_t) (u - url);
121-
return rtString(url, byteLen);
147+
148+
// authority = [ userinfo "@" ] host [ ":" port ]
149+
const char* host = u - 1;
150+
for (; host >= hier_part + 2 && *host != '@'; host--);
151+
host++;
152+
153+
// serialized-origin = scheme "://" host [ ":" port ]
154+
rtString host_port;
155+
if (u > host)
156+
{
157+
host_port = rtString(host, (uint32_t) (u - host));
158+
}
159+
160+
return scheme + rtString("://") + host_port;
122161
}
123162
}
124163
}
164+
125165
return rtString();
126166
}

0 commit comments

Comments
 (0)