diff options
Diffstat (limited to 'pki/base/tps/src/httpClient/httpClient.cpp')
| -rw-r--r-- | pki/base/tps/src/httpClient/httpClient.cpp | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/pki/base/tps/src/httpClient/httpClient.cpp b/pki/base/tps/src/httpClient/httpClient.cpp index 0e4649e4..7f4e9fff 100644 --- a/pki/base/tps/src/httpClient/httpClient.cpp +++ b/pki/base/tps/src/httpClient/httpClient.cpp @@ -51,7 +51,66 @@ PSHttpResponse *httpSend(char *host_port, char *uri, char *method, char *body) const char* nickname; nickname = RA::GetConfigStore()->GetConfigAsString("ra.clientNickname", ""); - PSHttpServer server(host_port, PR_AF_INET); + char *pPort = NULL; + char *pPortActual = NULL; + + + char hostName[512]; + + /* + * Isolate the host name, account for IPV6 numeric addresses. + * + */ + + if(host_port) + strncpy(hostName,host_port,512); + + pPort = hostName; + while(1) { + pPort = strchr(pPort, ':'); + if (pPort) { + pPortActual = pPort; + pPort++; + } else + break; + } + + if(pPortActual) + *pPortActual = '\0'; + + + /* + * Rifle through the values for the host + */ + + PRAddrInfo *ai; + void *iter; + PRNetAddr addr; + int family = PR_AF_INET; + + ai = PR_GetAddrInfoByName(hostName, PR_AF_UNSPEC, PR_AI_ADDRCONFIG); + if (ai) { + printf("%s\n", PR_GetCanonNameFromAddrInfo(ai)); + iter = NULL; + while ((iter = PR_EnumerateAddrInfo(iter, ai, 0, &addr)) != NULL) { + char buf[512]; + PR_NetAddrToString(&addr, buf, sizeof buf); + RA::Debug( LL_PER_PDU, + "PSHttpResponse::httpSend: ", + "Sending addr -- Msg='%s'\n", + buf ); + family = PR_NetAddrFamily(&addr); + RA::Debug( LL_PER_PDU, + "PSHttpResponse::httpSend: ", + "Sending family -- Msg='%d'\n", + family ); + break; + } + PR_FreeAddrInfo(ai); + + } + + PSHttpServer server(host_port, family); server.setSSL(PR_TRUE); // use "HTTP10" if no chunking PSHttpRequest request( &server, uri, HTTP11, 0 ); |
