Fix umpnpmgr build
[reactos.git] / rosapps / packmgr / lib / download.cpp
index 41761dd..8cda6f7 100644 (file)
-////////////////////////////////////////////////////////\r
-//\r
-// download.cpp\r
-// \r
-// Stuff related to downloading\r
-//\r
-//\r
-// Maarten Bosma, 09.01.2004\r
-// maarten.paul@bosma.de\r
-//\r
-////////////////////////////////////////////////////////\r
-\r
-#include "package.hpp"\r
-#include "expat.h"\r
-#include "log.h"\r
-#include <wine/urlmon.h>\r
-\r
-HRESULT WINAPI URLDownloadToFileA(      \r
-    LPUNKNOWN pCaller,\r
-    LPCSTR szURL,\r
-    LPCSTR szFileName,\r
-    DWORD dwReserved,\r
-    LPBINDSTATUSCALLBACK lpfnCB\r
-);\r
-\r
-int FindCount (string What, string Where, int start = 0, int end = -1);\r
-\r
-\r
-// Download a file \r
-char* PML_Download (pTree tree, const char* url, const char* server = "tree", const char* filename = NULL) \r
-{\r
-       UINT i;\r
-       static char downl [MAX_PATH]; // the full url\r
-       static char path [MAX_PATH]; // the full resulting Path\r
-\r
-       // It goes to the temp folder when no other path is entered (or even compleatly no filename)\r
-       // If server == "tree" it will be downloaded from the server speficied in option.xml\r
-       // File:// links are possible too\r
-\r
-       // get temp dir\r
-       if(!filename)\r
-               GetTempPathA (200, path);\r
-\r
-       else if(!strstr(filename, "\\"))\r
-               GetTempPathA (200, path);\r
-       \r
-       // create the local file name\r
-       if(filename)\r
-       {\r
-               strcat(path, filename);\r
-               DeleteFileA (path);\r
-       }\r
-       else\r
-               GetTempFileNameA (path, "pml", 0, path); \r
-\r
-       // get the url\r
-       if (!server)\r
-               strcpy(downl, "");\r
-\r
-       else if(!strcmp(server, "tree")) \r
-       {\r
-               char* ret;\r
-               for (i=0; i<tree->sources.size(); i++)\r
-               {\r
-                       ret = PML_Download(tree, url, tree->sources[i], filename);\r
-                       if(ret)\r
-                               return ret;\r
-               }\r
-               return NULL;\r
-       }\r
-\r
-       else \r
-               strcpy(downl, server);\r
-\r
-       strcat(downl, url);\r
-\r
-       // is this a file link ?\r
-       if (strstr(downl, "file://") || strstr(downl, "File://"))\r
-       {/*\r
-               if(downl[strlen(downl)] == '\')\r
-                       downl[strlen(downl)] = '\0';\r
-       */\r
-               if(!filename)\r
-                       return &downl[7];\r
-\r
-               else\r
-               {\r
-                       CopyFileA(filename, &downl[7], FALSE);\r
-                       return (char*)filename;\r
-               }\r
-       }\r
-\r
-       // download the file\r
-       if(URLDownloadToFileA (NULL, downl, path, 0, NULL) != S_OK)\r
-       {\r
-               Log("!  ERROR: Unable to download ");\r
-               LogAdd(downl);\r
-\r
-               return NULL;\r
-       }\r
-\r
-       return path;\r
-}\r
-\r
-// Download and prozess a xml file\r
-int PML_XmlDownload (pTree tree, const char* url, void* usrdata,\r
-                                                XML_StartElementHandler start, XML_EndElementHandler end, XML_CharacterDataHandler text) \r
-{\r
-       int done = 0;\r
-       char buffer[255];\r
-       char* filename = 0;\r
-\r
-       // logging\r
-       Log("*  prozess the xml file: ");\r
-       LogAdd(url);\r
-\r
-       // download the file\r
-       if(strstr(url, "file://"))\r
-               filename = PML_Download(tree, url, NULL);\r
-\r
-       else\r
-               filename = PML_Download(tree, url);\r
-\r
-\r
-       if(!filename) \r
-       {\r
-               Log("!  ERROR: Could not download the xml file");\r
-               return ERR_DOWNL;\r
-       }\r
-\r
-       // open the file\r
-       FILE* file = fopen(filename, "r");\r
-       if(!file) \r
-       {\r
-       MessageBoxA(0,filename,0,0);\r
-               Log("!  ERROR: Could not open the xml file \"");\r
-               LogAdd(filename);\r
-               return ERR_GENERIC;\r
-       }\r
-\r
-       // parse the xml file\r
-       XML_Parser parser = XML_ParserCreate(NULL);\r
-       XML_SetUserData (parser, usrdata);\r
-       XML_SetElementHandler(parser, start, end);\r
-       XML_SetCharacterDataHandler(parser, text);\r
-\r
-       while (!done)\r
-       {\r
-               size_t len = fread (buffer, 1, sizeof(buffer), file);\r
-               done = len < sizeof(buffer);\r
-\r
-               buffer[len] = 0;\r
-               if(!XML_Parse(parser, buffer, len, done)) \r
-               {\r
-                       Log("!  ERROR: Could not parse the xml file");\r
-                       return ERR_GENERIC;\r
-               }\r
-       }\r
-\r
-       XML_ParserFree(parser);\r
-       fclose(file);\r
-\r
-       return ERR_OK;\r
-}\r
-\r
+////////////////////////////////////////////////////////
+//
+// download.cpp
+// 
+// Stuff related to downloading
+//
+//
+// Maarten Bosma, 09.01.2004
+// maarten.paul@bosma.de
+//
+////////////////////////////////////////////////////////
+
+#include "package.hpp"
+#include "expat.h"
+#include "log.h"
+#include <urlmon.h>
+
+HRESULT WINAPI URLDownloadToFileA(      
+    LPUNKNOWN pCaller,
+    LPCSTR szURL,
+    LPCSTR szFileName,
+    DWORD dwReserved,
+    LPBINDSTATUSCALLBACK lpfnCB
+);
+
+int FindCount (string What, string Where, int start = 0, int end = -1);
+
+
+// Download a file 
+char* PML_Download (pTree tree, const char* url, const char* server = "tree", const char* filename = "packmgr.xml") 
+{
+       UINT i;
+       static char downl [MAX_PATH]; // the full url
+       static char path [MAX_PATH]; // the full resulting Path
+
+       // It goes to the temp folder when no other path is entered (or even compleatly no filename)
+       // If server == "tree" it will be downloaded from the server speficied in option.xml
+       // File:// links are possible too
+
+       // get temp dir
+       if(!filename)
+               GetTempPathA (200, path);
+
+       else if(!strstr(filename, "\\"))
+               GetTempPathA (200, path);
+
+       else
+               strcpy(path, "");
+
+       
+       // create the local file name
+       if(filename)
+       {
+               strcat(path, filename);
+               DeleteFileA (path);
+       }
+       else
+               GetTempFileNameA (path, "pml", 1, path); 
+
+       // get the url
+       if (!server)
+               strcpy(downl, "");
+
+       else if(!strcmp(server, "tree")) 
+       {
+               char* ret;
+               for (i=0; i<tree->sources.size(); i++)
+               {
+                       ret = PML_Download(tree, url, tree->sources[i], filename);
+                       if(ret)
+                               return ret;
+               }
+               return NULL;
+       }
+
+       else 
+               strcpy(downl, server);
+
+       strcat(downl, url);
+
+       // is this a file link ?
+       if (strstr(downl, "file://") || strstr(downl, "File://"))
+       {
+               if(!filename)
+               {
+                       return &downl[7];
+               }
+
+               else
+               {
+                       CopyFileA(filename, &downl[7], FALSE);
+                       return (char*)filename;
+               }
+       }
+
+
+       // download the file
+       if(URLDownloadToFileA (NULL, downl, path, 0, NULL) != S_OK)
+       {
+               Log("!  ERROR: Unable to download ");
+               LogAdd(downl);
+
+               return NULL;
+       }
+
+       return path;
+}
+
+// Download and prozess a xml file
+int PML_XmlDownload (pTree tree, const char* url, void* usrdata,
+                                                XML_StartElementHandler start, XML_EndElementHandler end, XML_CharacterDataHandler text) 
+{
+       int done = 0;
+       char buffer[255];
+       char* filename = 0;
+
+       // logging
+       Log("*  prozess the xml file: ");
+       LogAdd(url);
+
+       // download the file
+       if(strstr(url, "file://"))
+               filename = PML_Download(tree, url, NULL, NULL);
+
+       else
+               filename = PML_Download(tree, url);
+
+
+       if(!filename) 
+       {
+               Log("!  ERROR: Could not download the xml file");
+               return ERR_DOWNL;
+       }
+
+       // open the file
+       FILE* file = fopen(filename, "r");
+       if(!file) 
+       {
+               Log("!  ERROR: Could not open the xml file ");
+               LogAdd(filename);
+               return ERR_GENERIC;
+       }
+
+       // parse the xml file
+       XML_Parser parser = XML_ParserCreate(NULL);
+       XML_SetUserData (parser, usrdata);
+       XML_SetElementHandler(parser, start, end);
+       XML_SetCharacterDataHandler(parser, text);
+
+       while (!done)
+       {
+               size_t len = fread (buffer, 1, sizeof(buffer), file);
+               done = len < sizeof(buffer);
+
+               buffer[len] = 0;
+               if(!XML_Parse(parser, buffer, len, done)) 
+               {
+                       Log("!  ERROR: Could not parse the xml file");
+                       return ERR_GENERIC;
+               }
+       }
+
+       XML_ParserFree(parser);
+       fclose(file);
+
+       return ERR_OK;
+}
+