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
29 int FindCount (string What
, string Where
, int start
= 0, int end
= -1);
33 char* PML_Download (const char* url
, const char* server
= "tree", const char* filename
= NULL
)
35 char downl
[MAX_PATH
];
36 static char path
[MAX_PATH
];
40 GetTempPathA (200, path
);
42 else if(!strstr(filename
, "\\"))
43 GetTempPathA (200, path
);
45 // create the local file name
48 strcat(path
, filename
);
52 GetTempFileNameA (path
, "pml", 0, path
);
59 else if(!strcmp(server
, "tree"))
60 strcpy(downl
, tree_server
);
63 strcpy(downl
, server
);
68 if(URLDownloadToFileA (NULL
, downl
, path
, 0, NULL
) != S_OK
)
70 Log("! ERROR: Unable to download ");
79 // Download and prozess a xml file
80 int PML_XmlDownload (const char* url
, void* usrdata
, XML_StartElementHandler start
,
81 XML_EndElementHandler end
, XML_CharacterDataHandler text
)
87 Log("* prozess the xml file: ");
91 char* filename
= PML_Download(url
);
95 Log("! ERROR: Could not download the xml file");
100 FILE* file
= fopen(filename
, "r");
103 Log("! ERROR: Could not open the xml file");
107 // parse the xml file
108 XML_Parser parser
= XML_ParserCreate(NULL
);
109 XML_SetUserData (parser
, usrdata
);
110 XML_SetElementHandler(parser
, start
, end
);
111 XML_SetCharacterDataHandler(parser
, text
);
115 size_t len
= fread (buffer
, 1, sizeof(buffer
), file
);
116 done
= len
< sizeof(buffer
);
119 if(!XML_Parse(parser
, buffer
, len
, done
))
121 Log("! ERROR: Could not parse the xml file");
126 XML_ParserFree(parser
);