AirDC++ nano is a high-performance text-mode client for sharing, chatting and downloading in ADC and NMDC hubs, which can be run on Linux servers. It uses the same core than the Windows version so you can take benefit of features like multiple per-user connections, share profiles, IPv6, multithreaded hashing etc. The user interface is a modified version of the one used by nanodc.
1. Installation
These instructions are targeted for Debian (Jessie, 8.0+) and Ubuntu (14.04) but the client has been successfully installed on various other operating systems as well.
NOTE:
You should use the UTF-8 locale with the client. Special characters won't be displayed correctly otherwise.
Install the compiler (if you don't have one)
Debian
apt-get install gcc g++
Ubuntu
sudo apt-get install gcc g++
Supported compilers:
- GCC 4.8+
- Clang 3.3+
Install the required packages
Debian Jessie
apt-get install libbz2-dev libncursesw5-dev scons zlib1g-dev libglib2.0-dev libssl-dev libstdc++6 libminiupnpc-dev libnatpmp-dev libtbb-dev libgeoip-dev libboost1.55-dev libboost-regex1.55-dev libboost-thread1.55-dev libboost-signals1.55-dev libboost-system1.55-dev libleveldb-dev
Ubuntu 14.04
sudo apt-get install libbz2-dev libncursesw5-dev scons zlib1g-dev libglib2.0-dev libssl-dev libstdc++6 libminiupnpc-dev libnatpmp-dev libtbb-dev libgeoip-dev libboost1.55-dev libboost-regex1.55-dev libboost-thread1.55-dev libboost-signals1.55-dev libboost-system1.55-dev libleveldb-dev
-
Redhat/Fedora
yum install gcc-g++ bzip2-devel ncurses-devel scons zlib-devel glib2-devel openssl-devel libstdc++-devel miniupnpc-devel libnatpmp-devel tbb-devel geoip-devel boost-devel leveldb-devel
Note that the natpmp library is not mandatory (it's only an alternative way to map ports with NAT-PMP capable routers in addition to UPnP). TBB is also optional and it's available only on x86 system architectures.
Download the client
2. Release
Download the package
wget https://github.com/airdcnano/airdcnano/releases/download/1.06/airdcnano-1.06.tar.gz
- If you get an error related to the certificate, ensure that you have the package "ca-certificates" installed.
Extract it
tar zxvf airdcnano-1.06.tar.gz
cd airdcnano-1.06
3. Git
Install Git
Debianapt-get install git
sudo apt-get install git
Get the source
git clone https://github.com/airdcnano/airdcnano.git
cd airdcnano
Compile
scons -j2
-j2 means that the client is compiled by using 2 threads. It's a good idea to replace the value with the number of available CPU cores. NOTE: each compiler thread requires about 1 GB of free RAM and the compiler will crash if it runs out of memory.
Compiling times will vary; it takes about a minute with a fast Haswell CPU and almost an hour with a slow dual-core Atom with GCC. Clang will usually cut the compiling times in half.
Install
Debian:
scons install
Ubuntu:
sudo scons install
Run the client
airdcnano
There's a short wizard in the beginning which helps you to set up the required settings.
4. Keyboard shortcuts
Any window
Key | Description |
---|---|
Ctrl+X | Close the window |
Alt+[1-9] | Change the active tab |
Alt+Left/Right | Switch to the next/previous tab |
Ctrl+E | Refresh share |
Ctrl+H | Open favorites |
Ctrl+L | Clear window |
Ctrl+P | Open public hubs |
Ctrl+S | Open log window |
Ctrl+T | Open transfers |
Ctrl+Q | Open queue |
Hub
Key | Description |
---|---|
Ctrl+R | Reconnect |
Public hubs
Key | Description |
---|---|
f | Add to favorites |
c | Connect |
s | Sort items |
h | Set the number of the hublist to download |
d | Download the hub list |
Filtering hubs
Key | Description |
---|---|
s | Description |
a | Address |
u | Users |
m | Maximum share |
n | Minimum share |
Favorite hubs
Key | Description |
---|---|
c | Connect to the hub |
d | Delete the hub |
D | Delete the hub without confirmation |
e | Edit the selected hub |
n | Add a new favorite hub |
m | Move the select hub to a new position in the list |
<space> | Toggle autoconnect |
Search
Key | Description |
---|---|
b | Browse user's file list from the selected directory |
d | Download selected item |
D | Download selected item to a specific folder |
s | Download directory |
S | Download directory to |
M | Match queue |
r | Search |
Search result filtering
Key | Description |
---|---|
l | Toggle free slots-only results |
n | Minimum size |
m | Maximum size |
e | File extension |
f | Textual filter |
c | Clear search results |
Queue
Key | Description |
---|---|
a | Search bundle for alternates |
i | Recheck bundle integrity: re-adds corrupted file segments for downloading, detects already downloaded segments/files |
p | Set bundle priority (0-6) |
r | Remove bundle from queue |
R | Remove bundle and all its finished files from queue |
m | Move the bundle and all its finished files to a new location |
S | Rescan a failed bundle |
F | Force a failed bundle to be added in share |
Transfers
Key | Description |
---|---|
b | Browse file list |
m | Send private message |
F | Force connection |
r | Remove source from queue (all files) |
R | Remove file from queue |
c | Disconnect |
File lists
Key | Description |
---|---|
d | Download selected item to the default download folder |
D | Download selected item to a custom folder |
r | Reload the current directory |
<enter>/<right arrow> | Enter the selected directory |
<left arrow> | Go to parent directory |
File list filtering
Key | Description |
---|---|
n | File/directory name |
5. Commands
General Commands
Command | Parameters | Description |
---|---|---|
away | Enable away mode | |
cancelhash | Stop hashing | |
clear | Clear the screen. | |
connect | <address> [<share profile>] | Connect to a hub (optionally with the given share profile). |
connectioninfo | Display the current status of incoming connection | |
dcset | <key> [<value>] | You can view or change DC++ core settings with /dcset command. /dcset without any arguments displays all the settings. /dcset <key> <value> sets <key> to <value>. /dcset <key> will display the current value of the key |
dcreset | <key> | Reset a setting to its default value |
help | View the list of help command | |
motd | Print information about shared files, nanodc version and connection settings (executed when the client is started) | |
nick | <nick> | Change the default nick |
open | <favorites|hublist|queue|syslog|transfers> | Open the specified tab (or make it active) |
optimizedb | Remove hash database entries for files that aren't currently in share | |
refresh | [<path/virtual name>] | Refresh the share or a specific path/virtual directory |
search | <string/TTH> | Search files |
share | <add|remove|list> | add: Add a new directory in share. Arguments: <path> <virtual name> [<profile>] [<incoming>]
Example: /share add Incoming /home/ftp/ myshareprofile 1 remove: Remove a directory from the share (or from a profile). Arguments: <path> [<profile>] list: List shared folders (or folders in the specified profile). Arguments: [<profile>] |
shareprofile | <add|remove|rename|list> |
add: Add a new profile with the given name. Arguments: <profile name> remove: Remove the given profile. Arguments: <profile name> rename: Rename the selected profile. Arguments: <current name> <new name> list: List all share profiles |
quit | Quit | |
verifydb | Remove unused entries from the hash database and verify the integrity of the data | |
wc | Close current window | |
window | <list|close|move|prev|next|[1-X]> |
list: list the open tabs close: close the current tab (same as /wc) move: move the window to a give position. Arguments: first|last|prev|next|[1-X] prev: switch to the previous window (shortcut: Alt+left) next: switch to the next window (shortcut: Alt+right) |
Hub Commands
Command | Parameters | Description |
---|---|---|
browse | <nick> | Browse file list from the specified user |
fav | Add the hub in favorites. | |
msg | <nick> [<msg>] | Send a private message to the specified nick (or open an empty PM tab) |
info | <nick> | Show various information about the user (description, tag etc.) |
names | List all users in the hub | |
reconnect | Reconnect to the hub (shortcut: Ctrl+r) | |
showjoins | Show joining/parting users in the chat |
6. Configuration
6.1. ~/.airdc++/.nanodcrc
Example of ~/.airdc++/.nanodcrc file:
# ~/.airdc++/.nanodcrc # block the message if the first line includes block_messages = http://;www. # save the file every time something is edited # otherwise it will be saved on exit save_on_edit = true # ignore all messages from these nicks ignore_nicks = # figure it out, sherlock hilight_words = nanodc;xcow # timestamp format timestamp_format = %H:%M:%S # /command or :command command_char = / # whether or not to show nicklist when joined to the hub show_nicklist = true # true: [17:10:01] -!- Kyösti [dyn63-253.dsl.spy.dnainternet.fi] has left the hub # false: [17:10:01] -!- Kyösti [83.102.63.253] has left the hub resolve_ips = true # how many lines to save in private message/hub windows lastlog_size = 1000
6.2. AirDC++ core configuration
Use "/dcset setting value" to change a setting, where "setting" is one of the settings that are listed below.
General
Setting | Explanation |
---|---|
profile |
Settings profile, used to optimize various default settings
|
nick | Your nick |
description | Your decription |
Your email address | |
ul_speed | Upload speed (Mbit/s) |
dl_speed | Download speed (Mbit/s) |
away_message | Message to send when receiving a private message when away mode is enabled |
away_idle_time | Idle time in minutes before enabling the away mode automatically |
away_no_bots | Don't send away message to bots |
nmdc_encoding | Character encoding to use in NMDC hubs |
Downloads
Setting | Explanation |
---|---|
dl_dir |
Default download directory |
temp_dir | Directory to use for temp files while downloading (not used when "temp_use_dest" is enabled) |
temp_use_dest | Put temp files in the final destination directory |
add_finished | Add finished bundles downloaded in share as soon as they finished (when downloading in a shared directory) |
finished_no_hash | Don't hash instantly shared bundles (or perform SFV check for them) |
segmented_dl | Enable segmented downloads |
min_segment_size | Minimum segment size (KiB) |
new_segment_min_speed | Don't begin new segment if the file speed exceeds this value (KiB/s) |
allow_slow_overlap | Allow a fast source to overlap slower ones when there is nothing else to download |
Search matching options
Setting | Explanation |
---|---|
auto_add_sources |
Automatically add sources for queued files when receiving a matching search result |
alt_search_auto | Automatically search for alternate sources for queued bundles (requires auto_add_sources to be enabled) |
alt_search_max_sources | Don't perform automatic searches for bundles with more sources than this (average sources per file) |
max_sources_match_queue | Maximum bundle sources to match the whole bundle for search results |
Skipping options (queuing)
Setting | Explanation |
---|---|
dont_dl_shared |
Don't queue files that exist in share already |
dont_dl_queued | Don't queue files that exist in queue already |
dupe_min_size | Skip the dupe check for files smaller than this (KiB) |
skip_zero_byte | Don't download empty files |
dl_skiplist | Don't download files matching this pattern (wildcards) |
dl_skiplist_regex | Use regex format for the download skiplist |
Proxies
Setting | Explanation |
---|---|
http_proxy | Default download directory |
outgoing_mode |
|
socks_server | SOCKS5 server |
socks_user | |
socks_password | |
socks_port | |
socks_resolve | Use the SOCKS5 server to resolve host names |
Incoming connection
Connection4_-prefixed entries are for IPv4 connectivity and connection6_* for IPv6.
Setting | Explanation |
---|---|
connection4_auto connection6_auto |
Detect the connectivity mode and settings automatically for the given protocol |
connection4_bind connection6_bind |
Bind address (IP, use the tab key for suggestions) |
connection4_mode connection6_mode |
|
connection4_ip connection6_ip |
External IP address |
tcp_port | TCP port (transfers) |
udp_port | UDP port (mainly searching) |
tls_port | Port for encrypted transfers (TCP, must differ from the transfer port) |
Download limits
Setting | Explanation |
---|---|
dl_auto_limits |
Detect the download limits based on the configured download speed (dl_speed) |
dl_slots |
Maximum simultanous download connections |
dl_max_slot_speed | Don't exceed new downloads if the total speed exceeds this value (KiB/s, 0=disabled) |
dl_highest_prio_slots | Number of extra slots for bundles/files using the highest priority |
Upload limits
Setting | Explanation |
---|---|
ul_auto_limits | Detect some of the upload limits based on the configured upload speed (ul_speed) |
ul_grant_speed |
Grant a new slot if the total speed is lower than this (KiB/s) |
ul_max_granted | Maximum number of automatically granted slots |
ul_slots | Number of upload slots |
ul_minislot_size | Grant a minislot for files smaller than this (KiB) |
ul_minislot_ext | Grant a minislot for the given file extensions |
Transfer rate limiting
Setting | Explanation |
---|---|
limit_ul_max | Maximum upload speed |
limit_dl_max |
Maximum download speed |
limit_use_alt | Use alternate limits for the given time period |
limit_alt_start_hour | Start hour for alternate limits (0-23) |
limit_alt_end_hour | End hour for alternate limits (0-23) |
limit_ul_alt_max | Maximum upload speed (alternate hours) |
limit_dl_alt_max | Maximum download speed (alternate hours) |
limit_use_with_auto_values | Count the various upload and download limits based on the limiter values (if enabled) |
Per-user connection limits
Setting | Explanation |
---|---|
mcn_auto_limits | Detect the per-user limits automatically from the line speed |
mcn_down |
Maximum download connections per user |
mcn_up | Maximum upload connections per user |
Hashing options
Setting | Explanation |
---|---|
max_hash_speed | Maximum hashing speed per hasher (MiB/s) |
max_total_hashers |
Maximum number of total hashing threads |
max_vol_hashers | Maximum hashers per volume (recommended to keep at 1 unless the hashing speed is CPU-bound) |
report_each_hashed_file | Report each hashed file in the system log |
Refreshing options
Setting | Explanation |
---|---|
refresh_time | Common refresh time for all directories (0=disabled) |
refresh_time_incoming |
Alternative refresh time to use for directories marked as "incoming" (0=disabled) |
refresh_startup | Refresh the share after the client has been started |
refresh_report_scheduled_refreshes | Report in system log when a scheduled refresh has started and ended |
Sharing options
Setting | Explanation |
---|---|
share_skiplist | Don't share files matching this pattern (wildcards) |
share_skiplist_regex |
Use regex format for the share skiplist |
share_hidden | Share hidden files |
share_no_empty_dirs | Don't show empty directories in share |
share_no_zero_byte | Don't show empty files in share |
share_max_size | Don't share files exceeding this size limit (MiB) |
share_follow_symlinks | Report symbolic links when iterating through the files on disk |
share_report_duplicates | Report files with the same case-insensitive path when generating file lists |
share_report_skiplist | Report files that aren't shared because they match the share skiplist |
Logging options
Setting | Explanation |
---|---|
log_dir | Location to save the logs |
log_main |
Log mainchat messages |
log_main_file | |
log_main_format | |
log_pm | Log private messages |
log_pm_file | |
log_pm_format | |
log_downloads | Log file downloads |
log_downloads_file | |
log_downloads_format | |
log_uploads | Log file uploads |
log_uploads_file | |
log_uploads_format | |
log_syslog | Log system messages |
log_syslog_file | |
log_syslog_format | |
log_status | Log status messages in hubs |
log_status_file | |
log_status_format | |
log_list_transfers | Log file list transfers (uploads and downloads, full file lists only) |
single_log_per_cid | Use a single log file per CID in ADC hubs even if the nick or other file naming variables differ in different hubs |
Log file names: The file name to use for the log file (relative to the main log path, may contain subdirectories).
Histories
Setting | Explanation |
---|---|
history_search_max | Maximum number of previous search words to save (those can be accessed with tab when using the /search command) |
history_search_clear_exit |
Clear the search history on exit |
history_download_max | Maximum number of previous custom download locations to save (can be accessed with tab in an empty download location prompt) |
history_download_clear_exit | Clear the download location history on exit |
history_last_pm_lines | Maximum number of old chat lines to display when opening a private message window |
Tabs
Setting | Explanation |
---|---|
open_transfers | Open the transfers tab on startup |
open_hublist |
Open the hublist tab on startup |
open_favorites | Open the favorites tab on startup |
Advanced
Setting | Explanation |
---|---|
socket_read_buffer | Bytes |
socket_write_buffer |
Bytes |
buffer_size | Write buffer size (KiB) |
compress_transfers | Allow dynamic compression for transfers |
max_compression | Maximum compression level (0-9) |
tls_mode |
Encryption mode for transfers
|
bloom_mode |
Bloom filter mode. Disabled by default since sending the filter with a large share may freeze the chat for a while and increases the upload bandwidth usage.
|
accept_failovers_fav | Accept failover addressed sent by favorite hubs that can be used when the hub can't be accessed via the main address |
7. Crash?
Post the generated crashlog to https://github.com/airdcnano/airdcnano/issues
8. Deadlock?
Note: you need to have the package "gdb" installed before following these instructions.
$ cat ~/.airdc++/airdcnano.pid
[number]
gdb
attach [number]
thread apply all bt full
Post the full output to https://github.com/airdcnano/airdcnano/issues