Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
ea0c3fc8
Commit
ea0c3fc8
authored
Feb 09, 2016
by
Alexey Botchkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MDEV-9438 backport feedback-http-proxy to 5.5 and 10.0.
The http-proxy option to the FEEDBACK plugin backported.
parent
b17a4350
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
102 additions
and
13 deletions
+102
-13
mysql-test/suite/plugins/r/feedback_plugin_install.result
mysql-test/suite/plugins/r/feedback_plugin_install.result
+1
-0
mysql-test/suite/plugins/r/feedback_plugin_load.result
mysql-test/suite/plugins/r/feedback_plugin_load.result
+1
-0
mysql-test/suite/plugins/r/feedback_plugin_send.result
mysql-test/suite/plugins/r/feedback_plugin_send.result
+1
-0
plugin/feedback/feedback.cc
plugin/feedback/feedback.cc
+11
-1
plugin/feedback/feedback.h
plugin/feedback/feedback.h
+6
-0
plugin/feedback/url_base.cc
plugin/feedback/url_base.cc
+45
-0
plugin/feedback/url_http.cc
plugin/feedback/url_http.cc
+37
-12
No files found.
mysql-test/suite/plugins/r/feedback_plugin_install.result
View file @
ea0c3fc8
...
...
@@ -8,6 +8,7 @@ select * from information_schema.feedback where variable_name like 'feed%'
VARIABLE_NAME VARIABLE_VALUE
FEEDBACK used 1
FEEDBACK version 1.1
FEEDBACK_HTTP_PROXY
FEEDBACK_SEND_RETRY_WAIT 60
FEEDBACK_SEND_TIMEOUT 60
FEEDBACK_URL http://mariadb.org/feedback_plugin/post
...
...
mysql-test/suite/plugins/r/feedback_plugin_load.result
View file @
ea0c3fc8
...
...
@@ -10,6 +10,7 @@ select * from information_schema.feedback where variable_name like 'feed%'
and variable_name not like '%debug%';
VARIABLE_NAME VARIABLE_VALUE
FEEDBACK version 1.1
FEEDBACK_HTTP_PROXY
FEEDBACK_SEND_RETRY_WAIT 60
FEEDBACK_SEND_TIMEOUT 60
FEEDBACK_URL http://mariadb.org/feedback_plugin/post
...
...
mysql-test/suite/plugins/r/feedback_plugin_send.result
View file @
ea0c3fc8
...
...
@@ -10,6 +10,7 @@ select * from information_schema.feedback where variable_name like 'feed%'
and variable_name not like '%debug%';
VARIABLE_NAME VARIABLE_VALUE
FEEDBACK version 1.1
FEEDBACK_HTTP_PROXY
FEEDBACK_SEND_RETRY_WAIT 60
FEEDBACK_SEND_TIMEOUT 60
FEEDBACK_URL http://mariadb.org/feedback_plugin/post
...
...
plugin/feedback/feedback.cc
View file @
ea0c3fc8
...
...
@@ -29,7 +29,7 @@ ulong debug_startup_interval, debug_first_interval, debug_interval;
char
server_uid_buf
[
SERVER_UID_SIZE
+
1
];
///< server uid will be written here
/* backing store for system variables */
static
char
*
server_uid
=
server_uid_buf
,
*
url
;
static
char
*
server_uid
=
server_uid_buf
,
*
url
,
*
http_proxy
;
char
*
user_info
;
ulong
send_timeout
,
send_retry_wait
;
...
...
@@ -284,7 +284,13 @@ static int init(void *p)
if
(
*
e
==
0
||
*
e
==
' '
)
{
if
(
e
>
s
&&
(
urls
[
slot
]
=
Url
::
create
(
s
,
e
-
s
)))
{
if
(
urls
[
slot
]
->
set_proxy
(
http_proxy
,
http_proxy
?
strlen
(
http_proxy
)
:
0
))
sql_print_error
(
"feedback plugin: invalid proxy '%s'"
,
http_proxy
?
http_proxy
:
""
);
slot
++
;
}
else
{
if
(
e
>
s
)
...
...
@@ -362,6 +368,9 @@ static MYSQL_SYSVAR_ULONG(send_timeout, send_timeout, PLUGIN_VAR_RQCMDARG,
static
MYSQL_SYSVAR_ULONG
(
send_retry_wait
,
send_retry_wait
,
PLUGIN_VAR_RQCMDARG
,
"Wait this many seconds before retrying a failed send."
,
NULL
,
NULL
,
60
,
1
,
60
*
60
*
24
,
1
);
static
MYSQL_SYSVAR_STR
(
http_proxy
,
http_proxy
,
PLUGIN_VAR_READONLY
|
PLUGIN_VAR_RQCMDARG
,
"Proxy server host:port."
,
NULL
,
NULL
,
0
);
#ifndef DBUG_OFF
static
MYSQL_SYSVAR_ULONG
(
debug_startup_interval
,
debug_startup_interval
,
...
...
@@ -381,6 +390,7 @@ static struct st_mysql_sys_var* settings[] = {
MYSQL_SYSVAR
(
url
),
MYSQL_SYSVAR
(
send_timeout
),
MYSQL_SYSVAR
(
send_retry_wait
),
MYSQL_SYSVAR
(
http_proxy
),
#ifndef DBUG_OFF
MYSQL_SYSVAR
(
debug_startup_interval
),
MYSQL_SYSVAR
(
debug_first_interval
),
...
...
plugin/feedback/feedback.h
View file @
ea0c3fc8
...
...
@@ -51,8 +51,14 @@ class Url {
const
char
*
url
()
{
return
full_url
.
str
;
}
size_t
url_length
()
{
return
full_url
.
length
;
}
virtual
int
send
(
const
char
*
data
,
size_t
data_length
)
=
0
;
virtual
int
set_proxy
(
const
char
*
proxy
,
size_t
proxy_len
)
{
return
0
;
}
static
Url
*
create
(
const
char
*
url
,
size_t
url_length
);
static
int
parse_proxy_server
(
const
char
*
proxy_server
,
size_t
proxy_length
,
LEX_STRING
*
host
,
LEX_STRING
*
port
);
};
extern
Url
**
urls
;
...
...
plugin/feedback/url_base.cc
View file @
ea0c3fc8
...
...
@@ -48,4 +48,49 @@ Url* Url::create(const char *url, size_t url_length)
return
self
;
}
int
Url
::
parse_proxy_server
(
const
char
*
proxy_server
,
size_t
proxy_length
,
LEX_STRING
*
host
,
LEX_STRING
*
port
)
{
const
char
*
s
;
host
->
length
=
0
;
if
(
proxy_server
==
NULL
)
return
0
;
for
(;
proxy_length
>
0
&&
my_isspace
(
system_charset_info
,
*
proxy_server
);
proxy_server
++
,
proxy_length
--
)
/* no-op */
;
if
(
proxy_length
==
0
)
return
0
;
for
(
s
=
proxy_server
;
*
s
&&
*
s
!=
':'
;
s
++
)
/* no-op */
;
host
->
str
=
const_cast
<
char
*>
(
proxy_server
);
if
((
host
->
length
=
s
-
proxy_server
)
==
0
)
return
0
;
port
->
length
=
0
;
if
(
*
s
==
':'
)
{
s
++
;
port
->
str
=
const_cast
<
char
*>
(
s
);
while
(
*
s
>=
'0'
&&
*
s
<=
'9'
)
{
s
++
;
port
->
length
++
;
}
}
if
(
port
->
length
==
0
)
{
port
->
str
=
const_cast
<
char
*>
(
"80"
);
port
->
length
=
2
;
}
host
->
str
=
my_strndup
(
host
->
str
,
host
->
length
,
MYF
(
MY_WME
));
port
->
str
=
my_strndup
(
port
->
str
,
port
->
length
,
MYF
(
MY_WME
));
return
0
;
}
}
// namespace feedback
plugin/feedback/url_http.cc
View file @
ea0c3fc8
...
...
@@ -38,20 +38,39 @@ class Url_http: public Url {
protected:
const
LEX_STRING
host
,
port
,
path
;
bool
ssl
;
LEX_STRING
proxy_host
,
proxy_port
;
int
use_proxy
()
{
return
proxy_host
.
length
;
}
Url_http
(
LEX_STRING
&
url_arg
,
LEX_STRING
&
host_arg
,
LEX_STRING
&
port_arg
,
LEX_STRING
&
path_arg
,
bool
ssl_arg
)
:
Url
(
url_arg
),
host
(
host_arg
),
port
(
port_arg
),
path
(
path_arg
),
ssl
(
ssl_arg
)
{}
{
proxy_host
.
length
=
0
;
}
~
Url_http
()
{
my_free
(
host
.
str
);
my_free
(
port
.
str
);
my_free
(
path
.
str
);
set_proxy
(
0
,
0
);
}
public:
int
send
(
const
char
*
data
,
size_t
data_length
);
int
set_proxy
(
const
char
*
proxy
,
size_t
proxy_len
)
{
if
(
use_proxy
())
{
my_free
(
proxy_host
.
str
);
my_free
(
proxy_port
.
str
);
}
return
parse_proxy_server
(
proxy
,
proxy_len
,
&
proxy_host
,
&
proxy_port
);
}
friend
Url
*
http_create
(
const
char
*
url
,
size_t
url_length
);
};
...
...
@@ -150,7 +169,9 @@ int Url_http::send(const char* data, size_t data_length)
uint
len
=
0
;
addrinfo
*
addrs
,
*
addr
,
filter
=
{
0
,
AF_UNSPEC
,
SOCK_STREAM
,
6
,
0
,
0
,
0
,
0
};
int
res
=
getaddrinfo
(
host
.
str
,
port
.
str
,
&
filter
,
&
addrs
);
int
res
=
use_proxy
()
?
getaddrinfo
(
proxy_host
.
str
,
proxy_port
.
str
,
&
filter
,
&
addrs
)
:
getaddrinfo
(
host
.
str
,
port
.
str
,
&
filter
,
&
addrs
);
if
(
res
)
{
...
...
@@ -228,7 +249,11 @@ int Url_http::send(const char* data, size_t data_length)
};
len
=
my_snprintf
(
buf
,
sizeof
(
buf
),
"POST %s HTTP/1.0
\r\n
"
use_proxy
()
?
"POST http://%s:%s/"
:
"POST "
,
host
.
str
,
port
.
str
);
len
+=
my_snprintf
(
buf
+
len
,
sizeof
(
buf
)
-
len
,
"%s HTTP/1.0
\r\n
"
"User-Agent: MariaDB User Feedback Plugin
\r\n
"
"Host: %s:%s
\r\n
"
"Accept: */*
\r\n
"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment