diff options
author | Xavier Roche <xroche@users.noreply.github.com> | 2012-03-19 12:59:03 +0000 |
---|---|---|
committer | Xavier Roche <xroche@users.noreply.github.com> | 2012-03-19 12:59:03 +0000 |
commit | 660b569b0980fc8f71b03ed666dd02eec8388b4c (patch) | |
tree | 8ad02b5f0bebdd4cd1d2ba01005d6f3f71a0a7fb /src/htsweb.c | |
parent | 64cc4a88da8887ef1f7f4d90be0158d2cc76222d (diff) |
httrack 3.41.2
Diffstat (limited to 'src/htsweb.c')
-rw-r--r-- | src/htsweb.c | 185 |
1 files changed, 104 insertions, 81 deletions
diff --git a/src/htsweb.c b/src/htsweb.c index 51c85df..a713fe3 100644 --- a/src/htsweb.c +++ b/src/htsweb.c @@ -53,8 +53,10 @@ Please visit our Website: http://www.httrack.com #endif // htswrap_add #include "htsglobal.h" +#include "htsbasenet.h" #include "htswrap.h" #include "httrack-library.h" +#include "htsdefines.h" /* Threads */ #include "htsthread.h" @@ -71,7 +73,7 @@ Please visit our Website: http://www.httrack.com #error fatal: no threads support #endif -#if HTS_WIN +#ifdef _WIN32 #ifndef __cplusplus // DOS #include <process.h> /* _beginthread, _endthread */ @@ -79,7 +81,7 @@ Please visit our Website: http://www.httrack.com #else #endif -static PTHREAD_LOCK_TYPE refreshMutex; +static htsmutex refreshMutex = HTSMUTEX_INIT; static int help_server(char* dest_path, int defaultPort); extern int commandRunning; @@ -128,7 +130,6 @@ int main(int argc, char* argv[]) /* init and launch */ hts_init(); htslang_init(); - webhttrack_lock(-999); /* set general keys */ #ifdef HTS_ETCPATH @@ -172,7 +173,7 @@ int main(int argc, char* argv[]) smallserver_setkey("HTTRACK_AFF_VERSION", HTTRACK_AFF_VERSION); { char tmp[32]; - sprintf(tmp, "%d", HTS_PLATFORM); + sprintf(tmp, "%d", -1); smallserver_setkey("HTS_PLATFORM", tmp); } smallserver_setkey("HTTRACK_WEB", HTTRACK_WEB); @@ -181,7 +182,7 @@ int main(int argc, char* argv[]) { char buff[1024]; char digest[32 + 2]; - srand(time(NULL)); + srand((unsigned int)time(NULL)); sprintf(buff, "%d-%d", (int)time(NULL), (int)rand()); domd5mem(buff,strlen(buff),digest,1); smallserver_setkey("sid", digest); @@ -192,7 +193,7 @@ int main(int argc, char* argv[]) for(i = 2 ; i < argc ; i += 2) { if (strcmp(argv[i], "--port") == 0) { if (sscanf(argv[i + 1], "%d", &defaultPort) != 1 || defaultPort < 0 || defaultPort >= 65535 ) { - fprintf(stderr, "couldn't set the port number to %d\n", argv[i + 1]); + fprintf(stderr, "couldn't set the port number to %s\n", argv[i + 1]); return -1; } } else { @@ -218,13 +219,15 @@ int main(int argc, char* argv[]) return ret; } -static int webhttrack_runmain(int argc, char** argv); -static PTHREAD_TYPE PTHREAD_TYPE_FNC back_launch_cmd( void* pP ) { +static int webhttrack_runmain(httrackp *opt, int argc, char** argv); +static void back_launch_cmd( void* pP ) { char* cmd = (char*) pP; char** argv = (char**) malloct(1024 * sizeof(char*)); int argc = 0; int i = 0; int g = 0; + // + httrackp *opt; /* copy commandline */ if (commandReturnCmdl) @@ -253,15 +256,24 @@ static PTHREAD_TYPE PTHREAD_TYPE_FNC back_launch_cmd( void* pP ) { } i++; } - + + /* init */ + hts_init(); + global_opt = opt = hts_create_opt(); + /* run */ - commandReturn = webhttrack_runmain(argc, argv); + commandReturn = webhttrack_runmain(opt, argc, argv); if (commandReturn) { if (commandReturnMsg) free(commandReturnMsg); - commandReturnMsg = strdup(hts_errmsg()); + commandReturnMsg = strdup(hts_errmsg(opt)); } + /* free */ + global_opt = NULL; + hts_free_opt(opt); + hts_uninit(); + /* okay */ commandRunning = 0; @@ -271,47 +283,53 @@ static PTHREAD_TYPE PTHREAD_TYPE_FNC back_launch_cmd( void* pP ) { /* free */ free(cmd); freet(argv); - return PTHREAD_RETURN; + return ; } void webhttrack_main(char* cmd) { commandRunning = 1; - (void)hts_newthread(back_launch_cmd, 0, (void*) strdup(cmd)); + hts_newthread(back_launch_cmd, (void*) strdup(cmd)); } -/* Internal locking */ -HTSEXT_API int htsSetLock(PTHREAD_LOCK_TYPE * hMutex,int lock); +void webhttrack_lock(void) { + hts_mutexlock(&refreshMutex); +} -void webhttrack_lock(int lock) { - htsSetLock(&refreshMutex, lock); +void webhttrack_release(void) { + hts_mutexrelease(&refreshMutex); } -static int webhttrack_runmain(int argc, char** argv) { - hts_init(); - htswrap_add("init",htsshow_init); - htswrap_add("free",htsshow_uninit); - htswrap_add("start",htsshow_start); - htswrap_add("change-options",htsshow_chopt); - htswrap_add("end",htsshow_end); - htswrap_add("preprocess-html",htsshow_preprocesshtml); - htswrap_add("check-html",htsshow_checkhtml); - htswrap_add("loop",htsshow_loop); - htswrap_add("query",htsshow_query); - htswrap_add("query2",htsshow_query2); - htswrap_add("query3",htsshow_query3); - htswrap_add("check-link",htsshow_check); - htswrap_add("check-mime",htsshow_check_mime); - htswrap_add("pause",htsshow_pause); - htswrap_add("save-file",htsshow_filesave); - htswrap_add("save-file2",htsshow_filesave2); - htswrap_add("link-detected",htsshow_linkdetected); - htswrap_add("link-detected2",htsshow_linkdetected2); - htswrap_add("transfer-status",htsshow_xfrstatus); - htswrap_add("save-name",htsshow_savename); +static int webhttrack_runmain(httrackp *opt, int argc, char** argv) { + int ret; + + CHAIN_FUNCTION(opt, init, htsshow_init, NULL); + CHAIN_FUNCTION(opt, uninit, htsshow_uninit, NULL); + CHAIN_FUNCTION(opt, start, htsshow_start, NULL); + CHAIN_FUNCTION(opt, end, htsshow_end, NULL); + CHAIN_FUNCTION(opt, chopt, htsshow_chopt, NULL); + CHAIN_FUNCTION(opt, preprocess, htsshow_preprocesshtml, NULL); + CHAIN_FUNCTION(opt, postprocess, htsshow_postprocesshtml, NULL); + CHAIN_FUNCTION(opt, check_html, htsshow_checkhtml, NULL); + CHAIN_FUNCTION(opt, query, htsshow_query, NULL); + CHAIN_FUNCTION(opt, query2, htsshow_query2, NULL); + CHAIN_FUNCTION(opt, query3, htsshow_query3, NULL); + CHAIN_FUNCTION(opt, loop, htsshow_loop, NULL); + CHAIN_FUNCTION(opt, check_link, htsshow_check, NULL); + CHAIN_FUNCTION(opt, check_mime, htsshow_check_mime, NULL); + CHAIN_FUNCTION(opt, pause, htsshow_pause, NULL); + CHAIN_FUNCTION(opt, filesave, htsshow_filesave, NULL); + CHAIN_FUNCTION(opt, filesave2, htsshow_filesave2, NULL); + CHAIN_FUNCTION(opt, linkdetected, htsshow_linkdetected, NULL); + CHAIN_FUNCTION(opt, linkdetected2, htsshow_linkdetected2, NULL); + CHAIN_FUNCTION(opt, xfrstatus, htsshow_xfrstatus, NULL); + CHAIN_FUNCTION(opt, savename, htsshow_savename, NULL); + CHAIN_FUNCTION(opt, sendhead, htsshow_sendheader, NULL); + CHAIN_FUNCTION(opt, receivehead, htsshow_receiveheader, NULL); + + ret = hts_main2(argc, argv, opt); htsthread_wait_n(1); - hts_uninit(); - return hts_main(argc,argv); - + + return ret; } static int help_server(char* dest_path, int defaultPort) { @@ -337,7 +355,8 @@ static int help_server(char* dest_path, int defaultPort) { fflush(stderr); // if (!smallserver(soc,url,method,data,dest_path)) { - fprintf(stderr, "Unable to create the server: %s\n", strerror(errno)); + int last_errno = errno; + fprintf(stderr, "Unable to create the server: %s\n", strerror(last_errno)); #ifdef _WIN32 closesocket(soc); #else @@ -362,26 +381,29 @@ static int help_server(char* dest_path, int defaultPort) { /* CALLBACK FUNCTIONS */ /* Initialize the Winsock */ -void __cdecl htsshow_init(void) { +void __cdecl htsshow_init(t_hts_callbackarg *carg) { } -void __cdecl htsshow_uninit(void) { +void __cdecl htsshow_uninit(t_hts_callbackarg *carg) { } -int __cdecl htsshow_start(httrackp* opt) { +int __cdecl htsshow_start(t_hts_callbackarg *carg, httrackp* opt) { return 1; } -int __cdecl htsshow_chopt(httrackp* opt) { - return htsshow_start(opt); +int __cdecl htsshow_chopt(t_hts_callbackarg *carg, httrackp* opt) { + return htsshow_start(carg, opt); } -int __cdecl htsshow_end(void) { +int __cdecl htsshow_end(t_hts_callbackarg *carg, httrackp* opt) { return 1; } -int __cdecl htsshow_preprocesshtml(char** html,int* len,char* url_adresse,char* url_fichier) { +int __cdecl htsshow_preprocesshtml(t_hts_callbackarg *carg, httrackp *opt, char** html,int* len,const char* url_address,const char* url_file) { + return 1; +} +int __cdecl htsshow_postprocesshtml(t_hts_callbackarg *carg, httrackp *opt, char** html,int* len,const char* url_address,const char* url_file) { return 1; } -int __cdecl htsshow_checkhtml(char* html,int len,char* url_adresse,char* url_fichier) { +int __cdecl htsshow_checkhtml(t_hts_callbackarg *carg, httrackp *opt, char* html,int len,const char* url_address,const char* url_file) { return 1; } -int __cdecl htsshow_loop(lien_back* back,int back_max,int back_index,int lien_n,int lien_tot,int stat_time, hts_stat_struct* stats) { // appelé à chaque boucle de HTTrack +int __cdecl htsshow_loop(t_hts_callbackarg *carg, httrackp *opt, lien_back* back,int back_max,int back_index,int lien_n,int lien_tot,int stat_time, hts_stat_struct* stats) { // appelé à chaque boucle de HTTrack static TStamp prev_mytime=0; /* ok */ static t_InpInfo SInfo; /* ok */ // @@ -407,7 +429,7 @@ int __cdecl htsshow_loop(lien_back* back,int back_max,int back_index,int lien_n, return 0; /* Lock */ - webhttrack_lock(1); + webhttrack_lock(); if (stats) { stat_written=stats->stat_files; @@ -506,22 +528,22 @@ int __cdecl htsshow_loop(lien_back* back,int back_max,int back_index,int lien_n, } break; case 1: - if (back[i].status==99) { + if (back[i].status==STATUS_WAIT_HEADERS) { strcpybuff(StatsBuffer[index].state,"request"); ok=1; } - else if (back[i].status==100) { + else if (back[i].status==STATUS_CONNECTING) { strcpybuff(StatsBuffer[index].state,"connect"); ok=1; } - else if (back[i].status==101) { + else if (back[i].status==STATUS_WAIT_DNS) { strcpybuff(StatsBuffer[index].state,"search"); ok=1; } - else if (back[i].status==1000) { // ohh le beau ftp + else if (back[i].status==STATUS_FTP_TRANSFER) { // ohh le beau ftp char proto[] = "ftp"; if (back[i].url_adr[0]) { char* ep = strchr(back[i].url_adr, ':'); char* eps = strchr(back[i].url_adr, '/'); int count; - if (ep != NULL && ep < eps && (count = (ep - back[i].url_adr) ) < 4) { + if (ep != NULL && ep < eps && (count = (int) (ep - back[i].url_adr) ) < 4) { proto[0] = '\0'; strncat(proto, back[i].url_adr, count); } @@ -530,8 +552,8 @@ int __cdecl htsshow_loop(lien_back* back,int back_max,int back_index,int lien_n, } break; default: - if (back[i].status==0) { // prêt - if ((back[i].r.statuscode==200)) { + if (back[i].status==STATUS_READY) { // prêt + if ((back[i].r.statuscode==HTTP_OK)) { strcpybuff(StatsBuffer[index].state,"ready"); ok=1; } else if ((back[i].r.statuscode>=100) && (back[i].r.statuscode<=599)) { @@ -570,7 +592,7 @@ int __cdecl htsshow_loop(lien_back* back,int back_max,int back_index,int lien_n, } } - if ((l=strlen(s))<MAX_LEN_INPROGRESS) + if ((l = (int) strlen(s))<MAX_LEN_INPROGRESS) strcpybuff(StatsBuffer[index].name,s); else { // couper @@ -584,7 +606,7 @@ int __cdecl htsshow_loop(lien_back* back,int back_max,int back_index,int lien_n, StatsBuffer[index].sizetot=back[i].r.totalsize; StatsBuffer[index].size=back[i].r.size; } else { // pas de taille prédéfinie - if (back[i].status==0) { // prêt + if (back[i].status==STATUS_READY) { // prêt StatsBuffer[index].sizetot=back[i].r.size; StatsBuffer[index].size=back[i].r.size; } else { @@ -604,12 +626,12 @@ int __cdecl htsshow_loop(lien_back* back,int back_max,int back_index,int lien_n, int parsing=0; if (commandEndRequested) smallserver_setkey("info.currentjob", "finishing pending transfers - Select [Cancel] to stop now!"); - else if (!(parsing=hts_is_parsing(-1))) + else if (!(parsing=hts_is_parsing(opt, -1))) smallserver_setkey("info.currentjob", "receiving files"); else { char tmp[1024]; tmp[0] = '\0'; - switch(hts_is_testing()) { + switch(hts_is_testing(opt)) { case 0: sprintf(tmp, "parsing HTML file (%d%%)",parsing); break; @@ -638,11 +660,12 @@ int __cdecl htsshow_loop(lien_back* back,int back_max,int back_index,int lien_n, int i; for(i=0;i<NStatsBuffer;i++) { if (strnotempty(StatsBuffer[i].state)) { + strc_int2bytes2 strc; smallserver_setkeyarr("info.state[", i, "]", StatsBuffer[i].state); smallserver_setkeyarr("info.name[", i, "]", StatsBuffer[i].name); smallserver_setkeyarr("info.file[", i, "]", StatsBuffer[i].file); - smallserver_setkeyarr("info.size[", i, "]", int2bytes(StatsBuffer[i].size)); - smallserver_setkeyarr("info.sizetot[", i, "]", int2bytes(StatsBuffer[i].sizetot)); + smallserver_setkeyarr("info.size[", i, "]", int2bytes(&strc,StatsBuffer[i].size)); + smallserver_setkeyarr("info.sizetot[", i, "]", int2bytes(&strc,StatsBuffer[i].sizetot)); smallserver_setkeyarr("info.url_adr[", i, "]", StatsBuffer[i].url_adr); smallserver_setkeyarr("info.url_fil[", i, "]", StatsBuffer[i].url_fil); smallserver_setkeyarr("info.url_sav[", i, "]", StatsBuffer[i].url_sav); @@ -656,50 +679,50 @@ int __cdecl htsshow_loop(lien_back* back,int back_max,int back_index,int lien_n, } /* UnLock */ - webhttrack_lock(0); + webhttrack_release(); return 1; } -char* __cdecl htsshow_query(char* question) { +const char* __cdecl htsshow_query(t_hts_callbackarg *carg, httrackp *opt, const char* question) { static char s[]=""; /* ok */ return s; } -char* __cdecl htsshow_query2(char* question) { +const char* __cdecl htsshow_query2(t_hts_callbackarg *carg, httrackp *opt, const char* question) { static char s[]=""; /* ok */ return s; } -char* __cdecl htsshow_query3(char* question) { +const char* __cdecl htsshow_query3(t_hts_callbackarg *carg, httrackp *opt, const char* question) { static char s[]=""; /* ok */ return s; } -int __cdecl htsshow_check(char* adr,char* fil,int status) { +int __cdecl htsshow_check(t_hts_callbackarg *carg, httrackp *opt, const char* adr,const char* fil,int status) { return -1; } -int __cdecl htsshow_check_mime(char* adr,char* fil,char* mime,int status) { +int __cdecl htsshow_check_mime(t_hts_callbackarg *carg, httrackp *opt, const char* adr,const char* fil,const char* mime,int status) { return -1; } -void __cdecl htsshow_pause(char* lockfile) { +void __cdecl htsshow_pause(t_hts_callbackarg *carg, httrackp *opt, const char* lockfile) { } -void __cdecl htsshow_filesave(char* file) { +void __cdecl htsshow_filesave(t_hts_callbackarg *carg, httrackp *opt, const char* file) { } -void __cdecl htsshow_filesave2(char* adr, char* fil, char* save, int is_new, int is_modified,int not_updated) { +void __cdecl htsshow_filesave2(t_hts_callbackarg *carg, httrackp *opt, const char* adr, const char* fil, const char* save, int is_new, int is_modified,int not_updated) { } -int __cdecl htsshow_linkdetected(char* link) { +int __cdecl htsshow_linkdetected(t_hts_callbackarg *carg, httrackp *opt, char* link) { return 1; } -int __cdecl htsshow_linkdetected2(char* link, char* start_tag) { +int __cdecl htsshow_linkdetected2(t_hts_callbackarg *carg, httrackp *opt, char* link, const char* start_tag) { return 1; } -int __cdecl htsshow_xfrstatus(lien_back* back) { +int __cdecl htsshow_xfrstatus(t_hts_callbackarg *carg, httrackp *opt, lien_back* back) { return 1; } -int __cdecl htsshow_savename(char* adr_complete,char* fil_complete,char* referer_adr,char* referer_fil,char* save) { +int __cdecl htsshow_savename(t_hts_callbackarg *carg, httrackp *opt, const char* adr_complete,const char* fil_complete,const char* referer_adr,const char* referer_fil,char* save) { return 1; } -int __cdecl htsshow_sendheader(char* buff, char* adr, char* fil, char* referer_adr, char* referer_fil, htsblk* outgoing) { +int __cdecl htsshow_sendheader(t_hts_callbackarg *carg, httrackp *opt, char* buff, const char* adr, const char* fil, const char* referer_adr, const char* referer_fil, htsblk* outgoing) { return 1; } -int __cdecl htsshow_receiveheader(char* buff, char* adr, char* fil, char* referer_adr, char* referer_fil, htsblk* incoming) { +int __cdecl htsshow_receiveheader(t_hts_callbackarg *carg, httrackp *opt, char* buff, const char* adr, const char* fil, const char* referer_adr, const char* referer_fil, htsblk* incoming) { return 1; } |