diff options
Diffstat (limited to 'updater/socket.cpp')
-rw-r--r-- | updater/socket.cpp | 81 |
1 files changed, 28 insertions, 53 deletions
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 <string>
-
-typedef struct SettingsProcEnumParam_tag {
- int file_id;
- std::list<std::string> *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);
}
}
|