- removed requirement to have a newer libcurl, now most platform, should be able to build mg more easily (only require 7.16.4 or newer instead of 7.21.0)
This commit is contained in:
parent
04fe8b73f0
commit
0379b7284d
|
@ -4840,6 +4840,8 @@ void Renderer::renderMapPreview( const MapPreview *map, bool renderAll,
|
||||||
texture->init(textureFilter,maxAnisotropy);
|
texture->init(textureFilter,maxAnisotropy);
|
||||||
texture->setup_FBO_RBO();
|
texture->setup_FBO_RBO();
|
||||||
|
|
||||||
|
assertGl();
|
||||||
|
|
||||||
if(texture->checkFrameBufferStatus() == false) {
|
if(texture->checkFrameBufferStatus() == false) {
|
||||||
//printf("******************** WARNING CANNOT Attach to FBO!\n");
|
//printf("******************** WARNING CANNOT Attach to FBO!\n");
|
||||||
texture->end();
|
texture->end();
|
||||||
|
@ -4885,6 +4887,8 @@ void Renderer::renderMapPreview( const MapPreview *map, bool renderAll,
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
|
|
||||||
|
assertGl();
|
||||||
|
|
||||||
GLint viewport[4]; // Where The original Viewport Values Will Be Stored
|
GLint viewport[4]; // Where The original Viewport Values Will Be Stored
|
||||||
|
|
||||||
if(supportFBOs == true && renderToTexture != NULL) {
|
if(supportFBOs == true && renderToTexture != NULL) {
|
||||||
|
@ -4905,6 +4909,8 @@ void Renderer::renderMapPreview( const MapPreview *map, bool renderAll,
|
||||||
glTranslatef(static_cast<float>(screenPosX),static_cast<float>(screenPosY)-clientH,0.0f);
|
glTranslatef(static_cast<float>(screenPosX),static_cast<float>(screenPosY)-clientH,0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assertGl();
|
||||||
|
|
||||||
glPushAttrib(GL_CURRENT_BIT);
|
glPushAttrib(GL_CURRENT_BIT);
|
||||||
glLineWidth(1);
|
glLineWidth(1);
|
||||||
glColor3f(0, 0, 0);
|
glColor3f(0, 0, 0);
|
||||||
|
@ -5054,6 +5060,8 @@ void Renderer::renderMapPreview( const MapPreview *map, bool renderAll,
|
||||||
//start locations
|
//start locations
|
||||||
glLineWidth(3);
|
glLineWidth(3);
|
||||||
|
|
||||||
|
assertGl();
|
||||||
|
|
||||||
if(supportFBOs == true && renderToTexture != NULL) {
|
if(supportFBOs == true && renderToTexture != NULL) {
|
||||||
glLineWidth(14);
|
glLineWidth(14);
|
||||||
playerCrossSize = 24;
|
playerCrossSize = 24;
|
||||||
|
@ -5068,6 +5076,8 @@ void Renderer::renderMapPreview( const MapPreview *map, bool renderAll,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assertGl();
|
||||||
|
|
||||||
for (int i = 0; i < map->getMaxFactions(); i++) {
|
for (int i = 0; i < map->getMaxFactions(); i++) {
|
||||||
switch (i) {
|
switch (i) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -5103,11 +5113,15 @@ void Renderer::renderMapPreview( const MapPreview *map, bool renderAll,
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assertGl();
|
||||||
|
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
glPopAttrib();
|
glPopAttrib();
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
|
assertGl();
|
||||||
|
|
||||||
if(supportFBOs == true && renderToTexture != NULL) {
|
if(supportFBOs == true && renderToTexture != NULL) {
|
||||||
Texture2DGl *texture = static_cast<Texture2DGl *>(*renderToTexture);
|
Texture2DGl *texture = static_cast<Texture2DGl *>(*renderToTexture);
|
||||||
if(texture != NULL) {
|
if(texture != NULL) {
|
||||||
|
@ -5115,6 +5129,8 @@ void Renderer::renderMapPreview( const MapPreview *map, bool renderAll,
|
||||||
}
|
}
|
||||||
|
|
||||||
glViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
|
glViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
|
||||||
|
|
||||||
|
assertGl();
|
||||||
}
|
}
|
||||||
|
|
||||||
assertGl();
|
assertGl();
|
||||||
|
|
|
@ -991,7 +991,7 @@ void MenuStateConnectedGame::update() {
|
||||||
int32 tilesetCRC = lastCheckedCRCTilesetValue;
|
int32 tilesetCRC = lastCheckedCRCTilesetValue;
|
||||||
if(lastCheckedCRCTilesetName != gameSettings->getTileset() &&
|
if(lastCheckedCRCTilesetName != gameSettings->getTileset() &&
|
||||||
gameSettings->getTileset() != "") {
|
gameSettings->getTileset() != "") {
|
||||||
console.addLine("Checking tileset CRC [" + gameSettings->getTileset() + "]");
|
//console.addLine("Checking tileset CRC [" + gameSettings->getTileset() + "]");
|
||||||
tilesetCRC = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTilesets,""), string("/") + gameSettings->getTileset() + string("/*"), ".xml", NULL);
|
tilesetCRC = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTilesets,""), string("/") + gameSettings->getTileset() + string("/*"), ".xml", NULL);
|
||||||
// Test data synch
|
// Test data synch
|
||||||
//tilesetCRC++;
|
//tilesetCRC++;
|
||||||
|
@ -1002,7 +1002,7 @@ void MenuStateConnectedGame::update() {
|
||||||
int32 techCRC = lastCheckedCRCTechtreeValue;
|
int32 techCRC = lastCheckedCRCTechtreeValue;
|
||||||
if(lastCheckedCRCTechtreeName != gameSettings->getTech() &&
|
if(lastCheckedCRCTechtreeName != gameSettings->getTech() &&
|
||||||
gameSettings->getTech() != "") {
|
gameSettings->getTech() != "") {
|
||||||
console.addLine("Checking techtree CRC [" + gameSettings->getTech() + "]");
|
//console.addLine("Checking techtree CRC [" + gameSettings->getTech() + "]");
|
||||||
techCRC = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTechs,""), string("/") + gameSettings->getTech() + string("/*"), ".xml", NULL);
|
techCRC = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTechs,""), string("/") + gameSettings->getTech() + string("/*"), ".xml", NULL);
|
||||||
// Test data synch
|
// Test data synch
|
||||||
//techCRC++;
|
//techCRC++;
|
||||||
|
@ -1021,7 +1021,7 @@ void MenuStateConnectedGame::update() {
|
||||||
}
|
}
|
||||||
factionCRCList.push_back(make_pair(factionName,factionCRC));
|
factionCRCList.push_back(make_pair(factionName,factionCRC));
|
||||||
}
|
}
|
||||||
console.addLine("Found factions: " + intToStr(factionCRCList.size()));
|
//console.addLine("Found factions: " + intToStr(factionCRCList.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 mapCRC = lastCheckedCRCMapValue;
|
int32 mapCRC = lastCheckedCRCMapValue;
|
||||||
|
@ -1029,7 +1029,7 @@ void MenuStateConnectedGame::update() {
|
||||||
gameSettings->getMap() != "") {
|
gameSettings->getMap() != "") {
|
||||||
Checksum checksum;
|
Checksum checksum;
|
||||||
string file = Map::getMapPath(gameSettings->getMap(),"",false);
|
string file = Map::getMapPath(gameSettings->getMap(),"",false);
|
||||||
console.addLine("Checking map CRC [" + file + "]");
|
//console.addLine("Checking map CRC [" + file + "]");
|
||||||
checksum.addFile(file);
|
checksum.addFile(file);
|
||||||
mapCRC = checksum.getSum();
|
mapCRC = checksum.getSum();
|
||||||
// Test data synch
|
// Test data synch
|
||||||
|
@ -2095,9 +2095,10 @@ void MenuStateConnectedGame::FTPClient_CallbackEvent(string itemName, FTP_Client
|
||||||
fileFTPProgressList[itemName] = pair<int,string>(fileProgress,stats->currentFilename);
|
fileFTPProgressList[itemName] = pair<int,string>(fileProgress,stats->currentFilename);
|
||||||
safeMutexFTPProgress.ReleaseLock();
|
safeMutexFTPProgress.ReleaseLock();
|
||||||
|
|
||||||
if((lastProgress.first / 25) < (fileProgress / 25)) {
|
if(itemName != "" && (lastProgress.first / 25) < (fileProgress / 25)) {
|
||||||
char szMsg[1024]="";
|
char szMsg[1024]="";
|
||||||
sprintf(szMsg,"Player: %s download progress for %s is %d %%",getHumanPlayerName().c_str(),itemName.c_str(),fileProgress);
|
sprintf(szMsg,"Player: %s download progress for [%s] is %d %%",getHumanPlayerName().c_str(),itemName.c_str(),fileProgress);
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] szMsg [%s] lastProgress.first = %d, fileProgress = %d\n",__FILE__,__FUNCTION__,__LINE__,szMsg,lastProgress.first,fileProgress);
|
||||||
|
|
||||||
NetworkManager &networkManager= NetworkManager::getInstance();
|
NetworkManager &networkManager= NetworkManager::getInstance();
|
||||||
ClientInterface* clientInterface= networkManager.getClientInterface();
|
ClientInterface* clientInterface= networkManager.getClientInterface();
|
||||||
|
|
|
@ -2226,7 +2226,7 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings) {
|
||||||
|
|
||||||
if( gameSettings->getTileset() != "") {
|
if( gameSettings->getTileset() != "") {
|
||||||
if(lastCheckedCRCTilesetName != gameSettings->getTileset()) {
|
if(lastCheckedCRCTilesetName != gameSettings->getTileset()) {
|
||||||
console.addLine("Checking tileset CRC [" + gameSettings->getTileset() + "]");
|
//console.addLine("Checking tileset CRC [" + gameSettings->getTileset() + "]");
|
||||||
lastCheckedCRCTilesetValue = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTilesets,""), string("/") + gameSettings->getTileset() + string("/*"), ".xml", NULL);
|
lastCheckedCRCTilesetValue = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTilesets,""), string("/") + gameSettings->getTileset() + string("/*"), ".xml", NULL);
|
||||||
lastCheckedCRCTilesetName = gameSettings->getTileset();
|
lastCheckedCRCTilesetName = gameSettings->getTileset();
|
||||||
}
|
}
|
||||||
|
@ -2236,7 +2236,7 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings) {
|
||||||
if(config.getBool("DisableServerLobbyTechtreeCRCCheck","false") == false) {
|
if(config.getBool("DisableServerLobbyTechtreeCRCCheck","false") == false) {
|
||||||
if(gameSettings->getTech() != "") {
|
if(gameSettings->getTech() != "") {
|
||||||
if(lastCheckedCRCTechtreeName != gameSettings->getTech()) {
|
if(lastCheckedCRCTechtreeName != gameSettings->getTech()) {
|
||||||
console.addLine("Checking techtree CRC [" + gameSettings->getTech() + "]");
|
//console.addLine("Checking techtree CRC [" + gameSettings->getTech() + "]");
|
||||||
lastCheckedCRCTechtreeValue = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTechs,""), "/" + gameSettings->getTech() + "/*", ".xml", NULL);
|
lastCheckedCRCTechtreeValue = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTechs,""), "/" + gameSettings->getTech() + "/*", ".xml", NULL);
|
||||||
|
|
||||||
reloadFactions(true);
|
reloadFactions(true);
|
||||||
|
@ -2250,7 +2250,7 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings) {
|
||||||
}
|
}
|
||||||
factionCRCList.push_back(make_pair(factionName,factionCRC));
|
factionCRCList.push_back(make_pair(factionName,factionCRC));
|
||||||
}
|
}
|
||||||
console.addLine("Found factions: " + intToStr(factionCRCList.size()));
|
//console.addLine("Found factions: " + intToStr(factionCRCList.size()));
|
||||||
lastCheckedCRCTechtreeName = gameSettings->getTech();
|
lastCheckedCRCTechtreeName = gameSettings->getTech();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2263,7 +2263,7 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings) {
|
||||||
if(lastCheckedCRCMapName != gameSettings->getMap()) {
|
if(lastCheckedCRCMapName != gameSettings->getMap()) {
|
||||||
Checksum checksum;
|
Checksum checksum;
|
||||||
string file = Map::getMapPath(gameSettings->getMap(),"",false);
|
string file = Map::getMapPath(gameSettings->getMap(),"",false);
|
||||||
console.addLine("Checking map CRC [" + file + "]");
|
//console.addLine("Checking map CRC [" + file + "]");
|
||||||
checksum.addFile(file);
|
checksum.addFile(file);
|
||||||
lastCheckedCRCMapValue = checksum.getSum();
|
lastCheckedCRCMapValue = checksum.getSum();
|
||||||
lastCheckedCRCMapName = gameSettings->getMap();
|
lastCheckedCRCMapName = gameSettings->getMap();
|
||||||
|
|
|
@ -985,7 +985,7 @@ void World::togglePauseGame(bool pauseStatus) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::addConsoleText(const string &text) {
|
void World::addConsoleText(const string &text) {
|
||||||
game->getConsole()->addLine(text);
|
game->getConsole()->addStdMessage(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::giveUpgradeCommand(int unitId, const string &upgradeName) {
|
void World::giveUpgradeCommand(int unitId, const string &upgradeName) {
|
||||||
|
|
|
@ -64,9 +64,11 @@ include_regular_expression("^.*$")
|
||||||
# Setup package meta-data
|
# Setup package meta-data
|
||||||
set(CURL_VERSION ${CURL_MAJOR_VERSION}.${CURL_MINOR_VERSION}.${CURL_PATCH_VERSION})
|
set(CURL_VERSION ${CURL_MAJOR_VERSION}.${CURL_MINOR_VERSION}.${CURL_PATCH_VERSION})
|
||||||
message(STATUS "curl version=[${CURL_VERSION}]")
|
message(STATUS "curl version=[${CURL_VERSION}]")
|
||||||
IF( ${CURL_VERSION} VERSION_LESS 7.21.0)
|
#IF( ${CURL_VERSION} VERSION_LESS 7.21.0)
|
||||||
|
IF( ${CURL_VERSION} VERSION_LESS 7.16.4)
|
||||||
message(STATUS "(please visit http://curl.haxx.se/libcurl/ to find a newer version)")
|
message(STATUS "(please visit http://curl.haxx.se/libcurl/ to find a newer version)")
|
||||||
message(FATAL_ERROR " CURL version = [${CURL_VERSION}] we require AT LEAST [7.21.0]")
|
#message(FATAL_ERROR " CURL version = [${CURL_VERSION}] we require AT LEAST [7.21.0]")
|
||||||
|
message(FATAL_ERROR " CURL version = [${CURL_VERSION}] we require AT LEAST [7.16.4]")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,10 @@ protected:
|
||||||
string fileArchiveExtractCommand;
|
string fileArchiveExtractCommand;
|
||||||
string fileArchiveExtractCommandParameters;
|
string fileArchiveExtractCommandParameters;
|
||||||
|
|
||||||
|
FTP_Client_ResultType getFileFromServer(string fileNameTitle,
|
||||||
|
string remotePath, string destFileSaveAs, string ftpUser,
|
||||||
|
string ftpUserPassword, vector <string> *wantDirListOnly=NULL);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
FTPClientThread(int portNumber,string serverUrl,
|
FTPClientThread(int portNumber,string serverUrl,
|
||||||
|
|
|
@ -62,6 +62,8 @@ static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream) {
|
||||||
fullFilePath += out->filename;
|
fullFilePath += out->filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> FTP Client thread writing file [%s]\n",fullFilePath.c_str());
|
||||||
|
|
||||||
// Abort file xfer and delete partial file
|
// Abort file xfer and delete partial file
|
||||||
if(out && out->ftpServer && out->ftpServer->getQuitStatus() == true) {
|
if(out && out->ftpServer && out->ftpServer->getQuitStatus() == true) {
|
||||||
if(out->stream) {
|
if(out->stream) {
|
||||||
|
@ -377,8 +379,9 @@ void FTPClientThread::getTilesetFromServer(string tileSetName) {
|
||||||
FTP_Client_ResultType FTPClientThread::getTilesetFromServer(string tileSetName,
|
FTP_Client_ResultType FTPClientThread::getTilesetFromServer(string tileSetName,
|
||||||
string tileSetNameSubfolder, string ftpUser, string ftpUserPassword,
|
string tileSetNameSubfolder, string ftpUser, string ftpUserPassword,
|
||||||
bool findArchive) {
|
bool findArchive) {
|
||||||
FTP_Client_ResultType result = ftp_crt_FAIL;
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
FTP_Client_ResultType result = ftp_crt_FAIL;
|
||||||
string destFile = this->tilesetsPath.second;
|
string destFile = this->tilesetsPath.second;
|
||||||
|
|
||||||
// Root folder for the tileset
|
// Root folder for the tileset
|
||||||
|
@ -409,7 +412,7 @@ FTP_Client_ResultType FTPClientThread::getTilesetFromServer(string tileSetName,
|
||||||
|
|
||||||
struct FtpFile ftpfile = {
|
struct FtpFile ftpfile = {
|
||||||
tileSetName.c_str(),
|
tileSetName.c_str(),
|
||||||
destFile.c_str(), // name to store the file as if succesful
|
destFile.c_str(), // name to store the file as if successful
|
||||||
destFile.c_str(),
|
destFile.c_str(),
|
||||||
NULL,
|
NULL,
|
||||||
this,
|
this,
|
||||||
|
@ -421,8 +424,6 @@ FTP_Client_ResultType FTPClientThread::getTilesetFromServer(string tileSetName,
|
||||||
ftpfile.filepath = destRootArchiveFolder.c_str();
|
ftpfile.filepath = destRootArchiveFolder.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
//curl_global_init(CURL_GLOBAL_DEFAULT);
|
|
||||||
|
|
||||||
CURL *curl = SystemFlags::initHTTP();
|
CURL *curl = SystemFlags::initHTTP();
|
||||||
if(curl) {
|
if(curl) {
|
||||||
ftpfile.stream = NULL;
|
ftpfile.stream = NULL;
|
||||||
|
@ -537,6 +538,121 @@ FTP_Client_ResultType FTPClientThread::getTilesetFromServer(string tileSetName,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
*/
|
||||||
|
|
||||||
|
string destFileSaveAsNewFile = "";
|
||||||
|
string destFileSaveAs = "";
|
||||||
|
string remotePath = "";
|
||||||
|
bool getFolderContents = false;
|
||||||
|
vector<string> wantDirListOnly;
|
||||||
|
if(tileSetNameSubfolder == "") {
|
||||||
|
if(findArchive == true) {
|
||||||
|
destFileSaveAs = this->tilesetsPath.second;
|
||||||
|
endPathWithSlash(destFileSaveAs);
|
||||||
|
destFileSaveAs += tileSetName + this->fileArchiveExtension;
|
||||||
|
|
||||||
|
remotePath = tileSetName + this->fileArchiveExtension;
|
||||||
|
//sprintf(szBuf,"ftp://%s:%s@%s:%d/%s%s",ftpUser.c_str(),ftpUserPassword.c_str(),serverUrl.c_str(),portNumber,
|
||||||
|
// tileSetName.c_str(),this->fileArchiveExtension.c_str());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
getFolderContents = true;
|
||||||
|
remotePath = tileSetName + "/";
|
||||||
|
destFileSaveAs = this->tilesetsPath.second;
|
||||||
|
endPathWithSlash(destFileSaveAs);
|
||||||
|
destFileSaveAs += tileSetName;
|
||||||
|
destFileSaveAsNewFile = destFileSaveAs;
|
||||||
|
endPathWithSlash(destFileSaveAsNewFile);
|
||||||
|
destFileSaveAs += ".tmp";
|
||||||
|
|
||||||
|
//sprintf(szBuf,"ftp://%s:%s@%s:%d/%s/*",ftpUser.c_str(),ftpUserPassword.c_str(),serverUrl.c_str(),portNumber,tileSetName.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
getFolderContents = true;
|
||||||
|
remotePath = tileSetName + "/" + tileSetNameSubfolder + "/";
|
||||||
|
destFileSaveAs = this->tilesetsPath.second;
|
||||||
|
endPathWithSlash(destFileSaveAs);
|
||||||
|
destFileSaveAs += tileSetName;
|
||||||
|
endPathWithSlash(destFileSaveAs);
|
||||||
|
|
||||||
|
destFileSaveAs += tileSetNameSubfolder;
|
||||||
|
destFileSaveAsNewFile = destFileSaveAs;
|
||||||
|
endPathWithSlash(destFileSaveAsNewFile);
|
||||||
|
destFileSaveAs += ".tmp";
|
||||||
|
|
||||||
|
//sprintf(szBuf,"ftp://%s:%s@%s:%d/%s/%s/*",ftpUser.c_str(),ftpUserPassword.c_str(),serverUrl.c_str(),portNumber,
|
||||||
|
// tileSetName.c_str(),tileSetNameSubfolder.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
vector <string> *pWantDirListOnly = NULL;
|
||||||
|
if(getFolderContents == true) {
|
||||||
|
pWantDirListOnly = &wantDirListOnly;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("FTPClientThread::getTilesetFromServer [%s] remotePath [%s] destFileSaveAs [%s] getFolderContents = %d\n",tileSetName.c_str(),remotePath.c_str(),destFileSaveAs.c_str(),getFolderContents);
|
||||||
|
|
||||||
|
FTP_Client_ResultType result = getFileFromServer(tileSetName,
|
||||||
|
remotePath, destFileSaveAs,ftpUser, ftpUserPassword, pWantDirListOnly);
|
||||||
|
|
||||||
|
// Extract the archive
|
||||||
|
if(result == ftp_crt_SUCCESS) {
|
||||||
|
if(findArchive == true) {
|
||||||
|
string destRootArchiveFolder = this->tilesetsPath.second;
|
||||||
|
endPathWithSlash(destRootArchiveFolder);
|
||||||
|
|
||||||
|
string extractCmd = getFullFileArchiveExtractCommand(this->fileArchiveExtractCommand,
|
||||||
|
this->fileArchiveExtractCommandParameters, destRootArchiveFolder,
|
||||||
|
destRootArchiveFolder + tileSetName + this->fileArchiveExtension);
|
||||||
|
|
||||||
|
if(executeShellCommand(extractCmd) == false) {
|
||||||
|
result = ftp_crt_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(getFolderContents == true) {
|
||||||
|
removeFile(destFileSaveAs);
|
||||||
|
|
||||||
|
for(unsigned int i = 0; i < wantDirListOnly.size(); ++i) {
|
||||||
|
string fileFromList = wantDirListOnly[i];
|
||||||
|
|
||||||
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("fileFromList [%s] i [%d]\n",fileFromList.c_str(),i);
|
||||||
|
|
||||||
|
if( fileFromList != "models" && fileFromList != "textures" &&
|
||||||
|
fileFromList != "sounds") {
|
||||||
|
result = getFileFromServer(tileSetName,
|
||||||
|
remotePath + fileFromList,
|
||||||
|
destFileSaveAsNewFile + fileFromList,
|
||||||
|
ftpUser, ftpUserPassword);
|
||||||
|
if(result != ftp_crt_SUCCESS) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
result = getTilesetFromServer(tileSetName,
|
||||||
|
fileFromList, ftpUser, ftpUserPassword,
|
||||||
|
findArchive);
|
||||||
|
if(result != ftp_crt_SUCCESS) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(result != ftp_crt_SUCCESS && findArchive == false) {
|
||||||
|
string destRootFolder = this->tilesetsPath.second;
|
||||||
|
endPathWithSlash(destRootFolder);
|
||||||
|
destRootFolder += tileSetName;
|
||||||
|
endPathWithSlash(destRootFolder);
|
||||||
|
|
||||||
|
removeFolder(destRootFolder);
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -558,6 +674,8 @@ void FTPClientThread::getTechtreeFromServer(string techtreeName) {
|
||||||
|
|
||||||
FTP_Client_ResultType FTPClientThread::getTechtreeFromServer(string techtreeName,
|
FTP_Client_ResultType FTPClientThread::getTechtreeFromServer(string techtreeName,
|
||||||
string ftpUser, string ftpUserPassword) {
|
string ftpUser, string ftpUserPassword) {
|
||||||
|
|
||||||
|
/*
|
||||||
FTP_Client_ResultType result = ftp_crt_FAIL;
|
FTP_Client_ResultType result = ftp_crt_FAIL;
|
||||||
|
|
||||||
string destFile = this->techtreesPath.second;
|
string destFile = this->techtreesPath.second;
|
||||||
|
@ -575,23 +693,36 @@ FTP_Client_ResultType FTPClientThread::getTechtreeFromServer(string techtreeName
|
||||||
|
|
||||||
endPathWithSlash(destFile);
|
endPathWithSlash(destFile);
|
||||||
destFile += techtreeName;
|
destFile += techtreeName;
|
||||||
|
string destFileSaveAs = destFile + this->fileArchiveExtension;
|
||||||
endPathWithSlash(destFile);
|
endPathWithSlash(destFile);
|
||||||
|
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> FTP Client thread about to try to RETR into [%s]\n",destFile.c_str());
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> FTP Client thread about to try to RETR into [%s]\n",destFileSaveAs.c_str());
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"===> FTP Client thread about to try to RETR into [%s]\n",destFile.c_str());
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"===> FTP Client thread about to try to RETR into [%s]\n",destFileSaveAs.c_str());
|
||||||
|
|
||||||
|
|
||||||
|
// struct FtpFile ftpfile = {
|
||||||
|
// techtreeName.c_str(),
|
||||||
|
// destFile.c_str(), // name to store the file as if succesful
|
||||||
|
// destFile.c_str(),
|
||||||
|
// NULL,
|
||||||
|
// this,
|
||||||
|
// "",
|
||||||
|
// false
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// ftpfile.filepath = destRootArchiveFolder.c_str();
|
||||||
|
|
||||||
|
|
||||||
struct FtpFile ftpfile = {
|
struct FtpFile ftpfile = {
|
||||||
techtreeName.c_str(),
|
techtreeName.c_str(),
|
||||||
destFile.c_str(), // name to store the file as if succesful
|
destFileSaveAs.c_str(), // name to store the file as if succesful
|
||||||
destFile.c_str(),
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
this,
|
this,
|
||||||
"",
|
"",
|
||||||
false
|
false
|
||||||
};
|
};
|
||||||
|
|
||||||
ftpfile.filepath = destRootArchiveFolder.c_str();
|
|
||||||
|
|
||||||
CURL *curl = SystemFlags::initHTTP();
|
CURL *curl = SystemFlags::initHTTP();
|
||||||
if(curl) {
|
if(curl) {
|
||||||
ftpfile.stream = NULL;
|
ftpfile.stream = NULL;
|
||||||
|
@ -603,14 +734,14 @@ FTP_Client_ResultType FTPClientThread::getTechtreeFromServer(string techtreeName
|
||||||
curl_easy_setopt(curl, CURLOPT_FTP_USE_EPSV, 0L);
|
curl_easy_setopt(curl, CURLOPT_FTP_USE_EPSV, 0L);
|
||||||
|
|
||||||
// turn on wildcard matching
|
// turn on wildcard matching
|
||||||
curl_easy_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
|
//curl_easy_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
|
||||||
|
|
||||||
// callback is called before download of concrete file started
|
// callback is called before download of concrete file started
|
||||||
curl_easy_setopt(curl, CURLOPT_CHUNK_BGN_FUNCTION, file_is_comming);
|
//curl_easy_setopt(curl, CURLOPT_CHUNK_BGN_FUNCTION, file_is_comming);
|
||||||
// callback is called after data from the file have been transferred
|
// callback is called after data from the file have been transferred
|
||||||
curl_easy_setopt(curl, CURLOPT_CHUNK_END_FUNCTION, file_is_downloaded);
|
//curl_easy_setopt(curl, CURLOPT_CHUNK_END_FUNCTION, file_is_downloaded);
|
||||||
|
|
||||||
curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &ftpfile);
|
//curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &ftpfile);
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
|
||||||
|
|
||||||
// Define our callback to get called when there's data to be written
|
// Define our callback to get called when there's data to be written
|
||||||
|
@ -667,9 +798,169 @@ FTP_Client_ResultType FTPClientThread::getTechtreeFromServer(string techtreeName
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// Root folder for the techtree
|
||||||
|
string destRootFolder = this->techtreesPath.second;
|
||||||
|
endPathWithSlash(destRootFolder);
|
||||||
|
string destRootArchiveFolder = destRootFolder;
|
||||||
|
destRootFolder += techtreeName;
|
||||||
|
endPathWithSlash(destRootFolder);
|
||||||
|
|
||||||
|
string destFile = this->techtreesPath.second;
|
||||||
|
endPathWithSlash(destFile);
|
||||||
|
destFile += techtreeName;
|
||||||
|
string destFileSaveAs = destFile + this->fileArchiveExtension;
|
||||||
|
endPathWithSlash(destFile);
|
||||||
|
|
||||||
|
string remotePath = techtreeName + this->fileArchiveExtension;
|
||||||
|
FTP_Client_ResultType result = getFileFromServer(techtreeName,
|
||||||
|
remotePath, destFileSaveAs, ftpUser, ftpUserPassword);
|
||||||
|
|
||||||
|
// Extract the archive
|
||||||
|
if(result == ftp_crt_SUCCESS) {
|
||||||
|
string extractCmd = getFullFileArchiveExtractCommand(this->fileArchiveExtractCommand,
|
||||||
|
this->fileArchiveExtractCommandParameters, destRootArchiveFolder,
|
||||||
|
destRootArchiveFolder + techtreeName + this->fileArchiveExtension);
|
||||||
|
|
||||||
|
if(executeShellCommand(extractCmd) == false) {
|
||||||
|
result = ftp_crt_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FTP_Client_ResultType FTPClientThread::getFileFromServer(string fileNameTitle,
|
||||||
|
string remotePath, string destFileSaveAs,
|
||||||
|
string ftpUser, string ftpUserPassword, vector <string> *wantDirListOnly) {
|
||||||
|
FTP_Client_ResultType result = ftp_crt_FAIL;
|
||||||
|
if(wantDirListOnly) {
|
||||||
|
(*wantDirListOnly).clear();
|
||||||
|
}
|
||||||
|
string destRootFolder = extractDirectoryPathFromFile(destFileSaveAs);
|
||||||
|
bool pathCreated = false;
|
||||||
|
if(isdir(destRootFolder.c_str()) == false) {
|
||||||
|
createDirectoryPaths(destRootFolder);
|
||||||
|
pathCreated = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wantDirList = (wantDirListOnly != NULL);
|
||||||
|
|
||||||
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> FTP Client thread about to try to RETR into [%s] wantDirList = %d\n",destFileSaveAs.c_str(),wantDirList);
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"===> FTP Client thread about to try to RETR into [%s] wantDirList = %d\n",destFileSaveAs.c_str(),wantDirList);
|
||||||
|
|
||||||
|
struct FtpFile ftpfile = {
|
||||||
|
fileNameTitle.c_str(),
|
||||||
|
destFileSaveAs.c_str(), // name to store the file as if successful
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
this,
|
||||||
|
"",
|
||||||
|
false
|
||||||
|
};
|
||||||
|
|
||||||
|
CURL *curl = SystemFlags::initHTTP();
|
||||||
|
if(curl) {
|
||||||
|
ftpfile.stream = NULL;
|
||||||
|
|
||||||
|
char szBuf[1024]="";
|
||||||
|
sprintf(szBuf,"ftp://%s:%s@%s:%d/%s",ftpUser.c_str(),ftpUserPassword.c_str(),serverUrl.c_str(),portNumber,remotePath.c_str());
|
||||||
|
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL,szBuf);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_FTP_USE_EPSV, 0L);
|
||||||
|
|
||||||
|
// turn on wildcard matching
|
||||||
|
//curl_easy_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
|
||||||
|
|
||||||
|
// callback is called before download of concrete file started
|
||||||
|
//curl_easy_setopt(curl, CURLOPT_CHUNK_BGN_FUNCTION, file_is_comming);
|
||||||
|
// callback is called after data from the file have been transferred
|
||||||
|
//curl_easy_setopt(curl, CURLOPT_CHUNK_END_FUNCTION, file_is_downloaded);
|
||||||
|
|
||||||
|
//curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &ftpfile);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
|
||||||
|
|
||||||
|
// Define our callback to get called when there's data to be written
|
||||||
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
|
||||||
|
// Set a pointer to our struct to pass to the callback
|
||||||
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
|
||||||
|
|
||||||
|
if(wantDirListOnly) {
|
||||||
|
curl_easy_setopt(curl, CURLOPT_DIRLISTONLY, 1);
|
||||||
|
}
|
||||||
|
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, file_progress);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, &ftpfile);
|
||||||
|
|
||||||
|
// Max 10 minutes to transfer
|
||||||
|
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 600);
|
||||||
|
|
||||||
|
// Switch on full protocol/debug output
|
||||||
|
if(SystemFlags::VERBOSE_MODE_ENABLED) curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
|
||||||
|
|
||||||
|
CURLcode res = curl_easy_perform(curl);
|
||||||
|
|
||||||
|
if(res != CURLE_OK) {
|
||||||
|
// we failed
|
||||||
|
printf("curl FAILED with: %d [%s] attempting to remove folder contents [%s] szBuf [%s] ftpfile.isValidXfer = %d, pathCreated = %d\n", res,curl_easy_strerror(res),destRootFolder.c_str(),szBuf,ftpfile.isValidXfer,pathCreated);
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"curl FAILED with: %d [%s] attempting to remove folder contents [%s] szBuf [%s] ftpfile.isValidXfer = %d, pathCreated = %d\n", res,curl_easy_strerror(res),destRootFolder.c_str(),szBuf,ftpfile.isValidXfer,pathCreated);
|
||||||
|
|
||||||
|
if(res == CURLE_PARTIAL_FILE || ftpfile.isValidXfer == true) {
|
||||||
|
result = ftp_crt_PARTIALFAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(destRootFolder != "") {
|
||||||
|
if(pathCreated == true) {
|
||||||
|
removeFolder(destRootFolder);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
removeFile(destFileSaveAs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
result = ftp_crt_SUCCESS;
|
||||||
|
|
||||||
|
if(wantDirListOnly) {
|
||||||
|
if(ftpfile.stream) {
|
||||||
|
fclose(ftpfile.stream);
|
||||||
|
ftpfile.stream = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE *fp = fopen(destFileSaveAs.c_str(), "rt");
|
||||||
|
if(fp != NULL) {
|
||||||
|
char szBuf[4096]="";
|
||||||
|
while(feof(fp) == false) {
|
||||||
|
if(fgets( szBuf, 4095, fp) != NULL) {
|
||||||
|
string item = szBuf;
|
||||||
|
replaceAll(item,"\n","");
|
||||||
|
replaceAll(item,"\r","");
|
||||||
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Got [%s]\n",item.c_str());
|
||||||
|
(*wantDirListOnly).push_back(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemFlags::cleanupHTTP(&curl);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ftpfile.stream) {
|
||||||
|
fclose(ftpfile.stream);
|
||||||
|
ftpfile.stream = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FTPClientCallbackInterface * FTPClientThread::getCallBackObject() {
|
FTPClientCallbackInterface * FTPClientThread::getCallBackObject() {
|
||||||
MutexSafeWrapper safeMutex(this->getProgressMutex(),string(__FILE__) + "_" + intToStr(__LINE__));
|
MutexSafeWrapper safeMutex(this->getProgressMutex(),string(__FILE__) + "_" + intToStr(__LINE__));
|
||||||
return pCBObject;
|
return pCBObject;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user