Multiple shares in NMDC, revisited

Multiple shares in NMDC have been on topic for years, and will probably continue for years to come. Well, the current approach is simple; use a different port in each hub you’re in. So, if you’re in 5 hubs, the ports used will be (e.g.) 5000, 5001, 5002, 5003 and 5004 when using the CTM/RCM.

That this solution isn’t scalable haven’t bothered people to implement it. Patching a bad protocol does not make the protocol suddendly good. Oh well… People are free to implement away.

Encryption in NMDC, revisited

While cologic exhausted the encryption topic, I want to give a heads up in regards to TLS in NMDC. There are more and more clients that have implemented TLS in NMDC. The current technique is by specifying an ‘S’ in the end of the CTM (after the port, that is). Apparantly, YnHub and Ptokax (if I remember correctly, Verlihub, too) will not block this information and DC++ should be able to operate nicely when specified (even if it doesn’t support it).

Do note that NMDC encryption will not appear in DC++ (unless Jacek changes his mind, which is highly unlikely).

BitTorrent file like functionality with magnet links

One of the competitors of DC is BitTorrent. With BT, one is able to supply torrent files that contain links to multiple files or sets (among other things). (Yeah, over simplification perhaps.)

As torrent files contain knowledge about multiple files, people have been discussing the possiblity to do similar things in DC, and especially with magnet links. However, there is a huge problem; magnet links point to content, rather than “files”. That is, you cannot say “this magnet link point to file a, file b and file c”, but instead you say “this magnet link point to content a”. However, “content a” is not specific to one file, but it can also mean an entire set of files. E.g., the entire selection of vacation photos or the entire Ubuntu source code collection. The “only” problem with that is that clients need to be able to know how such collections’ hashes are calculated (by combination of hashes or whatever that is the protocol).

One might of course also take the BT approach; have an intermediate storage facility (magnet files) that contain a multitude of content pointers (magnet links). (And/Or whatever the storage facility shall have in terms of features.)

Decentralization in its inception?

An important part of the DC community is its ability to change and the ability of the developers to think of new and interesting ways to improve the experience that is Direct Connect. One important section of change is the posibility to take an existing program, like DC++, and change it to ones own liking. One of these clients is StrongDC++, which have features that are not in e.g. DC++ and some features that have migrated its way back to DC++.

A new exiting approach that can only be described as a way to extend Direct Connect is the ability to create a decentralized version of DC, using commands and functionality similar to ADC (and NMDC, albeit only insofar as the initial startup). The proposal have been made by, as can be noted by the page title, the StrongDC++ client and its authors (other people are as well involved).

Basically, the new protocol will be able to operate without a hub, and where one might still be able to share and download with others. However, it should be noted that to get a list of users, one need to connect to a hub and ask for other clients’ support for this feature.

(Note that I’m not saying that this will or will not be a feature incorporated in DC++.)

The 0 downloads crisis

Recently, I heard some shocking news about the Direct Connect network. Probably having nothing better to do, people are inventing conspiracies over nothing but grain of salts.

What I’m talking about is the SourceForge migration process that is happening right as we speak. During this process, the statistics for projects hosted by SourceForge are not being showed anymore. (They are being collected, but because of the undergoing modifications, they are not being printed ). What does this mean ? New file releases ( the process is undergoing for a month or so ) appear as if they have 0 downloads. Don’t worry though, files are being downloaded just like before. And after the migration is done, the actual download number will be updated with the real one.

People have seen in this a conspiracy : “Software like StrongDC or DC++ has a trojan ! The developers have included spyware, exploits ! That’s why nobody downloads them anymore ! ” Such kind of imagination would be really funny if such kind of things wouldn’t affect the normal people.

I would say that even if all the people in the world would agree that nobody would download DC software, there would still be a large number that would do. So for a project that has 10000 downloads a day, it’s impossible to have 0 downloads for a whole month just like that, over the night !

Also, the AVG anti virus reported the last version of StrongDC infected with some kind of Trojan, but the latest version removed the threat warning. At least they have repaired the problem.

So, don’t worry about your favorite p2p program being malevolent, because it’s not the case. People are working really hard to make a good program for you, because this is free and nobody gets paid, they do this just for pleasure. Why would anyone want to be discredited by intentionally adding an exploit or virus to the one program that made them famous around the community ?

No more fragmented downloads

It has already described in a previous post that how downloads work in DC++ and how the temporary files created and copied to the target path when a download finished. That post mentions two kind of possible methods of allocating the necessary disk space during a download :

  • the “normal” method where disk space allocated continuously as the file being downloaded (more precisely when a particular amount of data – the size of the download buffer – is received);
  • and the so called anti-fragmentation method which allocates the whole required disk space for the file before the actual download starts.

According to the DC++ changelog, the possibility of anti-fragmented downloads is added way back in version 0.241. Both methods has advantages and disadvantages : the normal method requires less disk space until the download has been finished but the file can be fragmented and it also can make the whole filesystem fragmented soon. With trying to allocate all the required space in one go, antifragmentation method result files laid on the disk more continuously. Also when the files moved or deleted later, there will be more long contiguous regions of free space left in the file system.

Besides the less fragmented file/file system, anti-fragmentation method has more advantages :

  • It speeds up downloads (especially when downloading large chunks in high speed transfers);
  • Downloads won’t stop because of a disk full error any more – if there’s not enough space they won’t start at all.

Up until the recent versions of DC++ it was the users’ choice what method to use as both of them worked well before segmented downloads introduced in DC++.

If you examine the recent lines of the changelog you will find an entry for version 0.706 saying ”Anti-frag no longer optional – not using it was broken by segmented downloading”. That means the anti-fragmentation method is mandatory from this version, due to the implementation of segmented downloads.

As we said before the only disadvantage of the anti-fragmented method is that it needs more free disk space for the temporary files. This can be some bad news for those DC users who often suffer from lack of disk space. From now, they should take more care of adding large number of files to the download queue. Many of you who use other p2p software should be familiar with this kind of behaviour though, as almost all of them work the very same way.

There is trick that may help to avoid this higher chance of running out of disk space. Its useful for those who have more than one hard disk/partition in their computer. From the DC++ built-in Help :

You can use %[targetdrive] for optional unfinished directory for all target drives. This way you can share the incomplete files among your drives which will result a smaller chance of running out of disk space.
Example : when %[targetdrive]DCUnfinished\ set as unfinished directory, DC++ will create incomplete files in E:\DCUnfinished\ when you download to any target folder located on drive E: and so on…
%[targetrive] option is also useful if you often download larger files to a drive other than where your usual unfinished directory resides. At the end of a successful download, moving a large file from the unfinished folder to its target could be very time and resource consuming, especially when moving files to another partition of the same physical drive.

Also good to know that with anti-fragmented download method, users may face a confusing error message “Could not open target file : Not enough space on the disk” more often. This error can happen only at the start of a download only and it means that the temporary file couldn’t be created. This can cause some confusion for those who isn’t familiar with the way DC++ download files. Unfortunately this is a general error message and it hints that there’s a problem with the target disk space. If the unfinished folder and the download target is not in the same drive this message can appear even if there are plenty of space in the target disk.

The last change is that as of DC++ 0.707 the name of the temporary file omits the .antifrag extension. Why? Because its unnecessary. We know that all of them are anti-fragmented and they always look like filename.ext.TTH.dctmp from now.

When stable become really stable

DC++ 0.707 has just out. Probably this version will be the first from the 0.7xx series which will be considered as a highly stable release – also hopefully a version that many user will feel safe to upgrade to. Altough the two previous versions also marked stable, both of them have a few rather serious problem so users of all 0.70x versions are encouraged to upgrade to 0.707 as soon as possible.

As you may know our client changed a lot over the last year, switching to a new, open source compiler and GUI library was a big step forward even in the ever-changing world of DC++. Introducing segmented downloads needed a lot of additional change and… caused some side effects as well. When DC++ 0.705 and 0.706 marked stable, more and more users downloaded and started to use these new versions and they helped a lot to find and fix a few more existing problems. Some kind bugs are hard to discover when a new version is used only by small group of testers so those numerous reports and feature requests from the community was really great. Now with 0.707 we reached a point where we hope that all the major problems are solved.

Along with several minor things the current GUI changes include :

  • Search results with same TTH are grouped so from now so multiple results for the same file occupy only one row in the search results list. The ‘User’ column shows how many users share the file and their nicks can be seen in the right click menu.
  • The annoying problem of spamming the finished up/downloads windows with all the finished segments is gone.
  • From now you can copy the elements of the hub’s userlist to the clipboard.
  • There’s a new quick access to all favorite hubs by a new drop-down menu in the toolbar.
  • The built-in Help (and some important FAQs in it) are improved and a Get started guide added for beginners as well.
  • Translations are greatly improved (thanks to the respective translators!), even a few more languages added.

Important problems fixed :

  • A possible crash when resuming downloads in non-segmented mode.
  • A security problem, where a remote client could crash your DC++, without you knowing or could do anything about it. (The issue hits all DC++ versions from 0.670 !!)
  • Fixed a severe bug that keeps DC++ from returning correct search results for files and returns no results at all when searched for directories (bug exists from 0.705).
  • Also fixed a problem introduced with 0.706 where resumed downloads can be corrupted if the temporary file deleted or if you try to resume downloads started with an older version of DC++.

So again, its time (and safe) to upgrade! As usual, if no serious bugs are reported, 0.707 will be marked stable within two weeks.

A proposal for ADCS and secure Direct Connect

I have thought about ADCS and how we can improve the world of Direct Connect, and the ADC network.
First, I looked over to see how DC++ ( and clones) create the certificates they use for ADCS connections. The certificate doesn’t seem to be signed, and it’s granted actually to that CID ( client’s unique id ).
I want to propose something about how to make this more secure for both hubs and clients who want to connect ( mostly clients who have certain rights on the hub ). This is intented to replace password-based login.
First of all, let’s start with a hub. After the hub is being set in normal ADC mode, the user needs to switch to ADCS. In this moment, the hub makes a certificate request to a CA [1], that temporarily grants him a certificate signed by this CA, hereby making the hub authoritative for it’s own users.

[1] : I propose the CA to be somebody of trust in Direct Connect, that can also monitor hubs and even revoke certificates for the hubs that don’t respect certain rules ( moral rules, the general direct connect rules…etc ). My first suggestion is a big hublist , with great influence ( these people also monitor hubs regularly ). Once the hub has this certificate from this CA, then users can connect to it safely ( It would be nice if clients could implement the CA’s public key and check the certificate’s signature, and at least warn users on login if the hub is not signed by the CA)

The second step of this thing is to create user accounts on the hub. For this, each client creates a public and a private key. The hub should be able to have an input for a client’s public key, and create a certificate for the client signed by the hub. This way, the client can login to the hub ( in which moment the hub checks if the certificate is signed correctly by itself ) and grant the respective user with all the rights given . No password needed, and the security greatly increases since the client’s private key is never sent anywhere so he’s the only one who can use the certificate, and only the hub who signed it can actually decipher it and accept it.

Hope this post is quite clear, I await some questions if not. I would also like something from hublist developers.

After talking to Flow, I’m not sure how important the CAs for the hubs are. Perhaps someone has a better idea.

New address for DCDev Public Direct Connect Development Hub

The public hub is back up, the new address is :

adc://devpublic.adcportal.com:16591

We are sorry for the time it was down, and we hope it will not happen again too soon.

DC++ 0.706

Another version of DC++ is out. After 0.705 being stable, this version comes up with the primary fixes required by people on launchpad, and it’s getting closer and closer to the old interface functionality.
The most significant changes include :
You can now see if a hub/user is online/offline by the color of the icon.
The transfer color bars are back.
You can now share multiple folders under the same virtual name ( mixes the files ).
Every connection shows now on which hub it started.
Translations are more complete, we thank this way everybody who helped translating.
Among other multiple fixes, we hope this is the best DC++ version to the day.
The same thing goes, if no serious bugs are reported about this version, in two weeks it will be marked stable, so go ahead and download it from sourceforge and have a test. We await your feedback.

Design a site like this with WordPress.com
Get started