123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428 |
- #ifdef WINAMPX
- #define WIN32_LEAN_AND_MEAN 1
- #include <windows.h>
- #include "stdio.h"
- #include "proxydt.h"
- #include <winsock2.h>
- #include ".\ws2tcpip.h"
- #include ".\wininet.h"
- #include "../jnetlib/jnetlib.h"
- #include <urlmon.h>
- extern void SendMetadata( char *data, int arg );
- HRESULT JNetLibDownloadToFile(LPVOID lpUnused1, LPSTR lpWPADLocation, LPSTR lpTempFile, LPVOID lpUnused2, LPVOID lpUnused3);
- enum {
- BK_UNKNOWN = 0,
- BK_IE4 = 1,
- BK_NETSCAPE4 = 2,
- BK_NETSCAPE6 = 3,
- BK_MOZILLA = 4,
- BK_FIREFOX = 5
- };
- typedef struct{
- LPSTR lpName;
- BOOL bSupported;
- }BK_INFO;
- BK_INFO BrowserInfo[] = {
- "Unknown", FALSE,
- "IE 4.0+", TRUE,
- "Netscape 4 or 5", FALSE,
- "Netscape 6+", TRUE,
- "Mozilla", TRUE,
- "Firefox", TRUE
- };
- int gBrowserKind = BK_UNKNOWN;
- int gTryAuto = 1;
- extern "C" BOOL ProxyInit();
- extern "C" void ProxyDeInit();
- extern "C" int ResolvProxyFromURL(LPSTR lpURL, LPSTR lpHostname, LPSTR lpDest);
- BOOL IsIEProxySet();
- int GetIESettings();
- int ResolveURL_IE(LPSTR lpURL, LPSTR lpHostname, LPSTR lpIPAddress, int sizeof_address, int *pnPort);
- BOOL IsFirefoxProxySet();
- int GetFirefoxSettings();
- int ResolveURL_Firefox(LPSTR lpURL, LPSTR lpHostname, LPSTR lpIPAddress, int sizeof_address, int *pnPort);
- BOOL IsMozillaProxySet();
- int GetMozillaSettings();
- int ResolveURL_Mozilla(LPSTR lpURL, LPSTR lpHostname, LPSTR lpIPAddress, int sizeof_address, int *pnPort);
- int GetDefaultBrowser();
- int ReadWPADFile(LPSTR lpWPADLocation, LPSTR pIPAddress, int *pnPort);
- int GetFirefoxOrMozillaSettings(BOOL bFirefox);
- BOOL IsFirefoxOrMozillaProxySet(BOOL bFirefox);
- int ResolveURL_MozillaOrFirefox(BOOL bFirefox, LPSTR lpURL, LPSTR lpHostname, LPSTR lpIPAddress, int sizeof_address, int *pnPort);
- extern "C" BOOL ProxyInit()
- {
- BOOL bRet;
- bRet = FALSE;
- gBrowserKind = GetDefaultBrowser();
-
- switch(gBrowserKind) {
- case BK_IE4:
- bRet = IsIEProxySet();
- break;
- case BK_MOZILLA:
- bRet = IsMozillaProxySet();
-
- break;
- case BK_FIREFOX:
- bRet = IsFirefoxProxySet();
- break;
- }
- return bRet;
- }
- extern "C" void ProxyDeInit()
- {
- }
- extern "C" int ResolvProxyFromURL(LPSTR lpURL, LPSTR lpHostname, LPSTR lpDest)
- {
-
-
-
- char szIPAddress[MAX_PATH] = {0};
- int ret, nPort=0;
- lpDest[0]=0;
- if(lpURL && lpHostname && lpDest) {
- switch(gBrowserKind) {
- case BK_IE4:
- ret = ResolveURL_IE(lpURL, lpHostname, szIPAddress, sizeof(szIPAddress), &nPort);
- break;
- case BK_MOZILLA:
- ret = ResolveURL_Mozilla(lpURL, lpHostname, szIPAddress, sizeof(szIPAddress), &nPort);
- break;
- case BK_FIREFOX:
- ret = ResolveURL_Firefox(lpURL, lpHostname, szIPAddress, sizeof(szIPAddress), &nPort);
- break;
- }
- if(ret == 0) {
- if ( szIPAddress[0] )
- {
- wsprintf(lpDest, "%s:%d", szIPAddress, nPort);
- return 1;
- }
- else return 0;
- }
- else return 0;
- }
- else return -1;
- }
- int GetDefaultBrowser()
- {
- DWORD dwSize, dwType;
- TCHAR valueBuf[MAX_PATH] = {0};
- DWORD valueSize = sizeof(valueBuf);
- HKEY hKey;
- long lRet;
- memset(valueBuf, 0, sizeof(valueBuf));
- lRet = RegOpenKeyEx(HKEY_CLASSES_ROOT, "http\\shell\\open\\ddeexec\\Application", 0, KEY_READ, &hKey);
- if (lRet == ERROR_SUCCESS) {
- dwSize = valueSize;
- lRet = RegQueryValueEx(hKey, "", NULL, &dwType, (LPBYTE)valueBuf, &dwSize);
- if(lRet == ERROR_SUCCESS && dwType == REG_SZ) {
- if (_tcsicmp(_T("NSShell"), valueBuf) == 0) {
- return BK_NETSCAPE4;
- } else if (_tcsicmp(_T("IExplore"), valueBuf) == 0) {
- return BK_IE4;
- } else if (_tcsicmp(_T("Mozilla"), valueBuf) == 0) {
- return BK_MOZILLA;
- } else if (_tcsicmp(_T("Firefox"), valueBuf) == 0) {
- return BK_FIREFOX;
- }
- }
- }
- RegCloseKey(hKey);
- lRet = RegOpenKeyEx(HKEY_CLASSES_ROOT, "http\\shell\\open\\command", 0, KEY_READ, &hKey);
- if(lRet == ERROR_SUCCESS) {
- dwSize = valueSize;
- lRet = RegQueryValueEx(hKey, "", NULL, &dwType, (LPBYTE)valueBuf, &dwSize);
- if(lRet == ERROR_SUCCESS && dwType == REG_SZ) {
- if(strstr(valueBuf, "MOZILLA")) {
- return BK_MOZILLA;
- }
- if(strstr(valueBuf, "NETSCAPE")) {
- return BK_MOZILLA;
- }
- if(strstr(valueBuf, "FIREFOX")) {
- return BK_FIREFOX;
- }
- }
- }
- RegCloseKey(hKey);
- return BK_UNKNOWN;
- }
- DWORD __stdcall ResolveHostName(LPSTR lpszHostName, LPSTR lpszIPAddress, LPDWORD lpdwIPAddressSize);
- BOOL __stdcall IsResolvable(LPSTR lpszHost);
- DWORD __stdcall GetIPAddress(LPSTR lpszIPAddress, LPDWORD lpdwIPAddressSize);
- BOOL __stdcall IsInNet(LPSTR lpszIPAddress, LPSTR lpszDest, LPSTR lpszMask);
- BOOL GetAutomaticallyDetectSettingsCheckboxState();
- BOOL GetUseAProxyServerForYourLanCheckboxState();
- BOOL GetAutomaticConfigurationScriptCheckboxState();
- BOOL GetBypassProxyServerForLocalAddressesCheckboxState();
- int GetAutomaticDetectSettings(LPSTR lpIPAddress, int *pnPort);
- int GetProxyServerForLanProxySettings(LPSTR lpIPAddress, int *pnPort);
- int GetAutoConfigScriptProxySettings(LPSTR lpIPAddress, int *pnPort);
- BOOL IsDirect(LPSTR proxy);
- BOOL IsAProxy(LPSTR proxy);
- void reportFuncErr(TCHAR* funcName);
- char * strstri(LPSTR lpOne, LPSTR lpTwo);
- int GetProxyIP(LPSTR proxy, LPSTR szProxyIP);
- int GetProxyPort(LPSTR proxy);
- char gszURL[1025] = {0};
- char gszHost[256] = {0};
- BOOL IsIEProxySet()
- {
- BOOL bAutomaticallyDetectSettings = GetAutomaticallyDetectSettingsCheckboxState();
- BOOL bUseAutomaticConfigurationScript = GetAutomaticConfigurationScriptCheckboxState();
- BOOL bUseAProxyServerForYourLan = GetUseAProxyServerForYourLanCheckboxState();
- if(bAutomaticallyDetectSettings || bUseAutomaticConfigurationScript || bUseAProxyServerForYourLan) {
- return TRUE;
- }
- return FALSE;
- }
- int ResolveURL_IE(LPSTR lpURL, LPSTR lpHostname, LPSTR lpIPAddress, int sizeof_address, int *pnPort)
- {
-
- BOOL bAutomaticallyDetectSettings = GetAutomaticallyDetectSettingsCheckboxState();
- BOOL bUseAutomaticConfigurationScript = GetAutomaticConfigurationScriptCheckboxState();
- BOOL bUseAProxyServerForYourLan = GetUseAProxyServerForYourLanCheckboxState();
-
- int ret;
- lstrcpyn(gszURL, lpURL, 1025);
- lstrcpyn(gszHost, lpHostname, 256);
-
- if(!bAutomaticallyDetectSettings && !bUseAutomaticConfigurationScript && !bUseAProxyServerForYourLan) {
- return 0;
- }
-
- if(bAutomaticallyDetectSettings && gTryAuto)
- {
-
- ret = GetAutomaticDetectSettings(lpIPAddress, pnPort);
- if(ret == 0 && *pnPort) {
- return 0;
- }
- gTryAuto = 0;
- }
- if ( bUseAutomaticConfigurationScript)
- {
-
- ret = GetAutoConfigScriptProxySettings(lpIPAddress, pnPort);
- if(ret == 0 && *pnPort ) {
- return 0;
- }
- }
- if ( bUseAProxyServerForYourLan)
- {
-
- ret = GetProxyServerForLanProxySettings(lpIPAddress, pnPort);
- if(ret == 0 && *pnPort) {
- return 0;
- }
- }
-
- return 0;
- }
- int GetAutomaticDetectSettings(LPSTR lpIPAddress, int *pnPort)
- {
-
-
-
- if(lpIPAddress && pnPort) {
-
- return ReadWPADFile("http://wpad/wpad.dat", lpIPAddress, pnPort);
- }
- return -1;
- }
- int GetAutoConfigScriptProxySettings(LPSTR lpIPAddress, int *pnPort)
- {
- DWORD dwType, dwSize;
- HKEY hKey;
- char szWPADLocation[MAX_PATH] = {0};
- long lRet;
- int retval = -1;
- if(!lpIPAddress) {
- return retval;
- }
- if(!pnPort) {
- return retval;
- }
-
- lstrcpyn(szWPADLocation, "", MAX_PATH);
- lRet = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", 0, KEY_READ, &hKey);
- if (lRet == ERROR_SUCCESS) {
- dwSize = sizeof(szWPADLocation);
- lRet = RegQueryValueEx(hKey, "AutoConfigURL", NULL, &dwType, (LPBYTE)szWPADLocation, &dwSize);
- if(lRet == ERROR_SUCCESS && dwType == REG_SZ) {
- retval = ReadWPADFile(szWPADLocation, lpIPAddress, pnPort);
- }
- }
- RegCloseKey(hKey);
- return retval;
- }
- int GetProxyServerForLanProxySettings(LPSTR lpIPAddress, int *pnPort)
- {
- DWORD dwType, dwSize;
- HKEY hKey;
- BOOL bDirectOrProxy;
- char szProxy[MAX_PATH] = {0};
- long lRet;
- int retval = -1;
- if(lpIPAddress) {
- strcpy(lpIPAddress, "");
- }
- if(pnPort) {
- *pnPort = 0;
- }
- lRet = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", 0, KEY_READ, &hKey);
- if (lRet == ERROR_SUCCESS) {
- dwSize = sizeof(szProxy);
- lRet = RegQueryValueEx(hKey, "ProxyServer", NULL, &dwType, (LPBYTE)szProxy, &dwSize);
- if(lRet == ERROR_SUCCESS && dwType == REG_SZ) {
- retval = 0;
- bDirectOrProxy = FALSE;
- if(IsDirect(szProxy)) {
-
-
- bDirectOrProxy = TRUE;
-
- if(lpIPAddress) {
- strcpy(lpIPAddress, "");
- }
- if(pnPort) {
- *pnPort = 0;
- }
- }
- if(IsAProxy(szProxy)) {
- char szProxyIP[MAX_PATH] = {0};
-
- bDirectOrProxy = TRUE;
- GetProxyIP(szProxy, szProxyIP);
-
-
- if(lpIPAddress) {
- strcpy(lpIPAddress, szProxyIP);
- }
- if(pnPort) {
- *pnPort = GetProxyPort(szProxy);
- }
- }
- if(!bDirectOrProxy) {
-
- LPSTR lpColon = NULL;
-
- if ( isdigit(szProxy[0]) )
- {
- lpColon = strchr(szProxy, ':');
- if(lpColon) {
- *lpColon = '\0';
-
- if(lpIPAddress) {
- strcpy(lpIPAddress, szProxy);
- }
- *lpColon = ':';
- if(pnPort) {
- *pnPort = GetProxyPort(szProxy);
- }
- }
- }
- else if ( strstr(szProxy,"http=") )
- {
- char *p = strstr(szProxy,"http=");
- int offset= strlen("http=");
- char *semi = strchr(p+offset, ';');
- if(semi) {
- *semi= '\0';
- }
- lpColon = strchr(p+offset, ':');
- if(lpColon) {
- *lpColon = '\0';
- }
-
- if(lpIPAddress) {
- strcpy(lpIPAddress, p+offset);
- }
- if (lpColon)
- if(pnPort) {
- *pnPort = (short)atoi(lpColon+1);
- }
- if ( !*pnPort ) *pnPort = 80;
-
- }
- else
- {
- if(lpIPAddress) {
- strcpy(lpIPAddress, "");
- }
- if(pnPort) {
- *pnPort = 0;
- }
- }
- }
- }
- }
- RegCloseKey(hKey);
-
- return retval;
- }
- int ReadWPADFile(LPSTR lpWPADLocation, LPSTR lpIPAddress, int *pnPort)
- {
-
- pfnInternetInitializeAutoProxyDll pInternetInitializeAutoProxyDll;
- pfnInternetDeInitializeAutoProxyDll pInternetDeInitializeAutoProxyDll;
- pfnInternetGetProxyInfo pInternetGetProxyInfo;
-
-
-
- AutoProxyHelperVtbl Vtbl = {IsResolvable, GetIPAddress, ResolveHostName, IsInNet };
- AutoProxyHelperFunctions HelperFunctions = { &Vtbl };
- HMODULE hModJS;
- HRESULT hr;
- char szTempPath[MAX_PATH] = {0};
- char szTempFile[MAX_PATH] = {0};
- int retval = 0;
- if(!(hModJS = LoadLibrary("jsproxy.dll"))) {
- reportFuncErr("LoadLibrary");
- return -1;
- }
- if(!(pInternetInitializeAutoProxyDll = (pfnInternetInitializeAutoProxyDll)
- GetProcAddress(hModJS, "InternetInitializeAutoProxyDll")) ||
- !(pInternetDeInitializeAutoProxyDll = (pfnInternetDeInitializeAutoProxyDll)
- GetProcAddress(hModJS, "InternetDeInitializeAutoProxyDll")) ||
- !(pInternetGetProxyInfo = (pfnInternetGetProxyInfo)
- GetProcAddress(hModJS, "InternetGetProxyInfo"))) {
- FreeLibrary(hModJS);
- reportFuncErr("GetProcAddress");
- return -1;
- }
- if(lpIPAddress)
- {
- strcpy(lpIPAddress, "");
- }
- if(pnPort) {
- *pnPort = 0;
- }
- GetTempPathA(sizeof(szTempPath)/sizeof(szTempPath[0]), szTempPath);
- GetTempFileNameA(szTempPath, "X", 2, szTempFile);
-
- hr = JNetLibDownloadToFile(NULL, lpWPADLocation, szTempFile, NULL, NULL);
- if(hr == S_OK) {
- if(!pInternetInitializeAutoProxyDll(0, szTempFile, NULL, &HelperFunctions, NULL)) {
-
- pInternetDeInitializeAutoProxyDll(NULL, 0);
- FreeLibrary(hModJS);
- retval = -1;
- }else{
-
-
-
-
-
- DeleteFileA(szTempFile);
- DWORD dwSize = 0;
- LPSTR pProxy = NULL;
- if(!pInternetGetProxyInfo((LPSTR)gszURL, sizeof(gszURL), (LPSTR)gszHost, sizeof(gszHost), &pProxy, &dwSize)) {
- reportFuncErr("InternetGetProxyInfo");
- retval = -1;
- }else{
-
- if(IsDirect(pProxy)) {
-
-
- if(lpIPAddress) {
- strcpy(lpIPAddress, "");
- }
- if(pnPort) {
- *pnPort = 0;
- }
- }
- if(IsAProxy(pProxy)) {
- char szProxyIP[MAX_PATH] = {0};
- GetProxyIP(pProxy, szProxyIP);
-
-
- if(lpIPAddress) {
- strcpy(lpIPAddress, szProxyIP);
- }
- if(pnPort) {
- *pnPort = GetProxyPort(pProxy);
- }
- }
- }
- }
- }else{
-
-
- if(lpIPAddress) {
- strcpy(lpIPAddress, "");
- }
- if(pnPort) {
- *pnPort = 0;
- }
- retval = 0;
- }
- if(!pInternetDeInitializeAutoProxyDll(NULL, 0)) {
- reportFuncErr("InternetDeInitializeAutoProxyDll");
- }
- return retval;
- }
- int GetProxyIP(LPSTR lpProxy, LPSTR lpDest)
- {
- LPSTR lpData;
- LPSTR lpLastColon;
- BOOL bDone;
- char szProxy[MAX_PATH] = {0};
- int ret = 0;
- if(lpProxy && lpDest) {
- lstrcpyn(szProxy, lpProxy, MAX_PATH);
-
- lpLastColon = NULL;
- lpData = szProxy;
- while(*lpData) {
- if(*lpData == ':') {
- lpLastColon = lpData;
- }
- lpData++;
- }
- if(lpLastColon) {
-
- *lpLastColon = '\0';
- bDone = FALSE;
- while(lpData > szProxy && !bDone) {
- if(*lpData == ' ') {
- bDone = TRUE;
- lpData++;
- }else{
- lpData--;
- }
- }
- strcpy(lpDest, lpData);
- ret = 0;
- }else {
- strcpy(lpDest, lpProxy);
- ret =0;
- }
- }else{
- ret = -1;
- }
- return ret;
- }
- int GetProxyPort(LPSTR lpProxy)
- {
- LPSTR lpData;
- LPSTR lpLastColon = NULL;
- char szProxy[MAX_PATH] = {0};
- int ret = -1;
- if(lpProxy) {
- lstrcpyn(szProxy, lpProxy, MAX_PATH);
-
- lpData = szProxy;
- while(*lpData) {
- if(*lpData == ':') {
- lpLastColon = lpData;
- }
- lpData++;
- }
-
- if ( lpLastColon )
- {
- lpLastColon++;
- ret = (unsigned short)atoi(lpLastColon);
- }
- else ret = 80;
- }
- return ret;
- }
- BOOL IsDirect(LPSTR proxy)
- {
- BOOL bRet = FALSE;
- if(proxy) {
- if(strstri("DIRECT", proxy)) {
- bRet = TRUE;
- }
- }
- return bRet;
- }
- BOOL IsAProxy(LPSTR proxy)
- {
- BOOL bRet = FALSE;
- if(proxy) {
- if(strstri("PROXY", proxy)) {
- bRet = TRUE;
- }
- }
- return bRet;
- }
- char * strstri(LPSTR lpOne, LPSTR lpTwo)
- {
- unsigned int b;
- char szOne[MAX_PATH] = {0}, szTwo[MAX_PATH] = {0};
- if(lpOne && lpTwo) {
- strcpy(szOne, lpOne);
- strcpy(szTwo, lpTwo);
- for(b=0; b<strlen(szOne); b++) {
- szOne[b] = tolower(szOne[b]);
- }
- for(b=0; b<strlen(szTwo); b++) {
- szTwo[b] = tolower(szTwo[b]);
- }
- }
- return strstr(szTwo, szOne);
- }
- BOOL GetAutomaticallyDetectSettingsCheckboxState()
- {
- DWORD dwSize, dwType;
- HKEY hKey;
- BOOL bAutomaticallyDetectSettings = FALSE;
- long lRet;
-
-
-
- BYTE Buffer[200] = {0};
- lRet = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Connections", 0, KEY_READ, &hKey);
- if (lRet == ERROR_SUCCESS) {
- dwSize = sizeof(Buffer);
- lRet = RegQueryValueEx(hKey, "DefaultConnectionSettings", NULL, &dwType, (LPBYTE)&Buffer, &dwSize);
- if(lRet == ERROR_SUCCESS && dwType == REG_BINARY) {
- if(Buffer[8] & 8) {
- bAutomaticallyDetectSettings = TRUE;
- }
- }
- }
- RegCloseKey(hKey);
- return bAutomaticallyDetectSettings;
- }
- BOOL GetUseAProxyServerForYourLanCheckboxState()
- {
- DWORD dwSize, dwValue, dwType;
- HKEY hKey;
- BOOL bUseAProxyServerForYourLan = FALSE;
- long lRet;
-
- lRet = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", 0, KEY_READ, &hKey);
- if (lRet == ERROR_SUCCESS) {
- dwSize = sizeof(DWORD);
- lRet = RegQueryValueEx(hKey, "ProxyEnable", NULL, &dwType, (LPBYTE)&dwValue, &dwSize);
- if(lRet == ERROR_SUCCESS && dwType == REG_DWORD) {
- bUseAProxyServerForYourLan = dwValue;
- }
- }
- RegCloseKey(hKey);
- return bUseAProxyServerForYourLan;
- }
- BOOL GetAutomaticConfigurationScriptCheckboxState()
- {
- DWORD dwType, dwSize;
- HKEY hKey;
- BOOL bUseAutomaticConfigurationScript = FALSE;
- char szWPAD[MAX_PATH] = {0};
- long lRet;
- #if 1
-
- szWPAD[0] = '\0';
- lRet = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", 0, KEY_READ, &hKey);
- if (lRet == ERROR_SUCCESS) {
- dwSize = sizeof(szWPAD);
- lRet = RegQueryValueEx(hKey, "AutoConfigURL", NULL, &dwType, (LPBYTE)szWPAD, &dwSize);
- if(lRet == ERROR_SUCCESS && dwType == REG_SZ) {
- }
- }
- RegCloseKey(hKey);
- #else
-
- if(!DetectAutoProxyUrl(szWPADLocation, sizeof(szWPADLocation), PROXY_AUTO_DETECT_TYPE_DHCP | PROXY_AUTO_DETECT_TYPE_DNS_A)) {
- reportFuncErr("DetectAutoProxyUrl");
- }
- #endif
- if(strlen(szWPAD)) {
- bUseAutomaticConfigurationScript = TRUE;
- }
- return bUseAutomaticConfigurationScript;
- }
- BOOL GetBypassProxyServerForLocalAddressesCheckboxState()
- {
- DWORD dwSize, dwType;
- HKEY hKey;
- BOOL bBypassProxyServerForLocalAddresses = FALSE;
- char szBuffer[MAX_PATH] = {0};
- long lRet;
- dwSize = sizeof(szBuffer);
- lRet = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", 0, KEY_READ, &hKey);
- if (lRet == ERROR_SUCCESS) {
- lRet = RegQueryValueEx(hKey, "ProxyOverride", NULL, &dwType, (LPBYTE)&szBuffer, &dwSize);
- if(lRet == ERROR_SUCCESS && dwType == REG_SZ) {
-
- }
- }
- RegCloseKey(hKey);
- if(strcmp(szBuffer, "<local>") == 0) {
- bBypassProxyServerForLocalAddresses = TRUE;
- }
- return bBypassProxyServerForLocalAddresses;
- }
- DWORD __stdcall ResolveHostName(LPSTR lpszHostName, LPSTR lpszIPAddress, LPDWORD lpdwIPAddressSize)
- {
- DWORD dwIPAddressSize;
- addrinfo Hints;
- LPADDRINFO lpAddrInfo;
- LPADDRINFO IPv4Only;
- DWORD error;
-
-
-
-
- ZeroMemory(&Hints, sizeof(addrinfo));
- Hints.ai_flags = AI_NUMERICHOST;
- Hints.ai_family = PF_UNSPEC;
- Hints.ai_socktype = SOCK_STREAM;
- Hints.ai_protocol = IPPROTO_TCP;
- error = getaddrinfo(lpszHostName, NULL, &Hints, &lpAddrInfo);
- if(error != EAI_NONAME) {
- if(error != 0) {
- error = (error == EAI_MEMORY) ?
- ERROR_NOT_ENOUGH_MEMORY : ERROR_INTERNET_NAME_NOT_RESOLVED;
- goto quit;
- }
- freeaddrinfo(lpAddrInfo);
-
-
- dwIPAddressSize = lstrlen(lpszHostName);
- if((*lpdwIPAddressSize < dwIPAddressSize) || (lpszIPAddress == NULL)) {
- *lpdwIPAddressSize = dwIPAddressSize + 1;
- error = ERROR_INSUFFICIENT_BUFFER;
- goto quit;
- }
- lstrcpy(lpszIPAddress, lpszHostName);
- goto quit;
- }
-
- Hints.ai_flags = 0;
- error = getaddrinfo(lpszHostName, NULL, &Hints, &lpAddrInfo);
- if(error != 0) {
- error = (error == EAI_MEMORY) ?
- ERROR_NOT_ENOUGH_MEMORY : ERROR_INTERNET_NAME_NOT_RESOLVED;
- goto quit;
- }
-
-
- IPv4Only = lpAddrInfo;
- while(IPv4Only->ai_family != AF_INET) {
- IPv4Only = IPv4Only->ai_next;
- if(IPv4Only == NULL)
- {
- error = ERROR_INTERNET_NAME_NOT_RESOLVED;
- goto quit;
- }
- }
- error = getnameinfo(IPv4Only->ai_addr, (socklen_t)IPv4Only->ai_addrlen, lpszIPAddress, *lpdwIPAddressSize, NULL, 0, NI_NUMERICHOST);
- if(error != 0)
- error = ERROR_INTERNET_NAME_NOT_RESOLVED;
- quit:
- return(error);
- }
- BOOL __stdcall IsResolvable(LPSTR lpszHost)
- {
- char szDummy[255] = {0};
- DWORD dwDummySize = sizeof(szDummy) - 1;
- if(ResolveHostName(lpszHost, szDummy, &dwDummySize))
- return(FALSE);
- return TRUE;
- }
- DWORD __stdcall GetIPAddress(LPSTR lpszIPAddress, LPDWORD lpdwIPAddressSize)
- {
- char szHostBuffer[255] = {0};
- if(gethostname(szHostBuffer, sizeof(szHostBuffer) - 1) != ERROR_SUCCESS)
- return(ERROR_INTERNET_INTERNAL_ERROR);
- return(ResolveHostName(szHostBuffer, lpszIPAddress, lpdwIPAddressSize));
- }
- BOOL __stdcall IsInNet(LPSTR lpszIPAddress, LPSTR lpszDest, LPSTR lpszMask)
- {
- DWORD dwDest;
- DWORD dwIpAddr;
- DWORD dwMask;
- dwIpAddr = inet_addr(lpszIPAddress);
- dwDest = inet_addr(lpszDest);
- dwMask = inet_addr(lpszMask);
- if((dwDest == INADDR_NONE) || (dwIpAddr == INADDR_NONE) || ((dwIpAddr & dwMask) != dwDest))
- return(FALSE);
- return(TRUE);
- }
- void reportFuncErr(TCHAR* funcName)
- {
-
- }
- class CProfileFolder
- {
- public:
- int GetProfileFolder(LPSTR lpProfileFolder, BOOL bFirefox);
- private:
- int GetProfileFolder_9598ME(LPSTR lpProfileFolder, BOOL bFirefox);
- int GetProfileFolder_2000XP(LPSTR lpProfileFolder, BOOL bFirefox);
- };
- class CMozSettings
- {
- public:
- CMozSettings(BOOL bFirefox);
- virtual ~CMozSettings();
- int GetPreference(LPSTR lpPreferenceWanted, int *pnDest);
- int GetPreference(LPSTR lpPreferenceWanted, LPSTR lpDest, int sizeof_dest);
- private:
- CProfileFolder m_pf;
- HGLOBAL m_hData;
- LPSTR m_lpData;
- int m_sizeof_data;
- };
- int CProfileFolder::GetProfileFolder(LPSTR lpProfileFolder, BOOL bFirefox)
- {
-
-
-
-
-
- OSVERSIONINFO version;
- ZeroMemory(&version, sizeof(version));
- version.dwOSVersionInfoSize = sizeof(version);
- GetVersionEx(&version);
- if(version.dwMajorVersion == 3) {
- return -1;
- }
- if(version.dwMajorVersion == 4) {
- return GetProfileFolder_9598ME(lpProfileFolder, bFirefox);
- }
- if(version.dwMajorVersion >= 5) {
- return GetProfileFolder_2000XP(lpProfileFolder, bFirefox);
- }
- return -1;
- }
- int CProfileFolder::GetProfileFolder_9598ME(LPSTR lpProfileFolder, BOOL bFirefox)
- {
- WIN32_FIND_DATA fd;
- HANDLE hFind;
- BOOL bDone, bFound;
- char szHomePath[MAX_PATH] = {0};
- char szTemp[MAX_PATH] = {0};
- if(lpProfileFolder) {
- GetEnvironmentVariable("WINDIR", szHomePath, sizeof(szHomePath));
- strcpy(lpProfileFolder, szHomePath);
- if(bFirefox) {
- strcat(lpProfileFolder, "\\Application Data\\Mozilla\\Firefox\\Profiles\\");
- }else{
- strcat(lpProfileFolder, "\\Application Data\\Mozilla\\Profiles\\default\\");
- }
-
- lstrcpyn(szTemp, lpProfileFolder, MAX_PATH-4);
- strcat(szTemp, "*.*");
- bDone = FALSE;
- bFound = FALSE;
- hFind = FindFirstFile(szTemp, &fd);
- while(hFind != INVALID_HANDLE_VALUE && !bDone) {
- if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
-
-
- if(fd.cFileName[0] != '.') {
- bFound = TRUE;
- }
- }
- bDone = !FindNextFile(hFind, &fd);
- }
- FindClose(hFind);
- if(bFound) {
- strcat(lpProfileFolder, fd.cFileName);
- return 0;
- }
- }
- return -1;
- }
- int CProfileFolder::GetProfileFolder_2000XP(LPSTR lpProfileFolder, BOOL bFirefox)
- {
- WIN32_FIND_DATA fd;
- HANDLE hFind;
- BOOL bDone, bFound;
- char szHomePath[MAX_PATH] = {0};
- char szTemp[MAX_PATH] = {0};
- if(lpProfileFolder) {
- GetEnvironmentVariable("APPDATA", szHomePath, sizeof(szHomePath));
- strcpy(lpProfileFolder, szHomePath);
- if(bFirefox) {
- strcat(lpProfileFolder, "\\Mozilla\\Firefox\\Profiles\\");
- }else{
- strcat(lpProfileFolder, "\\Mozilla\\Profiles\\default\\");
- }
-
- strcpy(szTemp, lpProfileFolder);
- strcat(szTemp, "*.*");
- bDone = FALSE;
- bFound = FALSE;
- hFind = FindFirstFile(szTemp, &fd);
- while(hFind != INVALID_HANDLE_VALUE && !bDone) {
- if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
-
-
- if(fd.cFileName[0] != '.') {
- bFound = TRUE;
- }
- }
- bDone = !FindNextFile(hFind, &fd);
- }
- FindClose(hFind);
- if(bFound) {
- strcat(lpProfileFolder, fd.cFileName);
- return 0;
- }
- }
- return -1;
- }
- CMozSettings::CMozSettings(BOOL bFirefox)
- {
- WIN32_FIND_DATA fd;
- OFSTRUCT of;
- HANDLE hFind;
- HFILE hPrefsFile;
- char szProfileFolder[MAX_PATH] = {0};
- char szPrefsFile[MAX_PATH] = {0};
- int ret;
- m_hData = NULL;
- m_lpData = NULL;
- ret = m_pf.GetProfileFolder(szProfileFolder, bFirefox);
- if(ret == 0) {
-
- strcpy(szPrefsFile, szProfileFolder);
- strcat(szPrefsFile, "\\prefs.js");
-
- hFind = FindFirstFile(szPrefsFile, &fd);
- if(hFind != INVALID_HANDLE_VALUE) {
- m_hData = GlobalAlloc(GHND, fd.nFileSizeLow + 256);
- if(m_hData) {
- m_lpData = (LPSTR)GlobalLock(m_hData);
- if(m_lpData) {
- hPrefsFile = OpenFile(szPrefsFile, &of, OF_READ);
- if(hPrefsFile) {
- m_sizeof_data = fd.nFileSizeLow;
- _lread(hPrefsFile, m_lpData, m_sizeof_data);
- _lclose(hPrefsFile);
- hPrefsFile = NULL;
- }
- }
- }
- FindClose(hFind);
- }
- }
- }
- CMozSettings::~CMozSettings()
- {
- if(m_lpData) {
- GlobalUnlock(m_hData);
- m_lpData = NULL;
- }
- if(m_hData) {
- GlobalFree(m_hData);
- m_hData = NULL;
- }
- }
- int CMozSettings::GetPreference(LPSTR lpPreferenceWanted, LPSTR lpDest, int sizeof_dest)
- {
- LPSTR lpPointer, lpPointerEnd, lpData;
- LPSTR lpLineStart, lpSearchStart, lpFoundString, lpResult;
- BOOL bDone;
- int nDoubleQuoteCount, retval;
- retval = -1;
- if(m_lpData) {
- if(lpPreferenceWanted) {
- if(lpDest) {
- *lpDest = '\0';
- bDone = FALSE;
- lpPointer = m_lpData;
- lpPointerEnd = lpPointer + m_sizeof_data;
- while(lpPointer < lpPointerEnd && !bDone) {
- if(strncmp(lpPointer, "user_pref(", 10) == 0) {
- lpLineStart = lpPointer;
- lpSearchStart = lpLineStart + 11;
- if(strncmp(lpSearchStart, lpPreferenceWanted, strlen(lpPreferenceWanted)) == 0) {
- lpFoundString = lpSearchStart + strlen(lpPreferenceWanted);
-
-
- lpData = lpFoundString;
- nDoubleQuoteCount = 0;
- while(nDoubleQuoteCount <= 3 && !bDone && lpData < lpPointerEnd) {
- if(*lpData == '"') {
- nDoubleQuoteCount++;
- if(nDoubleQuoteCount == 2) {
-
- lpResult = lpData;
- lpResult++;
- }
- if(nDoubleQuoteCount == 3) {
-
-
- *lpData = '\0';
- lstrcpyn(lpDest, lpResult, sizeof_dest);
- bDone = TRUE;
- retval = 0;
- }
- }
- lpData++;
- }
- }
- }
- lpPointer++;
- }
- }
- }
- }
- return retval;
- }
- int CMozSettings::GetPreference(LPSTR lpPreferenceWanted, int *pnDest)
- {
- LPSTR lpPointer, lpPointerEnd, lpData;
- LPSTR lpLineStart, lpSearchStart, lpFoundString;
- BOOL bDone;
- int retval;
- retval = -1;
- if(m_lpData) {
- if(lpPreferenceWanted) {
- if(pnDest) {
- bDone = FALSE;
- lpPointer = m_lpData;
- lpPointerEnd = lpPointer + m_sizeof_data;
- while(lpPointer < lpPointerEnd && !bDone) {
- if(strncmp(lpPointer, "user_pref(", 10) == 0) {
- lpLineStart = lpPointer;
- lpSearchStart = lpLineStart + 11;
- if(strncmp(lpSearchStart, lpPreferenceWanted, strlen(lpPreferenceWanted)) == 0) {
- lpFoundString = lpSearchStart + strlen(lpPreferenceWanted);
-
-
- lpData = lpFoundString;
- while(*lpData != ',' && lpData < lpPointerEnd) {
- lpData++;
- }
- if(*lpData == ',') {
- lpData++;
- lpFoundString = lpData;
- while(*lpData != ')' && lpData < lpPointerEnd) {
- lpData++;
- }
- if(*lpData == ')') {
-
- *lpData = '\0';
- *pnDest = atoi(lpFoundString);
- bDone = TRUE;
- retval = 0;
- }
- }
- }
- }
- lpPointer++;
- }
- }
- }
- }
- return retval;
- }
- BOOL IsFirefoxProxySet()
- {
- return IsFirefoxOrMozillaProxySet(TRUE);
- }
- BOOL IsMozillaProxySet()
- {
- return IsFirefoxOrMozillaProxySet(FALSE);
- }
- BOOL IsFirefoxOrMozillaProxySet(BOOL bFirefox)
- {
- CMozSettings settings(bFirefox);
- int ret, nValue;
- ret = settings.GetPreference("network.proxy.type", &nValue);
- if(ret == 0) {
- switch(nValue) {
- case 0:
- break;
- case 1:
- return TRUE;
- case 2:
- return TRUE;
- case 4:
- return TRUE;
- default:
- break;
- }
- }
- return FALSE;
- }
- int ResolveURL_Mozilla(LPSTR lpURL, LPSTR lpHostname, LPSTR lpIPAddress, int sizeof_address, int *pnPort)
- {
- return ResolveURL_MozillaOrFirefox(FALSE, lpURL, lpHostname, lpIPAddress, sizeof_address, pnPort);
- }
- int ResolveURL_Firefox(LPSTR lpURL, LPSTR lpHostname, LPSTR lpIPAddress, int sizeof_address, int *pnPort)
- {
- return ResolveURL_MozillaOrFirefox(TRUE, lpURL, lpHostname, lpIPAddress, sizeof_address, pnPort);
- }
- int ResolveURL_MozillaOrFirefox(BOOL bFirefox, LPSTR lpURL, LPSTR lpHostname, LPSTR lpIPAddress, int sizeof_address, int *pnPort)
- {
- CMozSettings setting(bFirefox);
- int ret, nValue;
-
- ret = setting.GetPreference("network.proxy.type", &nValue);
- if(ret == 0) {
- switch(nValue) {
- case 0:
-
- break;
- case 1:
-
- setting.GetPreference("network.proxy.http", lpIPAddress, sizeof_address);
- setting.GetPreference("network.proxy.http_port", pnPort);
- break;
- case 2:
-
- {
- char szWPADLocation[MAX_PATH] = {0};
- setting.GetPreference("network.proxy.autoconfig_url", szWPADLocation, sizeof(szWPADLocation));
- ret = ReadWPADFile(szWPADLocation, lpIPAddress, pnPort);
- }
- break;
- case 4:
-
- ret = ReadWPADFile("http://wpad/wpad.dat", lpIPAddress, pnPort);
- break;
- default:
- break;
- }
- }
- return ret;
- }
- HRESULT JNetLibDownloadToFile(LPVOID lpUnused1, LPSTR lpWPADLocation, LPSTR lpTempFile, LPVOID lpUnused2, LPVOID lpUnused3)
- {
- api_httpreceiver *http=0;
- waServiceFactory *sf=0;
- OFSTRUCT of;
- HGLOBAL hData;
- HRESULT hRet = S_FALSE;
- LPSTR lpData;
- DWORD dwSize;
- HFILE hFile;
- BOOL bDone;
-
- int ret;
-
- if(lpWPADLocation && lpTempFile)
- {
- if (WASABI_API_SVC)
- {
- sf = WASABI_API_SVC->service_getServiceByGuid(httpreceiverGUID);
- if (sf) http = (api_httpreceiver *)sf->getInterface();
- }
- if (!http)
- return S_FALSE;
-
- http->Open();
- http->Connect(lpWPADLocation);
-
-
- bDone = FALSE;
- while(!bDone) {
- ret = http->Run();
- if(ret == -1 || ret == 1) {
- bDone = TRUE;
- }
- Sleep(50);
- }
-
- dwSize = (DWORD)http->GetContentLength();
- if(dwSize && ret == 1) {
-
-
- hData = GlobalAlloc(GHND, dwSize + 100);
- if(hData) {
- lpData = (LPSTR)GlobalLock(hData);
- if(lpData) {
- http->GetBytes(lpData, (int)dwSize);
-
- hFile = OpenFile(lpTempFile, &of, OF_CREATE);
- if(hFile != HFILE_ERROR) {
- _lwrite(hFile, lpData, (UINT)dwSize);
- _lclose(hFile);
- hRet = S_OK;
- }
- GlobalUnlock(hData);
- lpData = NULL;
- }
- GlobalFree(hData);
- hData = NULL;
- }
- }
- }
- if (http && sf)
- sf->releaseInterface(http);
- return hRet;
- }
- #endif
|