--- /dev/null
+////////////////////////////////////////////////////////\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
+// Server there all the files lie\r
+const char* tree_server = "http://svn.reactos.com/viewcvs/*checkout*/trunk/rosapps/packmgr/tree/"; \r
+\r
+HRESULT WINAPI URLDownloadToFileA( \r
+ LPUNKNOWN pCaller,\r
+ LPCSTR szURL,\r
+ LPCSTR szFileName,\r
+ DWORD dwReserved,\r
+ LPBINDSTATUSCALLBACK lpfnCB\r
+);\r
+\r
+\r
+// Download a file\r
+char* PML_Download (const char* name, const char* local_name = "packmgr.txt", const char* server = tree_server, BOOL totemp = TRUE) \r
+{\r
+ char url [MAX_PATH];\r
+ static char path [MAX_PATH]; \r
+\r
+ // get temp dir\r
+ if(totemp)\r
+ GetTempPathA (200, path);\r
+ \r
+ // create the local file name\r
+ if(local_name)\r
+ strcat(path, local_name);\r
+ else\r
+ strcat(path, "tmp.tmp"); \r
+\r
+ // get the url\r
+ if(server) strcpy(url, server);\r
+ strcat(url, name);\r
+ \r
+ // make sure there is no old file\r
+ DeleteFileA (path); \r
+\r
+ // download the file\r
+ if(URLDownloadToFileA (NULL, url, path, 0, NULL) != S_OK)\r
+ {\r
+ Log("! ERROR: Unable to download ");\r
+ LogAdd(url);\r
+\r
+ return NULL;\r
+ }\r
+\r
+ return path;\r
+}\r
+\r
+// Download and prozess a xml file\r
+int PML_XmlDownload (const char* url, void* usrdata, XML_StartElementHandler start, \r
+ XML_EndElementHandler end, XML_CharacterDataHandler text) \r
+{\r
+ char buffer[255];\r
+ int done = 0;\r
+\r
+ // logging\r
+ Log("* prozess the xml file: ");\r
+ LogAdd(url);\r
+\r
+ // download the file\r
+ char* filename = PML_Download(url);\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
+ Log("! ERROR: Could not open the xml file");\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