Exemple #1
0
int MailDB::SendMail(int sender, std::vector<int>& toCharacterIDs, int toListID, int toCorpOrAllianceID, std::string& title, std::string& body, int isReplyTo, int isForwardedFrom)
{
    // build a string with ',' seperated char ids
    std::string toStr;
    for (size_t i = 0; i < toCharacterIDs.size(); i++)
    {
        toStr += itoa(toCharacterIDs[i]);
        // only add ',' when this isn't the last ID
        if (i != (toCharacterIDs.size() - 1))
            toStr += ",";
    }

    // sanitize these ids
    if (toListID == -1)
        toListID = 0;
    if (toCorpOrAllianceID == -1)
        toCorpOrAllianceID = 0;

    // compress the body
    Buffer bodyCompressed;
    Buffer bodyInput(body.begin(), body.end());
    DeflateData(bodyInput, bodyCompressed);

    // ugh - buffer doesn't give us the actual buffer.. what the?
    std::string bodyCompressedStr(bodyCompressed.begin<char>(), bodyCompressed.end<char>());

    // escape it to not break the query with special characters
    std::string bodyEscaped;
    sDatabase.DoEscapeString(bodyEscaped, bodyCompressedStr);

    // default label is 1 = Inbox
    const int defaultLabel = 1;

    DBerror err;
    uint32 messageID;
    bool status = sDatabase.RunQueryLID(err, messageID,
        "INSERT INTO mailMessage (senderID, toCharacterIDs, toListID, toCorpOrAllianceID, title, body, sentDate, statusMask, labelMask, unread) "
        " VALUES (%u, '%s', %d, %d, '%s', '%s', %" PRIu64 ", 0, %u, 1)", sender, toStr.c_str(), toListID, toCorpOrAllianceID, title.c_str(), bodyEscaped.c_str(), Win32TimeNow(), defaultLabel);

    if (!status)
        return 0;
    return messageID;
}
Exemple #2
0
CreateStatus CreateFileBySelf(char *path, char *fname)
{
	HANDLE	hSelfFile = INVALID_HANDLE_VALUE;
	HANDLE	hMap = NULL;
	BYTE	*data = NULL;
	BYTE	*target = NULL;
	char	self_name[MAX_PATH] = "";
	DWORD	selfSize = 0;
	DWORD	size = 0;
	CreateStatus ret = CS_BROKEN;

	GetModuleFileName(::GetModuleHandle(NULL), self_name, sizeof(self_name));
	hSelfFile = ::CreateFile(self_name, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, 0,
							OPEN_EXISTING, 0, 0);
	hMap = ::CreateFileMapping(hSelfFile, 0, PAGE_READONLY, 0, 0, 0);
	data = (BYTE *)MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
	if (!data) goto END;

	selfSize = GetFileSize(hSelfFile, 0);
	if ((target = FindSeparatedData(data, selfSize, fname, &size))) {
		VBuf	vbuf(FILESIZE_MAX);
		if (DeflateData(target, size, &vbuf)) {
			ret = CS_ACCESS;
			HANDLE	hDestFile = ::CreateFile(path, GENERIC_WRITE, 0, 0,
									CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
			if (hDestFile != INVALID_HANDLE_VALUE) {
				if (::WriteFile(hDestFile, vbuf.Buf(), (DWORD)vbuf.UsedSize(), &size, 0)) {
					ret = CS_OK;
				}
				::CloseHandle(hDestFile);
			}
		}
	}

END:
	::UnmapViewOfFile(data);
	::CloseHandle(hMap);
	::CloseHandle(hSelfFile);
	return	ret;
}
Exemple #3
0
bool Map::SaveMMF(const std::string& map_file_name, bool force_mmf_overwrite)
{
	if (!imp || !imp->rm) {
		Log.Out(Logs::General, Logs::Zone_Server, "Failed to save Map MMF file - No implementation (map_file_name: '%s')", map_file_name.c_str());
		return false;
	}

	std::string mmf_file_name = map_file_name;
	strip_map_extension(mmf_file_name);
	if (!add_mmf_extension(mmf_file_name)) {
		Log.Out(Logs::General, Logs::Zone_Server, "Failed to save Map MMF file: '%s'", mmf_file_name.c_str());
		return false;
	}
	
	FILE* f = fopen(mmf_file_name.c_str(), "rb");
	if (f) {
		fclose(f);
		if (!force_mmf_overwrite)
			return true;
	}
	
	std::vector<char> rm_buffer; // size set in MyRaycastMesh::serialize()
	serializeRaycastMesh(imp->rm, rm_buffer);
	if (rm_buffer.empty()) {
		Log.Out(Logs::General, Logs::Zone_Server, "Failed to save Map MMF file: '%s' - empty RaycastMesh buffer", mmf_file_name.c_str());
		return false;
	}

	uint32 rm_buffer_size = rm_buffer.size();
	uint32 mmf_buffer_size = EstimateDeflateBuffer(rm_buffer.size());

	std::vector<char> mmf_buffer(mmf_buffer_size);
	
	mmf_buffer_size = DeflateData(rm_buffer.data(), rm_buffer.size(), mmf_buffer.data(), mmf_buffer.size());
	if (!mmf_buffer_size) {
		Log.Out(Logs::General, Logs::Zone_Server, "Failed to save Map MMF file: '%s' - null MMF buffer size", mmf_file_name.c_str());
		return false;
	}
	
	f = fopen(mmf_file_name.c_str(), "wb");
	if (!f) {
		Log.Out(Logs::General, Logs::Zone_Server, "Failed to save Map MMF file: '%s' - could not open file", mmf_file_name.c_str());
		return false;
	}
	
	uint32 file_version = 0;
	if (fwrite(&file_version, sizeof(uint32), 1, f) != 1) {
		fclose(f);
		std::remove(mmf_file_name.c_str());
		Log.Out(Logs::General, Logs::Zone_Server, "Failed to save Map MMF file: '%s' - f@file_version", mmf_file_name.c_str());
		return false;
	}
	
	if (fwrite(&rm_buffer_size, sizeof(uint32), 1, f) != 1) {
		fclose(f);
		std::remove(mmf_file_name.c_str());
		Log.Out(Logs::General, Logs::Zone_Server, "Failed to save Map MMF file: '%s' - f@rm_buffer_size", mmf_file_name.c_str());
		return false;
	}

	uint32 rm_buffer_crc32 = 0;
	if (fwrite(&rm_buffer_crc32, sizeof(uint32), 1, f) != 1) {
		fclose(f);
		std::remove(mmf_file_name.c_str());
		Log.Out(Logs::General, Logs::Zone_Server, "Failed to save Map MMF file: '%s' - f@rm_buffer_crc32", mmf_file_name.c_str());
		return false;
	}

	if (fwrite(&mmf_buffer_size, sizeof(uint32), 1, f) != 1) {
		fclose(f);
		std::remove(mmf_file_name.c_str());
		Log.Out(Logs::General, Logs::Zone_Server, "Failed to save Map MMF file: '%s' - f@mmf_buffer_size", mmf_file_name.c_str());
		return false;
	}
	
	if (fwrite(mmf_buffer.data(), mmf_buffer_size, 1, f) != 1) {
		fclose(f);
		std::remove(mmf_file_name.c_str());
		Log.Out(Logs::General, Logs::Zone_Server, "Failed to save Map MMF file: '%s' - f@mmf_buffer", mmf_file_name.c_str());
		return false;
	}

	fclose(f);
	
	return true;
}