1 ////////////////////////////////////////////////////////
5 // Stuff related to downloading
8 // Maarten Bosma, 09.01.2004
9 // maarten.paul@bosma.de
11 ////////////////////////////////////////////////////////
13 #include "package.hpp"
16 #include <wine/urlmon.h>
18 // Server there all the files lie
19 const char* tree_server
= "http://svn.reactos.com/viewcvs/*checkout*/trunk/rosapps/packmgr/tree/";
21 HRESULT WINAPI
URLDownloadToFileA(
26 LPBINDSTATUSCALLBACK lpfnCB
31 char* PML_Download (const char* name
, const char* local_name
= "packmgr.txt", const char* server
= tree_server
, BOOL totemp
= TRUE
)
34 static char path
[MAX_PATH
];
38 GetTempPathA (200, path
);
40 // create the local file name
42 strcat(path
, local_name
);
44 strcat(path
, "tmp.tmp");
47 if(server
) strcpy(url
, server
);
50 // make sure there is no old file
54 if(URLDownloadToFileA (NULL
, url
, path
, 0, NULL
) != S_OK
)
56 Log("! ERROR: Unable to download ");
65 // Download and prozess a xml file
66 int PML_XmlDownload (const char* url
, void* usrdata
, XML_StartElementHandler start
,
67 XML_EndElementHandler end
, XML_CharacterDataHandler text
)
73 Log("* prozess the xml file: ");
77 char* filename
= PML_Download(url
);
81 Log("! ERROR: Could not download the xml file");
86 FILE* file
= fopen(filename
, "r");
89 Log("! ERROR: Could not open the xml file");
94 XML_Parser parser
= XML_ParserCreate(NULL
);
95 XML_SetUserData (parser
, usrdata
);
96 XML_SetElementHandler(parser
, start
, end
);
97 XML_SetCharacterDataHandler(parser
, text
);
101 size_t len
= fread (buffer
, 1, sizeof(buffer
), file
);
102 done
= len
< sizeof(buffer
);
105 if(!XML_Parse(parser
, buffer
, len
, done
))
107 Log("! ERROR: Could not parse the xml file");
112 XML_ParserFree(parser
);