VirtualBox

Changeset 85650 in vbox for trunk/src/VBox/Runtime


Ignore:
Timestamp:
Aug 8, 2020 2:06:23 PM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
139775
Message:

IPRT/http,VBoxManage,CloudGateway: Corrections to the proxy information retrival interface. Main problem was that it did not include the possibility of indicating that no proxying was needed. Corrected user code to not use uProxyPort when it's set to UINT32_MAX. Bunch of cleanups. Completely untested. bugref:9469

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/generic/http-curl.cpp

    r85646 r85650  
    35563556
    35573557
    3558 RTR3DECL(int) RTHttpGetProxyInfoForUrl(RTHTTP hHttp, const char *pcszUrl, PRTHTTPPROXYINFO pProxy)
    3559 {
    3560     PRTHTTPINTERNAL pThis = hHttp;
     3558RTR3DECL(int) RTHttpQueryProxyInfoForUrl(RTHTTP hHttp, const char *pszUrl, PRTHTTPPROXYINFO pProxy)
     3559{
     3560    /*
     3561     * Validate input and clear output.
     3562     */
     3563    Log(("RTHttpQueryProxyInfoForUrl: hHttp=%p pszUrl=%s pProxy=%s\n", hHttp, pszUrl, pProxy));
     3564    RT_ZERO(*pProxy);
     3565    pProxy->uProxyPort = UINT32_MAX;
     3566
     3567    PRTHTTPINTERNAL pThis = hHttp;
     3568    RTHTTP_VALID_RETURN(pThis);
     3569
     3570    /*
     3571     * Set up the proxy for the URL.
     3572     */
    35613573    rtHttpResetState(pThis);
    3562     int rc = rtHttpApplySettings(pThis, pcszUrl);
    3563     if (RT_FAILURE(rc))
    3564         return rc;
    3565 
    3566     switch (pThis->enmProxyType)
    3567     {
    3568         case CURLPROXY_HTTP:
    3569         case CURLPROXY_HTTP_1_0:
    3570             pProxy->enmProxyType = RTHTTPPROXYTYPE_HTTP;
    3571             break;
     3574    /** @todo this does a bit too much (we don't need to set up SSL for instance). */
     3575    int rc = rtHttpApplySettings(pThis, pszUrl);
     3576    if (RT_SUCCESS(rc))
     3577    {
     3578        /*
     3579         * Copy out the result.
     3580         */
     3581        if (pThis->fNoProxy)
     3582            pProxy->enmProxyType = RTHTTPPROXYTYPE_NOPROXY;
     3583        else
     3584        {
     3585            switch (pThis->enmProxyType)
     3586            {
     3587                case CURLPROXY_HTTP:
     3588#ifdef CURL_AT_LEAST_VERSION
     3589# if CURL_AT_LEAST_VERSION(7,19,4)
     3590                case CURLPROXY_HTTP_1_0:
     3591# endif
     3592#endif
     3593                    pProxy->enmProxyType = RTHTTPPROXYTYPE_HTTP;
     3594                    break;
    35723595#ifdef CURL_AT_LEAST_VERSION
    35733596# if CURL_AT_LEAST_VERSION(7,52,0)
    3574         case CURLPROXY_HTTPS:
    3575             pProxy->enmProxyType = RTHTTPPROXYTYPE_HTTPS;
    3576             break;
     3597                case CURLPROXY_HTTPS:
     3598                    pProxy->enmProxyType = RTHTTPPROXYTYPE_HTTPS;
     3599                    break;
    35773600# endif
    35783601#endif
    3579         case CURLPROXY_SOCKS4:
    3580         case CURLPROXY_SOCKS4A:
    3581             pProxy->enmProxyType = RTHTTPPROXYTYPE_SOCKS4;
    3582             break;
    3583         case CURLPROXY_SOCKS5:
    3584         case CURLPROXY_SOCKS5_HOSTNAME:
    3585             pProxy->enmProxyType = RTHTTPPROXYTYPE_SOCKS5;
    3586             break;
    3587         default:
    3588             pProxy->enmProxyType = RTHTTPPROXYTYPE_UNKNOWN;
    3589             break;
    3590     }
    3591     if (pThis->pszProxyHost == NULL)
    3592         return VERR_INTERNAL_ERROR;
    3593     pProxy->pszProxyHost = RTStrDup(pThis->pszProxyHost);
    3594     pProxy->uProxyPort = pThis->uProxyPort;
    3595     pProxy->pszProxyUsername = NULL;
    3596     pProxy->pszProxyPassword = NULL;
    3597 
    3598     return VINF_SUCCESS;
     3602                case CURLPROXY_SOCKS4:
     3603                case CURLPROXY_SOCKS4A:
     3604                    pProxy->enmProxyType = RTHTTPPROXYTYPE_SOCKS4;
     3605                    break;
     3606                case CURLPROXY_SOCKS5:
     3607                case CURLPROXY_SOCKS5_HOSTNAME:
     3608                    pProxy->enmProxyType = RTHTTPPROXYTYPE_SOCKS5;
     3609                    break;
     3610                default:
     3611                    AssertFailed();
     3612                    pProxy->enmProxyType = RTHTTPPROXYTYPE_UNKNOWN;
     3613                    break;
     3614            }
     3615            pProxy->uProxyPort = pThis->uProxyPort;
     3616            if (pThis->pszProxyHost != NULL)
     3617            {
     3618                rc = RTStrDupEx(&pProxy->pszProxyHost, pThis->pszProxyHost);
     3619                if (pThis->pszProxyUsername && RT_SUCCESS(rc))
     3620                    rc = RTStrDupEx(&pProxy->pszProxyUsername, pThis->pszProxyUsername);
     3621                if (pThis->pszProxyPassword && RT_SUCCESS(rc))
     3622                    rc = RTStrDupEx(&pProxy->pszProxyPassword, pThis->pszProxyPassword);
     3623                if (RT_FAILURE(rc))
     3624                    RTHttpFreeProxyInfo(pProxy);
     3625            }
     3626            else
     3627            {
     3628                AssertFailed();
     3629                rc = VERR_INTERNAL_ERROR;
     3630            }
     3631        }
     3632    }
     3633    return rc;
    35993634}
    36003635
     
    36073642        RTStrFree(pProxy->pszProxyUsername);
    36083643        RTStrFree(pProxy->pszProxyPassword);
     3644        pProxy->pszProxyHost     = NULL;
     3645        pProxy->pszProxyUsername = NULL;
     3646        pProxy->pszProxyPassword = NULL;
     3647        pProxy->enmProxyType     = RTHTTPPROXYTYPE_INVALID;
     3648        pProxy->uProxyPort       = UINT32_MAX;
    36093649    }
    36103650    return VINF_SUCCESS;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette