1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Almost support loading sounds from server

This commit is contained in:
Perttu Ahola 2012-03-25 14:47:51 +03:00
parent 524c78a8d6
commit 1cac1de3b2
9 changed files with 183 additions and 186 deletions

View file

@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "filesys.h"
#include "utility.h"
#include "hex.h"
#include "sha1.h"
#include <string>
#include <iostream>
@ -34,7 +35,7 @@ bool FileCache::loadByPath(const std::string &path, std::ostream &os)
if(!fis.good()){
verbosestream<<"FileCache: File not found in cache: "
<<path<<std::endl;
<<path<<std::endl;
return false;
}
@ -53,7 +54,7 @@ bool FileCache::loadByPath(const std::string &path, std::ostream &os)
}
if(bad){
errorstream<<"FileCache: Failed to read file from cache: \""
<<path<<"\""<<std::endl;
<<path<<"\""<<std::endl;
}
return !bad;
@ -67,7 +68,7 @@ bool FileCache::updateByPath(const std::string &path, const std::string &data)
if(!file.good())
{
errorstream<<"FileCache: Can't write to file at "
<<path<<std::endl;
<<path<<std::endl;
return false;
}
@ -77,34 +78,41 @@ bool FileCache::updateByPath(const std::string &path, const std::string &data)
return !file.fail();
}
bool FileCache::loadByName(const std::string &name, std::ostream &os)
{
std::string path = m_dir + DIR_DELIM + name;
return loadByPath(path, os);
}
bool FileCache::updateByName(const std::string &name, const std::string &data)
bool FileCache::update(const std::string &name, const std::string &data)
{
std::string path = m_dir + DIR_DELIM + name;
return updateByPath(path, data);
}
std::string FileCache::getPathFromChecksum(const std::string &checksum)
bool FileCache::update_sha1(const std::string &data)
{
std::string checksum_hex = hex_encode(checksum.c_str(), checksum.length());
return m_dir + DIR_DELIM + checksum_hex;
SHA1 sha1;
sha1.addBytes(data.c_str(), data.size());
unsigned char *digest = sha1.getDigest();
std::string sha1_raw((char*)digest, 20);
free(digest);
std::string sha1_hex = hex_encode(sha1_raw);
return update(sha1_hex, data);
}
bool FileCache::loadByChecksum(const std::string &checksum, std::ostream &os)
bool FileCache::load(const std::string &name, std::ostream &os)
{
std::string path = getPathFromChecksum(checksum);
std::string path = m_dir + DIR_DELIM + name;
return loadByPath(path, os);
}
bool FileCache::updateByChecksum(const std::string &checksum,
const std::string &data)
bool FileCache::load_sha1(const std::string &sha1_raw, std::ostream &os)
{
std::string path = getPathFromChecksum(checksum);
return updateByPath(path, data);
std::ostringstream tmp_os(std::ios_base::binary);
if(!load(hex_encode(sha1_raw), tmp_os))
return false;
SHA1 sha1;
sha1.addBytes(tmp_os.str().c_str(), tmp_os.str().length());
unsigned char *digest = sha1.getDigest();
std::string sha1_real_raw((char*)digest, 20);
free(digest);
if(sha1_real_raw != sha1_raw){
verbosestream<<"FileCache["<<m_dir<<"]: filename "<<sha1_real_raw
<<" mismatches actual checksum"<<std::endl;
return false;
}
os<<tmp_os.str();
return true;
}