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; }
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; }
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; }