mirror of https://gitee.com/bigwinds/arangodb
Merge branch 'devel' of https://github.com/triAGENS/ArangoDB into devel
This commit is contained in:
commit
eda82401e7
11
CHANGELOG
11
CHANGELOG
|
@ -1,4 +1,10 @@
|
||||||
v1.2.beta1 (2013-02-01)
|
v1.2.beta3 (XXXX-XX-XX)
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
* fixed issue #404: keep original request url in request object
|
||||||
|
|
||||||
|
|
||||||
|
v1.2.beta2 (2013-02-15)
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
* fixed issue #405: 1.2 compile warnings
|
* fixed issue #405: 1.2 compile warnings
|
||||||
|
@ -43,6 +49,9 @@ v1.2.beta1 (2013-02-01)
|
||||||
ArangoDB. Now, error 1203 (Collection not found) is used in AQL too in case a
|
ArangoDB. Now, error 1203 (Collection not found) is used in AQL too in case a
|
||||||
non-existing collection is used.
|
non-existing collection is used.
|
||||||
|
|
||||||
|
v1.2.beta1 (2013-02-01)
|
||||||
|
-----------------------
|
||||||
|
|
||||||
* fixed issue #382: [Documentation error] Maschine... should be Machine...
|
* fixed issue #382: [Documentation error] Maschine... should be Machine...
|
||||||
|
|
||||||
* unified history file locations for arangod, arangosh, and arangoirb.
|
* unified history file locations for arangod, arangosh, and arangoirb.
|
||||||
|
|
|
@ -530,6 +530,9 @@ BOOST_AUTO_TEST_CASE (tst_timing) {
|
||||||
/// @brief tst_doubles
|
/// @brief tst_doubles
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// try to turn off compiler warning for deliberate division by zero
|
||||||
|
#pragma GCC diagnostic ignored "-Wdiv-by-zero"
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE (tst_doubles) {
|
BOOST_AUTO_TEST_CASE (tst_doubles) {
|
||||||
TRI_string_buffer_t sb;
|
TRI_string_buffer_t sb;
|
||||||
double value;
|
double value;
|
||||||
|
@ -547,8 +550,9 @@ BOOST_AUTO_TEST_CASE (tst_doubles) {
|
||||||
TRI_AppendDoubleStringBuffer(&sb, value);
|
TRI_AppendDoubleStringBuffer(&sb, value);
|
||||||
BOOST_CHECK_EQUAL("-inf", sb._buffer);
|
BOOST_CHECK_EQUAL("-inf", sb._buffer);
|
||||||
|
|
||||||
// div 0
|
// div 0. deliberately.
|
||||||
value = 1.0 / 0.0;
|
value = 1.0 / 0.0;
|
||||||
|
|
||||||
TRI_ClearStringBuffer(&sb);
|
TRI_ClearStringBuffer(&sb);
|
||||||
TRI_AppendDoubleStringBuffer(&sb, value);
|
TRI_AppendDoubleStringBuffer(&sb, value);
|
||||||
BOOST_CHECK_EQUAL("inf", sb._buffer);
|
BOOST_CHECK_EQUAL("inf", sb._buffer);
|
||||||
|
|
|
@ -321,8 +321,11 @@ static HttpResponse* ExecuteActionVocbase (TRI_vocbase_t* vocbase,
|
||||||
req->Set(v8g->UserKey, v8::Null());
|
req->Set(v8g->UserKey, v8::Null());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
req->Set(v8g->UserKey, v8::String::New(user.c_str()));
|
req->Set(v8g->UserKey, v8::String::New(user.c_str(), user.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string const& fullUrl = request->fullUrl();
|
||||||
|
req->Set(v8g->UrlKey, v8::String::New(fullUrl.c_str(), fullUrl.size()));
|
||||||
|
|
||||||
// copy prefix
|
// copy prefix
|
||||||
string path = request->prefix();
|
string path = request->prefix();
|
||||||
|
@ -337,7 +340,7 @@ static HttpResponse* ExecuteActionVocbase (TRI_vocbase_t* vocbase,
|
||||||
char const* sep = "";
|
char const* sep = "";
|
||||||
|
|
||||||
for (size_t s = action->_urlParts; s < suffix.size(); ++s) {
|
for (size_t s = action->_urlParts; s < suffix.size(); ++s) {
|
||||||
suffixArray->Set(index++, v8::String::New(suffix[s].c_str()));
|
suffixArray->Set(index++, v8::String::New(suffix[s].c_str(), suffix[s].size()));
|
||||||
|
|
||||||
path += sep + suffix[s];
|
path += sep + suffix[s];
|
||||||
sep = "/";
|
sep = "/";
|
||||||
|
@ -730,6 +733,7 @@ void TRI_InitV8Actions (v8::Handle<v8::Context> context, ApplicationV8* applicat
|
||||||
v8g->ResponseCodeKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("responseCode"));
|
v8g->ResponseCodeKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("responseCode"));
|
||||||
v8g->SuffixKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("suffix"));
|
v8g->SuffixKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("suffix"));
|
||||||
v8g->TransformationsKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("transformations"));
|
v8g->TransformationsKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("transformations"));
|
||||||
|
v8g->UrlKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("url"));
|
||||||
v8g->UserKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("user"));
|
v8g->UserKey = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("user"));
|
||||||
|
|
||||||
v8g->DeleteConstant = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("DELETE"));
|
v8g->DeleteConstant = v8::Persistent<v8::String>::New(TRI_V8_SYMBOL("DELETE"));
|
||||||
|
|
|
@ -447,22 +447,6 @@ void HttpRequest::setRequestType (HttpRequestType newType) {
|
||||||
_type = newType;
|
_type = newType;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief returns whether HTTP version is 1.0
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
bool HttpRequest::isHttp10 () {
|
|
||||||
return _version == HTTP_1_0;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief returns whether HTTP version is 1.1
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
bool HttpRequest::isHttp11 () {
|
|
||||||
return _version == HTTP_1_1;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief returns the authenticated user
|
/// @brief returns the authenticated user
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -685,33 +669,41 @@ void HttpRequest::parseHeader (char* ptr, size_t length) {
|
||||||
while (f < valueEnd && *f != '?' && *f != ' ' && *f != '\n') {
|
while (f < valueEnd && *f != '?' && *f != ' ' && *f != '\n') {
|
||||||
++f;
|
++f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pathEnd = f;
|
||||||
|
|
||||||
// no space, question mark or end-of-line
|
// no space, question mark or end-of-line
|
||||||
if (f == valueEnd) {
|
if (f == valueEnd) {
|
||||||
pathEnd = f;
|
|
||||||
paramEnd = paramBegin = pathEnd;
|
paramEnd = paramBegin = pathEnd;
|
||||||
|
|
||||||
|
// set full url = complete path
|
||||||
|
setFullUrl(pathBegin, pathEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
// no question mark
|
// no question mark
|
||||||
else if (*f == ' ' || *f == '\n') {
|
else if (*f == ' ' || *f == '\n') {
|
||||||
pathEnd = f;
|
|
||||||
*pathEnd = '\0';
|
*pathEnd = '\0';
|
||||||
|
|
||||||
paramEnd = paramBegin = pathEnd;
|
paramEnd = paramBegin = pathEnd;
|
||||||
|
|
||||||
|
// set full url = complete path
|
||||||
|
setFullUrl(pathBegin, pathEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
// found a question mark
|
// found a question mark
|
||||||
else {
|
else {
|
||||||
pathEnd = f;
|
|
||||||
*pathEnd = '\0';
|
|
||||||
|
|
||||||
paramBegin = f + 1;
|
paramBegin = f + 1;
|
||||||
paramEnd = paramBegin;
|
paramEnd = paramBegin;
|
||||||
|
|
||||||
while (paramEnd < valueEnd && *paramEnd != ' ' && *paramEnd != '\n') {
|
while (paramEnd < valueEnd && *paramEnd != ' ' && *paramEnd != '\n') {
|
||||||
++paramEnd;
|
++paramEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set full url = complete path + url parameters
|
||||||
|
setFullUrl(pathBegin, paramEnd);
|
||||||
|
|
||||||
|
// now that the full url was saved, we can insert the null bytes
|
||||||
|
*pathEnd = '\0';
|
||||||
*paramEnd = '\0';
|
*paramEnd = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -853,6 +845,20 @@ void HttpRequest::parseHeader (char* ptr, size_t length) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief sets the full url
|
||||||
|
/// this will create a copy of the characters in the range, so the original
|
||||||
|
/// range can be modified afterwards
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void HttpRequest::setFullUrl (char const* begin, char const* end) {
|
||||||
|
assert(begin != 0);
|
||||||
|
assert(end != 0);
|
||||||
|
assert(begin <= end);
|
||||||
|
|
||||||
|
_fullUrl = string(begin, end - begin);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief sets the path of the request
|
/// @brief sets the path of the request
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -185,6 +185,14 @@ namespace triagens {
|
||||||
|
|
||||||
HttpRequestType requestType () const;
|
HttpRequestType requestType () const;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief return the full url of the request
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
const string& fullUrl () const {
|
||||||
|
return _fullUrl;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief sets the http request type
|
/// @brief sets the http request type
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -195,13 +203,17 @@ namespace triagens {
|
||||||
/// @brief return whether HTTP version is 1.0
|
/// @brief return whether HTTP version is 1.0
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
bool isHttp10 ();
|
bool isHttp10 () const {
|
||||||
|
return _version == HTTP_1_0;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief return whether HTTP version is 1.1
|
/// @brief return whether HTTP version is 1.1
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
bool isHttp11 ();
|
bool isHttp11 () const {
|
||||||
|
return _version == HTTP_1_1;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief returns the full request path
|
/// @brief returns the full request path
|
||||||
|
@ -464,6 +476,12 @@ namespace triagens {
|
||||||
|
|
||||||
void parseHeader (char* ptr, size_t length);
|
void parseHeader (char* ptr, size_t length);
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief sets the full url of the request
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void setFullUrl (char const* begin, char const* end);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief sets the path of the request
|
/// @brief sets the path of the request
|
||||||
///
|
///
|
||||||
|
@ -560,6 +578,12 @@ namespace triagens {
|
||||||
|
|
||||||
string _prefix;
|
string _prefix;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief the full url requested
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
string _fullUrl;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief the suffixes for the request path
|
/// @brief the suffixes for the request path
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -97,6 +97,7 @@ typedef struct TRI_v8_global_s {
|
||||||
PrefixKey(),
|
PrefixKey(),
|
||||||
ResponseCodeKey(),
|
ResponseCodeKey(),
|
||||||
SuffixKey(),
|
SuffixKey(),
|
||||||
|
UrlKey(),
|
||||||
UserKey(),
|
UserKey(),
|
||||||
WaitForSyncKey(),
|
WaitForSyncKey(),
|
||||||
DocumentIdRegex(),
|
DocumentIdRegex(),
|
||||||
|
@ -363,6 +364,12 @@ typedef struct TRI_v8_global_s {
|
||||||
|
|
||||||
v8::Persistent<v8::String> TransformationsKey;
|
v8::Persistent<v8::String> TransformationsKey;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief "url" key name
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
v8::Persistent<v8::String> UrlKey;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief "user" key name
|
/// @brief "user" key name
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue