@@ -38,20 +38,39 @@ class Url_http: public Url {
3838 protected:
3939 const LEX_STRING host, port, path;
4040 bool ssl;
41+ LEX_STRING proxy_host, proxy_port;
42+
43+ int use_proxy ()
44+ {
45+ return proxy_host.length ;
46+ }
4147
4248 Url_http (LEX_STRING &url_arg, LEX_STRING &host_arg,
4349 LEX_STRING &port_arg, LEX_STRING &path_arg, bool ssl_arg) :
4450 Url (url_arg), host(host_arg), port(port_arg), path(path_arg), ssl(ssl_arg)
45- {}
51+ {
52+ proxy_host.length = 0 ;
53+ }
4654 ~Url_http ()
4755 {
4856 my_free (host.str );
4957 my_free (port.str );
5058 my_free (path.str );
59+ set_proxy (0 ,0 );
5160 }
5261
5362 public:
5463 int send (const char * data, size_t data_length);
64+ int set_proxy (const char *proxy, size_t proxy_len)
65+ {
66+ if (use_proxy ())
67+ {
68+ my_free (proxy_host.str );
69+ my_free (proxy_port.str );
70+ }
71+
72+ return parse_proxy_server (proxy, proxy_len, &proxy_host, &proxy_port);
73+ }
5574
5675 friend Url* http_create (const char *url, size_t url_length);
5776};
@@ -150,7 +169,9 @@ int Url_http::send(const char* data, size_t data_length)
150169 uint len= 0 ;
151170
152171 addrinfo *addrs, *addr, filter= {0 , AF_UNSPEC, SOCK_STREAM, 6 , 0 , 0 , 0 , 0 };
153- int res= getaddrinfo (host.str , port.str , &filter, &addrs);
172+ int res= use_proxy () ?
173+ getaddrinfo (proxy_host.str , proxy_port.str , &filter, &addrs) :
174+ getaddrinfo (host.str , port.str , &filter, &addrs);
154175
155176 if (res)
156177 {
@@ -228,16 +249,20 @@ int Url_http::send(const char* data, size_t data_length)
228249 };
229250
230251 len= my_snprintf (buf, sizeof (buf),
231- " POST %s HTTP/1.0\r\n "
232- " User-Agent: MariaDB User Feedback Plugin\r\n "
233- " Host: %s:%s\r\n "
234- " Accept: */*\r\n "
235- " Content-Length: %u\r\n "
236- " Content-Type: multipart/form-data; boundary=%s\r\n "
237- " \r\n " ,
238- path.str , host.str , port.str ,
239- (uint)(2 *boundary.length + header.length + data_length + 4 ),
240- boundary.str + 2 );
252+ use_proxy () ? " POST http://%s:%s/" : " POST " ,
253+ host.str , port.str );
254+
255+ len+= my_snprintf (buf+len, sizeof (buf)-len,
256+ " %s HTTP/1.0\r\n "
257+ " User-Agent: MariaDB User Feedback Plugin\r\n "
258+ " Host: %s:%s\r\n "
259+ " Accept: */*\r\n "
260+ " Content-Length: %u\r\n "
261+ " Content-Type: multipart/form-data; boundary=%s\r\n "
262+ " \r\n " ,
263+ path.str , host.str , port.str ,
264+ (uint)(2 *boundary.length + header.length + data_length + 4 ),
265+ boundary.str + 2 );
241266
242267 vio_timeout (vio, FOR_READING, send_timeout);
243268 vio_timeout (vio, FOR_WRITING, send_timeout);
0 commit comments