From 6460f15fceb69d0eab7d588ada1679c719a56286 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Wed, 9 Aug 2006 22:48:31 +0000 Subject: [PATCH] Better support for "folded" header fields (e.g. subject). Log message when stop semaphore file signaled. Yield while retrieving article list using XOVER. --- exec/newslink.js | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/exec/newslink.js b/exec/newslink.js index 93414dd9a5..3fc70acaa8 100644 --- a/exec/newslink.js +++ b/exec/newslink.js @@ -138,6 +138,15 @@ function unmangle_addr(addr) return addr.replace(/\.remove-\S+-this/,""); } +var yield_calls=0; +function maybe_yield() +{ + yield_calls++; + if(lines_per_yield && (yield_calls%lines_per_yield)==0) { + sleep(yield_length); + } +} + var host; var port=119; var username; @@ -274,6 +283,15 @@ if(slave) { var stop_semaphore=system.data_dir+"newslink.stop"; file_remove(stop_semaphore); +function stop_sem_signaled() +{ + if(file_exists(stop_semaphore)) { + log(stop_semaphore + " signaled"); + return(true); + } + return(false); +} + /******************************/ /* Export and Import Messages */ /******************************/ @@ -299,7 +317,7 @@ for(i in area) { if(!socket.is_connected) break; - if(js.terminated || file_exists(stop_semaphore)) + if(js.terminated || stop_sem_signaled()) break; // printf("%s\r\n",area[i].toString()); @@ -370,7 +388,7 @@ for(i in area) { for(;socket.is_connected && ptr<=last_msg && !js.terminated - && !file_exists(stop_semaphore) + && !stop_sem_signaled() ;ptr++) { if(this.console!=undefined) console.line_counter = 0; @@ -528,6 +546,7 @@ for(i in area) { while((rsp=readln())!='.' && socket.is_connected && !js.terminated) { if(rsp) article_list.push(parseInt(rsp)); + maybe_yield(); } printf("%u new articles\r\n", article_list.length); } @@ -536,7 +555,7 @@ for(i in area) { for(;socket.is_connected && ptr<=last_msg && !js.terminated - && !file_exists(stop_semaphore) + && !stop_sem_signaled() ;ptr++) { if(this.console!=undefined) console.line_counter = 0; @@ -553,16 +572,15 @@ for(i in area) { } body=""; header=true; - var hdr={ from: "", to: newsgroup, subject: "", id: "" }; var line; var line_counter=0; var recv_lines=0; var file=undefined; + var hfields=[]; var md5; while(socket.is_connected && !js.terminated) { - if(recv_lines && lines_per_yield && (recv_lines%lines_per_yield)==0) - sleep(yield_length); + maybe_yield(); line = socket.recvline(512 /*maxlen*/, 300 /*timeout*/); @@ -585,7 +603,13 @@ for(i in area) { } if(header) { - parse_news_header(hdr,line); // from newsutil.js + if((line.charAt(0)==' ' || line.charAt(0)=='\t') && hfields.length) { + while(line.charAt(0)==' ' // trim prepended spaces + || line.charAt(0)=='\t') + line=line.slice(1); + hfields[hfields.length-1] += line; // folded header field + } else + hfields.push(line); continue; } @@ -707,6 +731,12 @@ for(i in area) { //print(line); } + + // Parse the message header + var hdr={ from: "", to: newsgroup, subject: "", id: "" }; + for(h in hfields) + parse_news_header(hdr,hfields[h]); // from newsutil.js + if(hdr["nntp-posting-host"]!=undefined && (system.trashcan("ip", hdr["nntp-posting-host"]) || system.trashcan("ip-silent", hdr["nntp-posting-host"]))) { -- GitLab