From 4a672c842816733862e7a75960697f55f5bed740 Mon Sep 17 00:00:00 2001 From: Yorhel Date: Tue, 9 Aug 2011 08:24:04 +0200 Subject: [PATCH] Ncdc 0.5 & 0.6 update + larger user guide ...I should perhaps commit more often. --- dat/ncdc-changelog | 22 +++++ img/ncdcstart.png | Bin 18117 -> 17173 bytes index.cgi | 205 +++++++++++++++++++++++++++++++++++---------- 3 files changed, 185 insertions(+), 42 deletions(-) diff --git a/dat/ncdc-changelog b/dat/ncdc-changelog index c4ded50..de17052 100644 --- a/dat/ncdc-changelog +++ b/dat/ncdc-changelog @@ -1,3 +1,25 @@ +0.6 - 2011-08-08 + - Added file searching, through a /search command + - Added tab to display the search results + - Listen for incoming messages on UDP in active mode + - Allow specifying a hub address with /open + - Fixed case-sensitivity of shared files + - Various bugfixes and other improvements + +0.5 - 2011-08-02 + - Downloaded files are now TTH-checked + - Added download queue priorities + - Download queue items are automatically disabled on error + - Improved error handling and reporting for downloads + - Added download_slots setting + - Use a separate thread to load other users' file list + - Improved /gc to also clean up download queue related data + - Decreased memory usage for large file lists + - Improved error handling with sendfile() + - Fixed downloading in passive mode on ADC hubs + - Fixed adding a dir to the download queue while connected to the user + - Fixed segfault when the userlist is open while disconnecting from a hub + 0.4 - 2011-07-23 - Added file downloading support. WARNING: Downloaded files are not TTH checked at this moment. diff --git a/img/ncdcstart.png b/img/ncdcstart.png index 0255253a3f9aaecabfdfb0655649737dd00b9ebb..ee5e95f014371043c304d2fa6c67c99fcfa45a8c 100644 GIT binary patch literal 17173 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 Y3OkgyKJgRacWIF1WR#?fC5_(vH}UjY=Kufz diff --git a/index.cgi b/index.cgi index e992a0d..be7f522 100755 --- a/index.cgi +++ b/index.cgi @@ -15,6 +15,7 @@ TUWF::register( qr{ncdu/changes} => \&ncduchangelog, qr{ncdu/man} => \&ncdumanual, qr{ncdc} => \&ncdc, + qr{ncdc/faq} => \&ncdcfaq, qr{ncdc/guide} => \&ncdcguide, qr{ncdc/changes} => \&ncdcchangelog, qr{tuwf} => \&tuwf, @@ -51,6 +52,8 @@ sub home { E; end; h2 'Updates'; + b '2011-08-08'; txt ' ncdc 0.6 released & user guide updated'; br; + b '2011-08-02'; txt ' ncdc 0.5 released!'; br; b '2011-07-23'; txt ' ncdc 0.4 released!'; br; b '2011-07-15'; txt ' ncdc 0.3 released!'; br; b '2011-06-27'; txt ' ncdc 0.2 released!'; br; @@ -182,16 +185,15 @@ sub ncdc { $s->htmlHeader(title => 'NCurses Direct Connect', page => 'ncdc'); p; lit <<' E;'; - 2003 called. They wanted me to write a text-mode alternative to DC++.
Ncdc is a modern and lightweight direct connect client with a friendly ncurses interface. E; end; h2 'Current Status'; - p 'Ncdc is currently still in development, and still lacks many of the - features one would expect from a DC client. The following is a list of - features that have been implemented so far:'; + p 'Ncdc is currently still in development, and therefore lacks a few features + one would expect from a full-blown DC client. The following is a list of + features that have been implemented so far:'; ul; li 'Connecting to multiple hubs at the same time,'; li 'Chatting and private messaging,'; @@ -201,20 +203,18 @@ sub ncdc { li 'File uploading in active and passive mode,'; li 'Connections and download queue management,'; li 'File list browsing,'; - li 'Single-source file downloading.'; + li 'Single-source and TTH-checked file downloading,'; + li 'Searching for files.'; end; h2 'Try it out'; p; - b 'Latest version:'; txt ' 0.4 ('; - a href => '/download/ncdc-0.4.tar.gz', 'download'; + b 'Latest version:'; txt ' 0.6 ('; + a href => '/download/ncdc-0.6.tar.gz', 'download'; txt ' - '; a href => '/ncdc/changes', 'changes'; txt ' - '; a href => '/download/ncdc.md5', 'md5'; txt ' - '; a href => '/download/ncdc.sha1', 'sha1'; txt ')'; br; - txt 'The current version might be slightly awkward to use and still lacks - many features. Nonetheless, it\'s already quite useful as a chat program - and upload server.'; br; txt 'You can also get the latest development version of ncdc from '; a href => 'http://g.blicky.net/ncdc.git/', 'this git repository'; txt '. The README includes instructions to build ncdc.'; br; @@ -229,43 +229,94 @@ sub ncdc { These dependencies should be easy to satisfy. Depending on your system, you may have all of these installed already.
Ncdc has been developed on a recent Arch Linux installation and has been - tested on FreeBSD 8.2 and Debian Squeeze. It should be fairly trivial to - port to other POSIX-like systems.
+ tested on FreeBSD 8.2 and Debian Squeeze. I have also received reports from + people who successfully used it on Mac OS X, Ubuntu and CentOS. It should + be fairly trivial to port to other POSIX-like systems.
Ncdc is entirely written in C and available under a liberal MIT license. E; end; + $s->htmlFooter; +} - h2 'Quick Q&A'; - ul; - li; txt 'What about other text-mode clients?'; br; - a href => 'http://corsair626.no-ip.org/microdc/', 'microdc2'; - txt ' - A rather nice client, yet not exactly there. It\'s limited to - connecting to a single hub, hasn\'t been updated since 2006, and the - readline interface is slightly awkward to use.';br; - a href => 'http://sourceforge.net/projects/nanodc/', 'nanodc'; - txt ' - Can\'t comment much on this, except maybe that rocket science is - perhaps easier than getting nanodc to compile.'; br; - txt 'LDCC - Uses DCTC as backend and an interface based on TurboVision. - All mentioned projects are dead: neither LDCC, DCTC nor TurboVision are - seeing any recent development.'; br;br; - end; - li; txt 'Can ncdc use the hash data or configuration from an existing DC++ installation?'; br; - txt 'No, ncdc uses its own configuration and hash storage directory. - However, on popular demand I could write a conversion utility to transfer - the hash data from other clients to ncdc\'s format.'; br;br; - end; - li; txt 'What protocol features does ncdc support?'; br; - txt 'For ADC: Only BASE, RF, TIGR and BZIP so far. For NMDC:'; br; - txt 'Hub: NoGetINFO and NoHello.'; br; - txt 'Client: MiniSlots, XmlBZList, ADCGet, TTHL and TTHF.'; br; - txt q|That is pretty much everything you'd expect any modern client to - have. Note that ncdc does not support some of the older protocol - features, like $Get, $GetZBlock, $CHUNK, $Cancel or non-XML file lists. I - am not aware of an other up-to-date client that still uses any of these - features.|; - end; + +sub ncdcfaq { + my $s = shift; + $s->htmlHeader(title => 'Ncdc Q&A', page => 'ncdc', tab => 'faq'); + p 'On this page I collect several questions that people may have and try to + answer them. If you have a question that is not covered here, don\'t hesitate + to ask!'; + div class => 'pod'; + + h2 'What about other text-mode clients?'; + p; + a href => 'http://corsair626.no-ip.org/microdc/', 'microdc2'; + txt ' - A rather nice client, yet not exactly there. It\'s limited to + connecting to a single hub, hasn\'t been updated since 2006, and the + readline interface is slightly awkward to use.'; br; + a href => 'http://sourceforge.net/projects/nanodc/', 'nanodc'; + txt ' - Can\'t comment much on this, except maybe that rocket science is + perhaps easier than getting nanodc to compile.'; br; + txt 'LDCC - Uses DCTC as backend and an interface based on TurboVision. + All mentioned projects are dead: neither LDCC, DCTC nor TurboVision are + seeing any recent development.'; end; + h2 'Why did you start from scratch? Why not use the DC++ core?'; + p; + lit <<' E;'; + There are many reasons why I chose not to use code from existing projects, + but all of them boil down to the following two: 1) I am a control freak, + and 2) personal preferences.
+ That is the short answer. The long answer will require a full article, + and I don't feel like writing that much at this point. >_> + E; + end; + + h2 'Can ncdc use the hash data or configuration from an existing DC++ installation?'; + p 'No, ncdc uses its own configuration and hash storage directory. + However, on popular demand I could write a conversion utility to transfer + the hash data from other clients to ncdc\'s format.'; + + h2 'Does ncdc support TLS?'; + p; + lit <<' E;'; + Not natively, at this moment at least. As a temporary solution, it is + possible to use
stunnel to connect to + TLS-enabled hubs. I have tested this to work for ADC, but have no + experience with TLS on NMDC hubs. This trick does not allow encrypted + client-to-client connections, so your file transfers will remain + unencrypted.
+ The following example stunnel configuration is what I use to connect to the + DC Development hub:

+
[dcdev]
client = yes
accept = 127.0.0.1:16591
connect = devpublic.adcportal.com:16591
+

The URL `adc://127.0.0.1:16591/' can then be used to connect to the hub + from within ncdc. + E; + end; + + h2 'Does ncdc support UPnP?'; + p; + lit <<' E;'; + Again, not natively. However, it is possible to use this + script and manually keep a port open using a cron job. I have no + experience with this myself, though. I just run ncdc directly on my router. :-) + E; + end; + + h2 'What protocol features does ncdc support?'; + p; + lit <<' E;'; + For ADC: Only BASE, RF, TIGR and BZIP so far.
+ For NMDC: NoGetINFO, NoHello, MiniSlots, XmlBZList, ADCGet, TTHL and TTHF.
+ That is pretty much everything you'd expect any modern client to have. Note + that ncdc does not support some of the older protocol features, like $Get, + $GetZBlock, $CHUNK, $Cancel or non-XML file lists. I am not aware of an + other up-to-date client that still uses any of these features. + E; + end; + + end 'div'; $s->htmlFooter; } @@ -321,7 +372,7 @@ sub ncdcguide { txt '/set active_port '; b '34194'; br; txt '/set active '; b 'true'; end; - p "And make sure the port you specified is properly forwarded."; + p "And make sure the port you specified is properly forwarded for both TCP and UDP."; h2 'Connecting to hubs'; p "This is where ncdc differs a bit from other DC or even IRC clients. To @@ -377,6 +428,75 @@ sub ncdcguide { b 'm'; txt ' PM the selected user.'; br; b 'b'; txt ' browse the selected users\' list.'; br; end; + + h2 'Searching'; + p "To search for files to download, use the '/search' command:"; + pre class => 'code'; + lit '/search gentoo'; + end; + p style => 'font-size: 9px; padding-left: 25px; padding-bottom: 3px', + "My apologies for using such a generic search term as example. It just + happens to be one that doesn't advocate piracy yet gives some results on + most hubs."; + p "See '/help search' for more options. A new tab will be opened with the + search results, where the following keys can be used:"; + pre class => 'code'; + b 'j/k'; txt ' the usual down/up keys.'; br; + b 'b'; txt ' browse users\' file list.'; br; + b 'd'; txt ' add selected file to download queue.'; br; + b 'f'; txt ' find user in the user list.'; br; + b 'h'; txt ' show/hide hub column.'; br; + b 'u'; txt ' order by username.'; br; + b 's'; txt ' order by file size.'; br; + b 'l'; txt ' order by available slots.'; br; + b 'n'; txt ' order by file name.'; br; + end; + + h2 'Browsing file lists'; + p "If you were paying attention to the previous sections, you would have + noticed that three ways to open a file list have been mentioned: The global + Alt+o key to open your own, the 'b' key in the user list to browse a users' + list, and a similar 'b' key for the search results. There is a fourth + method, and that is the '/browse' command, see '/help browse' for details + on that one. Regardless of how you open a file list, the following keys + are available while browsing one:"; + pre class => 'code'; + b 'j/k'; txt ' the usual down/up keys. (this is getting boring)'; br; + b 'l'; txt ' open selected directory.'; br; + b 'h'; txt ' open parent directory.'; br; + b 'd'; txt ' add selected file to download queue.'; br; + end; + + h2 'Download queue management'; + p "Both the the search results and the file list browser have a 'd' key to + add a file to the download queue. Any queud files will be downloaded + automatically and this process will usually not require any further input. + Nonetheless, there is a download queue manager which can be accessed with + the global Alt+q key. The following keys can be used on this tab:"; + pre class => 'code'; + b 'j/k'; txt ' again, the down/up keys.'; br; + b 'f'; txt ' find user in the user list.'; br; + b 'd'; txt ' remove selected file from the queue.'; br; + b 'c'; txt ' find the related download connection in the connection list.'; br; + b '+'; txt ' increase download priority.'; br; + b '-'; txt ' decrease download priority.'; br; + end; + p "A little note on the download priorities: if you see that an item has + 'ERR' as priority, this means that something went wrong while downloading. + In these cases you have two choices: remove the item from the queue ('d' + key), or tell ncdc to try it again by clearing the error status (that is, + by increasing the priority. That is, the '+' key.)."; + + h2 'Connection management'; + p 'Last but not least, you can also monitor your currently active uploads and + downloads with the connections tab, which can be accessed with Alt+n. Keys:'; + pre class => 'code'; + b 'j/k'; txt ' guess.'; br; + b 'd'; txt ' disconnect selected connection.'; br; + b 'i'; txt ' toggle information box.'; br; + b 'f'; txt ' find user in the user list.'; br; + b 'q'; txt ' find item in the download queue.'; br; + end; $s->htmlFooter; } @@ -884,6 +1004,7 @@ sub htmlHeader { if($o{page} eq 'ncdc') { div id => 'mtabs'; a href => '/ncdc', !$o{tab} ? (class => 'sel') : (), 'main'; txt ' '; + a href => '/ncdc/faq', $o{tab} eq 'faq' ? (class => 'sel') : (), 'Q&A'; txt ' '; a href => '/ncdc/guide', $o{tab} eq 'guide' ? (class => 'sel') : (), 'user guide'; txt ' '; a href => '/ncdc/changes', $o{tab} eq 'changes' ? (class => 'sel') : (), 'changelog'; txt ' '; end;