bool UploadAndDeleteCrashDump(const char *path, char *response, int maxlen) { IWebForm *form = webternet->CreateForm(); const char *minidumpAccount = g_pSM->GetCoreConfigValue("MinidumpAccount"); if (minidumpAccount) form->AddString("UserID", minidumpAccount); form->AddString("GameDirectory", g_pSM->GetGameFolderName()); form->AddString("ExtensionVersion", SMEXT_CONF_VERSION); form->AddFile("upload_file_minidump", path); char metapath[512]; g_pSM->Format(metapath, sizeof(metapath), "%s.txt", path); if (libsys->PathExists(metapath)) { form->AddFile("upload_file_metadata", metapath); } MemoryDownloader data; IWebTransfer *xfer = webternet->CreateSession(); xfer->SetFailOnHTTPError(true); const char *minidumpUrl = g_pSM->GetCoreConfigValue("MinidumpUrl"); if (!minidumpUrl) minidumpUrl = "http://crash.limetech.org/submit"; bool uploaded = xfer->PostAndDownload(minidumpUrl, form, &data, NULL); if (response) { if (uploaded) { int responseSize = data.GetSize(); if (responseSize >= maxlen) responseSize = maxlen - 1; strncpy(response, data.GetBuffer(), responseSize); response[responseSize] = '\0'; } else { g_pSM->Format(response, maxlen, "%s (%d)", xfer->LastErrorMessage(), xfer->LastErrorCode()); } } if (libsys->PathExists(metapath)) { unlink(metapath); } unlink(path); return uploaded; }
void UpdateReader::PerformUpdate(const char *url) { IWebForm *form; MemoryDownloader master; SMCStates states = {0, 0}; update_url = url; form = webternet->CreateForm(); xfer = webternet->CreateSession(); xfer->SetFailOnHTTPError(true); form->AddString("version", SOURCEMOD_UPDATER_VERSION); unsigned int num_files = 0; add_folders(form, "gamedata", num_files); char temp[24]; smutils->Format(temp, sizeof(temp), "%d", num_files); form->AddString("files", temp); if (!xfer->PostAndDownload(url, form, &master, NULL)) { AddUpdateError("Could not download \"%s\"", url); AddUpdateError("Error: %s", xfer->LastErrorMessage()); goto cleanup; } SMCError error; char errbuf[256]; error = textparsers->ParseSMCStream(master.GetBuffer(), master.GetSize(), this, &states, errbuf, sizeof(errbuf)); if (error != SMCError_Okay) { AddUpdateError("Parse error in update manifest: %s", errbuf); goto cleanup; } cleanup: delete xfer; delete form; }