fix proxy connect default tip

Sun, 22 Feb 2026 13:39:39 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 22 Feb 2026 13:39:39 +0100
changeset 700
658f4c02b4c5
parent 699
d794871da099

fix proxy connect

src/server/proxy/httpclient.c file | annotate | diff | comparison | revisions
src/server/proxy/httpclient.h file | annotate | diff | comparison | revisions
src/server/safs/proxy.c file | annotate | diff | comparison | revisions
--- a/src/server/proxy/httpclient.c	Sun Feb 22 13:19:12 2026 +0100
+++ b/src/server/proxy/httpclient.c	Sun Feb 22 13:39:39 2026 +0100
@@ -97,10 +97,11 @@
     free(client);
 }
 
-int http_client_set_addr(HttpClient *client, const struct sockaddr *addr, socklen_t addrlen) {
+int http_client_set_addr(HttpClient *client, int domain, const struct sockaddr *addr, socklen_t addrlen) {
    free(client->addr);
    client->addr = NULL;
    client->addrlen = 0;
+   client->domain = domain;
    
    void *newaddr = malloc(addrlen);
    if(!newaddr) {
@@ -185,7 +186,7 @@
 }
 
 int http_client_start(HttpClient *client) {
-    int socketfd = socket(AF_INET, SOCK_STREAM, 0);
+    int socketfd = socket(client->domain, SOCK_STREAM, 0);
     if(socketfd < 0) {
         return 1;
     }
--- a/src/server/proxy/httpclient.h	Sun Feb 22 13:19:12 2026 +0100
+++ b/src/server/proxy/httpclient.h	Sun Feb 22 13:39:39 2026 +0100
@@ -58,6 +58,7 @@
     
     struct sockaddr *addr;
     size_t addrlen;
+    int domain;
     
     int socketfd;
     HttpStream *stream;
@@ -172,7 +173,7 @@
 
 void http_client_free(HttpClient *client);
 
-int http_client_set_addr(HttpClient *client, const struct sockaddr *addr, socklen_t addrlen);
+int http_client_set_addr(HttpClient *client, int domain, const struct sockaddr *addr, socklen_t addrlen);
 
 int http_client_set_method(HttpClient *client, const char *method);
 
--- a/src/server/safs/proxy.c	Sun Feb 22 13:19:12 2026 +0100
+++ b/src/server/safs/proxy.c	Sun Feb 22 13:39:39 2026 +0100
@@ -262,7 +262,7 @@
     
     // set server address
     struct addrinfo hints = { 0 };
-    hints.ai_family = AF_UNSPEC;
+    hints.ai_family = AF_INET; //AF_UNSPEC;
     hints.ai_socktype = SOCK_STREAM;
     struct addrinfo *srv_addr;
     if(getaddrinfo(srvhost, srvport, &hints, &srv_addr)) {
@@ -271,21 +271,24 @@
         return REQ_ABORTED;
     }
     
-    int ret = http_client_set_addr(client, srv_addr->ai_addr, srv_addr->ai_addrlen);
+    WSBool addr_set = FALSE;
+    struct addrinfo *addr = srv_addr;
+    while(addr) {
+        if(addr->ai_family == AF_INET || addr->ai_family == AF_INET6) {
+            if(!http_client_set_addr(client, addr->ai_family, addr->ai_addr, addr->ai_addrlen)) {
+                addr_set = TRUE;
+            }
+            break;
+        }
+        
+        addr = addr->ai_next;
+    }
     freeaddrinfo(srv_addr);
-    if(ret) {
+    if(!addr_set) {
         http_client_free(client);
         return REQ_ABORTED;
     }
     
-    // test address
-    struct sockaddr_in address;
-    inet_pton(AF_INET, "127.0.0.1", &address.sin_addr);
-    address.sin_family = AF_INET;
-    address.sin_port = htons(8080);
-    http_client_set_addr(client, (struct sockaddr*)&address, sizeof(address));    
-    http_client_add_request_header(client, cx_mutstr("host"), cx_mutstr("localhost:8080"));
-    
     // add request headers to the client
     CxIterator i = pblock_iterator(rq->headers);
     cx_foreach(pb_entry*, entry, i) {

mercurial