src/server/safs/proxy.c

changeset 700
658f4c02b4c5
parent 699
d794871da099
equal deleted inserted replaced
699:d794871da099 700:658f4c02b4c5
260 return REQ_ABORTED; 260 return REQ_ABORTED;
261 } 261 }
262 262
263 // set server address 263 // set server address
264 struct addrinfo hints = { 0 }; 264 struct addrinfo hints = { 0 };
265 hints.ai_family = AF_UNSPEC; 265 hints.ai_family = AF_INET; //AF_UNSPEC;
266 hints.ai_socktype = SOCK_STREAM; 266 hints.ai_socktype = SOCK_STREAM;
267 struct addrinfo *srv_addr; 267 struct addrinfo *srv_addr;
268 if(getaddrinfo(srvhost, srvport, &hints, &srv_addr)) { 268 if(getaddrinfo(srvhost, srvport, &hints, &srv_addr)) {
269 http_client_free(client); 269 http_client_free(client);
270 log_ereport(LOG_FAILURE, "reverse-proxy: getaddr failed for address %s: %s", srvhost, strerror(errno)); 270 log_ereport(LOG_FAILURE, "reverse-proxy: getaddr failed for address %s: %s", srvhost, strerror(errno));
271 return REQ_ABORTED; 271 return REQ_ABORTED;
272 } 272 }
273 273
274 int ret = http_client_set_addr(client, srv_addr->ai_addr, srv_addr->ai_addrlen); 274 WSBool addr_set = FALSE;
275 struct addrinfo *addr = srv_addr;
276 while(addr) {
277 if(addr->ai_family == AF_INET || addr->ai_family == AF_INET6) {
278 if(!http_client_set_addr(client, addr->ai_family, addr->ai_addr, addr->ai_addrlen)) {
279 addr_set = TRUE;
280 }
281 break;
282 }
283
284 addr = addr->ai_next;
285 }
275 freeaddrinfo(srv_addr); 286 freeaddrinfo(srv_addr);
276 if(ret) { 287 if(!addr_set) {
277 http_client_free(client); 288 http_client_free(client);
278 return REQ_ABORTED; 289 return REQ_ABORTED;
279 } 290 }
280
281 // test address
282 struct sockaddr_in address;
283 inet_pton(AF_INET, "127.0.0.1", &address.sin_addr);
284 address.sin_family = AF_INET;
285 address.sin_port = htons(8080);
286 http_client_set_addr(client, (struct sockaddr*)&address, sizeof(address));
287 http_client_add_request_header(client, cx_mutstr("host"), cx_mutstr("localhost:8080"));
288 291
289 // add request headers to the client 292 // add request headers to the client
290 CxIterator i = pblock_iterator(rq->headers); 293 CxIterator i = pblock_iterator(rq->headers);
291 cx_foreach(pb_entry*, entry, i) { 294 cx_foreach(pb_entry*, entry, i) {
292 cxmutstr header_value; 295 cxmutstr header_value;

mercurial