From 8f5a7b54eb953bbfc877ec915e26b3a95ec28d00 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@4f64403b-2f21-0410-a795-97e2b3489a10> Date: Sun, 21 Feb 2010 23:00:56 +0000 Subject: New updater with 3x reduced footprint and fully W7 and x64 compatible git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@476 4f64403b-2f21-0410-a795-97e2b3489a10 --- updater/socket.cpp | 81 +++++++++++++++++++----------------------------------- 1 file changed, 28 insertions(+), 53 deletions(-) (limited to 'updater/socket.cpp') diff --git a/updater/socket.cpp b/updater/socket.cpp index 7e5db53..61e64bf 100644 --- a/updater/socket.cpp +++ b/updater/socket.cpp @@ -1,33 +1,6 @@ #include "common.h" #include "socket.h" -/* -#include - -typedef struct SettingsProcEnumParam_tag { - int file_id; - std::list *list; - char *current_filename; - char *temp_folder; -} SettingsProcEnumParam; - -int SettingsEnumProc(const char *szSetting,LPARAM lParam) { - SettingsProcEnumParam *param = (SettingsProcEnumParam *)lParam; - - if(strcmp(szSetting, param->current_filename) != 0) { - int file_id = DBGetContactSettingDword(0, MODULE, szSetting, -1); - if(file_id == param->file_id) { - std::string new_file_name(param->temp_folder); - new_file_name += "\\"; - new_file_name += szSetting; - param->list->push_back(new_file_name); - } - } - - return 0; -} -*/ - void ShowAndLogError(TCHAR *message) { } @@ -108,11 +81,13 @@ bool GetFile(char *url, TCHAR *temp_folder, char *plugin_name, char *version, bo req.cbSize = sizeof(req); req.requestType = REQUEST_GET; req.szUrl = url; - req.flags = NLHRF_NODUMP; + req.flags = NLHRF_NODUMP | NLHRF_HTTP11 | NLHRF_PERSISTENT | NLHRF_REDIRECT; + req.nlc = hNetlibHttp; NETLIBHTTPREQUEST *resp = (NETLIBHTTPREQUEST *)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hNetlibUser, (LPARAM)&req); if(resp) { + hNetlibHttp = resp->nlc; if(resp->resultCode == 200) { HANDLE hSaveFile = CreateFile(save_file, GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if(hSaveFile != INVALID_HANDLE_VALUE) { @@ -192,7 +167,7 @@ bool GetFile(char *url, TCHAR *temp_folder, char *plugin_name, char *version, bo return ret; } else { TCHAR buff[1024]; - _stprintf(buff, TranslateT("Failed to download \"%s\" - Invalid response, code %d"), plugin_name, resp->resultCode); + mir_sntprintf(buff, SIZEOF(buff), TranslateT("Failed to download \"%s\" - Invalid response, code %d"), plugin_name, resp->resultCode); ShowError(buff); char *ts = GetAString(buff); @@ -203,11 +178,11 @@ bool GetFile(char *url, TCHAR *temp_folder, char *plugin_name, char *version, bo CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)resp); resp = 0; } else { + hNetlibHttp = NULL; int err = GetLastError(); if(err) { TCHAR buff[1024]; - _stprintf(buff, TranslateT("Failed to download \"%s\": "), plugin_name); - int len = _tcslen(buff); + int len = mir_sntprintf(buff, SIZEOF(buff), TranslateT("Failed to download \"%s\": "), plugin_name); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, err, 0, buff + len, 512 - len, 0); ShowError(buff); @@ -248,11 +223,13 @@ char *CheckVersionURL(char *url, BYTE *pbPrefixBytes, int cpbPrefixBytes, BYTE * req.cbSize = sizeof(req); req.requestType = REQUEST_GET; req.szUrl = url; - req.flags = NLHRF_DUMPASTEXT; //NLHRF_SMARTREMOVEHOST | NLHRF_SMARTAUTHHEADER; + req.flags = NLHRF_DUMPASTEXT | NLHRF_HTTP11 | NLHRF_PERSISTENT | NLHRF_REDIRECT; + req.nlc = hNetlibHttp; - NETLIBHTTPREQUEST *resp = (NETLIBHTTPREQUEST_tag *)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hNetlibUser, (LPARAM)&req); + NETLIBHTTPREQUEST *resp = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hNetlibUser, (LPARAM)&req); if(resp) { + hNetlibHttp = resp->nlc; if(resp->resultCode == 200) { // find the location of the prefix int index, index2; @@ -338,6 +315,7 @@ char *CheckVersionURL(char *url, BYTE *pbPrefixBytes, int cpbPrefixBytes, BYTE * CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)resp); resp = 0; } else { + hNetlibHttp = NULL; int err = GetLastError(); if(err) { char buff[128]; @@ -350,50 +328,48 @@ char *CheckVersionURL(char *url, BYTE *pbPrefixBytes, int cpbPrefixBytes, BYTE * return 0; } -char *UpdateRequired(UpdateInternal *update_internal, bool *beta) { +char *UpdateRequired(UpdateInternal &update_internal, bool *beta) { // determine whether update is required - char *ret = 0, *ret_beta = 0; + const char *ret = NULL; + char *ret_beta = NULL; - if(options.use_xml_backend && update_internal->file_id != -1) { - if(update_internal->cat == MC_UNKNOWN) { + if(options.use_xml_backend && update_internal.file_id != -1) { + if(update_internal.cat == MC_UNKNOWN) { if(XMLDataAvailable(MC_PLUGINS) - && (ret = FindVersion(update_internal->file_id, update_internal->update.pbVersion, update_internal->update.cpbVersion, MC_PLUGINS))) + && (ret = FindVersion(update_internal.file_id, update_internal.update.pbVersion, update_internal.update.cpbVersion, MC_PLUGINS))) { - update_internal->cat = MC_PLUGINS; + update_internal.cat = MC_PLUGINS; if(strcmp(ret, "same") == 0) { - free(ret); ret = 0; } } else if(XMLDataAvailable(MC_LOCALIZATION) - && (ret = FindVersion(update_internal->file_id, update_internal->update.pbVersion, update_internal->update.cpbVersion, MC_LOCALIZATION))) + && (ret = FindVersion(update_internal.file_id, update_internal.update.pbVersion, update_internal.update.cpbVersion, MC_LOCALIZATION))) { - update_internal->cat = MC_LOCALIZATION; + update_internal.cat = MC_LOCALIZATION; if(strcmp(ret, "same") == 0) { - free(ret); ret = 0; } } } else { - ret = FindVersion(update_internal->file_id, update_internal->update.pbVersion, update_internal->update.cpbVersion, update_internal->cat); + ret = FindVersion(update_internal.file_id, update_internal.update.pbVersion, update_internal.update.cpbVersion, update_internal.cat); if(ret && strcmp(ret, "same") == 0) { - free(ret); ret = 0; } } } else { - ret = CheckVersionURL(update_internal->update.szVersionURL, update_internal->update.pbVersionPrefix, - update_internal->update.cpbVersionPrefix, update_internal->update.pbVersion, update_internal->update.cpbVersion); + ret = CheckVersionURL(update_internal.update.szVersionURL, update_internal.update.pbVersionPrefix, + update_internal.update.cpbVersionPrefix, update_internal.update.pbVersion, update_internal.update.cpbVersion); } - if(update_internal->update_options.use_beta) { - ret_beta = CheckVersionURL(update_internal->update.szBetaVersionURL, update_internal->update.pbBetaVersionPrefix, - update_internal->update.cpbBetaVersionPrefix, update_internal->update.pbVersion, update_internal->update.cpbVersion); + if(update_internal.update_options.use_beta) { + ret_beta = CheckVersionURL(update_internal.update.szBetaVersionURL, update_internal.update.pbBetaVersionPrefix, + update_internal.update.cpbBetaVersionPrefix, update_internal.update.pbVersion, update_internal.update.cpbVersion); } if(ret && !ret_beta) { if(beta) *beta = false; - return ret; + return _strdup(ret); } else if(!ret && ret_beta) { if(beta) *beta = true; return ret_beta; @@ -407,13 +383,12 @@ char *UpdateRequired(UpdateInternal *update_internal, bool *beta) { VersionFromString(ret_beta, &vRetBeta); if(vRetBeta > vRet) { - free(ret); if(beta) *beta = true; return ret_beta; } else { free(ret_beta); if(beta) *beta = false; - return ret; + return _strdup(ret); } } -- cgit v1.2.3