コード例 #1
0
ファイル: extension.cpp プロジェクト: asherkin/accelerator
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;
}
コード例 #2
0
ファイル: Updater.cpp プロジェクト: Markusyatina/sourcemod
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;
}