1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
|
2006-04-21 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To add some useful information to the exception message:
* src/SocketCore.cc : Updated messages.
* src/SegmentMan.cc :
* src/TorrentMan.cc : Updated messages.
* src/MultiDiskWriter.cc : Updated messages.
* src/Util.cc : Updated messages.
* src/AbstractDiskWriter.cc : Updated messages.
* src/PreAllocationDiskWriter.cc : Updated messages.
* src/message.cc : Added new messages. Updated some messages.
* src/TrackerWatcherCommand.h (MIN_PEERS): New definition.
* src/TrackerWatcherCommand.cc (execute): Use MIN_PEERS.
Updated threshold from 30 to 15.
* src/AbstractDiskWriter.h (filename): New variable.
* src/AbstractDiskWriter.cc (openExistingFile): Assigned filename.
(createFile): Assigned filename.
* src/main.cc: Updated the help message for http-auth-scheme.
* Release 0.4.0
2006-04-20 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To add TrackerUpdateCommand with which replaces
CompactTrackerResponseProcessor:
* src/TrackerWatcherCommand.h (req): Removed.
* src/TrackerWatcherCommand.cc (execute): Send a request to tracker
if the number of peer connections are less than 30.
* src/ByteArrayDiskWriter.h (readData): Implemented.
* src/SegmentMan.h (diskWriter): New function.
* src/SegmentMan.cc (init): Added a call to diskWriter->closeFile()
* src/main.cc : Removed #include "CompactTrackerResponseProcessor.h"
(main): Use TrackerUpdateCommand.
* src/TorrentMan.h (CompactTrackerResponseProcessor): Removed.
(req): New variable.
(setTrackerResponseProcessor): Removed.
(getTrackerResponseProcessor): Removed.
(processTrackerResponse): Removed.
* src/DownloadEngine.h (diskWriter): Removed.
* src/TorrentDownloadEngine.cc (afterEachIteration): Removed a call
to torrentMan->processTrackerResponse().
To add Util::expandBuffer:
* src/ByteArrayDiskWriter.h (expandBuffer): Removed.
* src/ByteArrayDiskWriter.cc (writeData): Use Util::expandBuffer().
* src/Util.h (expandBuffer): New function.
To fix the bug that causes segmentation fault when "-l ." is specified
in command-line option:
* src/SimpleLogger.h (SimpleLogger): Removed "filename" argument.
(openFile): New function.
(closeFile): New function.
* src/SimpleLogger.cc (SimpleLogger): Removed fopen.
(~SimpleLogger): Call closeFile();
* src/LogFactory.cc (getInstance): Added a call to slogger->openFile().
* src/main.cc (main): Added a check to see logger is configured
properly.
To enable HTTP authentication without specifying "--http-auth-scheme"
* src/prefs.h (PREF_HTTP_AUTH_ENABLED): New definition.
* src/HttpConnection.cc (createRequest): Send Authorization header
if PREF_HTTP_AUTH_ENABLED == V_TRUE.
* src/main.cc (main): Preset PREF_HTTP_AUTH_SCHEME to V_TRUE
If "--http-user" is specified, set PREF_HTTP_AUTH_ENABLED to V_TRUE
* src/Peer.cc (shouldChoke): Updated algorithm.
* src/message.h (EX_AUTH_FAILED): New definition.
(EX_FILE_OPEN): New definition.
* src/HttpResponseCommand.cc (checkResponse): Throw DlAbortEx
if status == 401.
(handleDefaultEncoding): Added a call to diskWriter->initAndOpenFile()
if req->isTorrent == true.
* src/main.cc (handler): Removed the check to see e->diskWriter != NULL
(torrentHandler): Removed the check to see diskAdaptor != NULL.
* src/AbstractDiskWriter.cc (openExistingFile): Updated messsage.
(createFile): Updated message.
2006-04-19 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To add a readout of estimated remaining time to normal HTTP/FTP
downloads:
* src/ConsoleDownloadEngine.h (startup): New variable.
(startupLength): New variable.
(isStartupLengthSet): New variable.
(avgSpeed): New variable.
(eta): New variable.
* src/ConsoleDownloadEngine.cc (sendStatistics): Added a readout of
estimated remaining time.
(initStatistics): Initialized newly added variables.
(calculateStatistics): Calculate average speed and estimated remaining
time.
To decouple TorrentDownloadEngine from HttpResponseCommand:
* src/TrackerDownloadCommand.h: Removed.
* src/TrackerDownloadCommand.cc: Removed.
* src/TrackerInitCommand.h: Removed.
* src/TrackerInitCommand.cc: Removed.
* src/TrackerUpdateCommand.h: Removed.
* src/TrackerUpdateCommand.cc: Removed.
* src/TrackerWatcherCommand.cc (execute): The construction of request
url written in TrackerInitCommand was moved here. Do not create
tracker request command if torretnMan->trackers != 0.
* src/CompactTrackerResponseProcessor.h: New class.
* src/CompactTrackerResponseProcessor.cc: New class.
* src/message.h (MSG_TRACKER_WARNING_MESSAGE): Updated.
* src/HttpResponseCommand.cc (createHttpDownloadCommand):
Decoupled TorrentDownloadEngine from this.
* src/SegmentMan.h (init): New function.
* src/SegmentMan.cc (init): New function.
* src/TorrentMan.h (responseProcessor): New variable.
(trackers): New variable.
(setTrackerResponseProcessor): New function.
(getTrackerResponseProcessor): New function.
(processTrackerResponse): New function.
* src/TorrentMan.cc (Constructor): Initialized new variable trackers.
(processTrackerResponse): New function.
* src/main.cc (main): Use ByteArrayDiskWriter and
CompactTrackerResponseProcessor.
* src/TorrentDownloadEngine.cc (afterEachIteration): Call torrentMan->
processTrackerResponse().
* src/TorrentConsoleDownloadEngine.cc (printStatistics): Updated a
readout.
* src/TorrentDownloadEngine.cc (afterEachIteration): Added log message
which indicates download has completed.
* src/AbstractDiskWriter.cc (Destructor): fd >= 0, not fd >0
(closeFile): fd >= 0, not fd > 0
* src/main.cc (main): Added short cut for show-files.
Added short cut for torrent-file.
Added new command-line option listen-port.
Updated i18n messages.
2006-04-18 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To add LogFactory which creates singleton logger:
* src/LogFactory.h: New class.
* src/LogFactory.cc: New class.
* src/Command.h (logger): New variable.
(Constructor): Use LogFactory.
* src/AbstractCommand.cc: Use Command::logger
* src/PeerConnection.cc (Constructor): Deleted the argument logger.
Use LogFactory.
* src/SegmentSplitter.h : Made logger protected.
* src/SegmentSplitter.cc (Constructor): Use LogFactory.
* src/SegmentMan.cc (Constructor): Use LogFactory.
* src/DownloadEngine.h : Made logger protected.
* src/DownloadEngine.cc (Constructor): Use LogFactory.
* src/PeerInteractionCommand.cc : Use Command::logger.
* src/HttpResponseCommand.cc : Use Command::logger.
* src/SegmentMan.h : Made logger private.
* src/TorrentMan.h : Made logger private.
* src/TorrentMan.cc : Use LogFactory.
* src/FtpNegotiateCommand.cc : Use Command::logger.
* src/HttpConnection.h (Constructor): Deleted the argument logger.
* src/HttpConnection.cc (Constructor): Deleted the argument logger.
Use LogFactory.
* src/FtpConnection.h (Constructor): Deleted the argument logger.
* src/FtpConnection.cc (Constructor): Deleted the argument logger.
Use LogFactory.
* src/DownloadCommand.cc : Use Command::logger.
* src/PeerAbstractCommand.cc : Use Command::logger.
* src/PeerListenCommand.cc : Use Command::logger.
* src/PeerInitiateConnectionCommand.cc : Use Command::logger.
* src/HttpInitiateConnectionCommand.cc : Use Command::logger.
* src/FtpInitiateConnectionCommand.cc : Use Command::logger.
* src/TrackerWatcherCommand.cc : Use Command::logger.
* src/TrackerUpdateCommand.cc : Use Command::logger.
* src/TrackerDownloadCommand.cc : Use Command::logger.
* src/RequestSlotMan.cc (Constructor): Deleted the argument logger.
Use LogFactory.
* src/SendMessageQueue.h (Constructor): Deleted the argument logger.
* src/SendMessageQueue.cc (Constructor): Deleted the argument logger.
Use LogFactory.
* src/main.cc (main): Use LogFactory.
* src/DiskAdaptor.h (logger): New variable.
* src/DiskAdaptor.cc (Constructor): Use LogFactory.
* src/CopyDiskAdaptor.cc (fixFilename): Added a log message.
2006-04-17 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* src/TrackerInitCommand.cc (TrackerInitCommand): Added a "key"
parameter to a tracker request.
* src/TorrentMan.cc (readFileEntryFromMetaInfoFile): Bug fix.
* src/TrackerWatcherCommand.cc (execute): Call req->resetTryCount().
* src/main.cc (setSignalHander): New function.
(main): Added a handler for SIGTERM.
(handler): Updated message.
(torrentHandler): Updated message.
2006-04-16 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* src/TorrentConsoleDownloadEngine.cc
(onPartialDownloadingCompletes): Renamed as
onSelectiveDownloadingCompletes.
(onSelectiveDownloadingCompletes): Updated message.
To add DiskAdaptor which abstract DiskWriter family:
* src/PeerConnection.cc: Use diskAdaptor instead of diskWriter.
* src/PeerInteractionCommand.cc: Use diskAdaptor instead of diskWriter.
* src/BitfieldMan.cc (isAllBitSet): bug fix.
* src/TorrentMan.cc : Included CopyDiskAdaptor.h, DirectDiskAdaptor.h,
MultiDiskAdaptor.h.
(readFileEntry): Changed its arguments.
(setup): setupDiskWriter is merged into this function.
(setupDiskWriter): Removed.
(setFileFilter): New function.
(readFileEntryFromMetaInfoFile): Updated according to the changes
made in readFileEntry.
(getFilePath): Removed.
(getTempFilePath): Removed.
(getSegmentFilePath): Updated due to the removal of getFilePath.
(fixFilename): Removed.
(copySingleFile): Removed.
(splitMultiFile): Removed.
(deleteTempFile): Removed.
(setFileEntriesToDownload): Removed.
(isPartialDownloadingMode): Renamed as isSelectiveDownloadingMode.
(isSelectiveDownloadingMode): New function.
(setAllMultiFileRequestedState): Removed.
(finishPartialDownloadingMode): Renamed as
finishSelectiveDownloadingMode.
(finishSelectiveDownloadingMode): New function.
(getPartialTotalLength): Renamed as getSelectedTotalLength.
(getSelectedTotalLength): New function.
(onDownloadComplete): Use diskAdaptor.
* src/MultiDiskWriter.cc (Constructor): Added the argument pieceLength
(Range): Removed.
(setMultiFileEntries): Renamed as setFileEntries.
(setFileEntries): New function.
* src/MultiDiskWriter.h [DiskWriterEntry](enabled): Removed.
(pieceLength): New variable.
* src/main.cc (printDownloadCompeleteMessage): New function.
(torrentHandler): Use diskAdaptor instead of diskWriter.
(main): Renamed torrent-show-files to show-files.
Rewritten file contents listing.
* src/TorrentMan.h (FileEntry): Removed.
(multiFileTopDir): Removed.
(multiFileEntries): Removed.
(diskWriter): Removed.
(diskAdaptor): New variable.
* src/DefaultDiskWriter.h (totalLength): New variable.
* src/DefaultDiskWriter.cc (initAndOpenFile): Added ftruncate.
* src/TorrentDownloadEngine.cc (onEndOfRun): Use diskAdaptor instead of
diskWriter.
* src/TorrentConsoleDownloadEngine.h
(partialDownloadLengthDiff): Renamed as selectedDownloadLengthDiff.
(partialTotalLength): Renamed as selectedTotalLength.
* src/AbstractDiskWriter.cc (openFile): If file exists, call
openExistingFile, otherwise call initAndOpenFile.
(closeFile): fd > 0, not fd != 0.
* src/DirectDiskAdaptor.h: New class.
* src/DirectDiskAdaptor.cc: New class.
* src/MultiDiskAdaptor.h: New class.
* src/MultiDiskAdaptor.cc: New class.
* src/CopyDiskAdaptor.h: New class.
* src/CopyDiskAdaptor.cc: New class.
* src/DiskAdaptor.h: New class.
* src/DiskAdaptor.cc: New class.
* src/prefs.h (PREF_TORRENT_SHOW_FILES): Renamed as PREF_SHOW_FILES
(PREF_SHOW_FILES): New definition.
2006-04-12 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To add the ability to download multi torrent into respective files
directly:
* src/DiskWriter.h (openFile): New function.
(seek): Removed.
* src/MultiDiskWriter.h: New class.
* src/MultiDiskWriter.cc: New class.
* src/AbstractDiskWriter.h (seek): Changed its scope from public to
protected.
(openFile): New function.
* src/AbstractDiskWriter.cc (openFile): New function.
* src/prefs.h (V_FALSE): New definition.
(PREF_DIRECT_FILE_MAPPING): New definition.
* src/TorrentMan.h (setupDiskWriter): New function.
(setAllMultiFileRequestedState): New function.
(onDownloadComplete): New function.
* src/TorrentMan.cc : Included MultiDiskWriter.h
(setupDiskWriter): New function.
(getFilePath): Updated.
(getTempFilePath): Updated.
(getSegmentFilePath): Updated.
(fixFilename): Updated.
(deleteTempFile): Updated.
(setAllMultiFileRequestedState): New function.
(setFileEntriesToDownload): Use setAllMultiFileRequestedState().
(finishPartialDownloadingMode): Reset requested flags.
(onDownloadComplete): New function.
* src/main.cc: Added --direct-file-mapping option.
Use TorretMan::setupDiskWriter().
* src/TorrentDownloadEngine.cc (afterEachIteration): Use TorrentMan::
onDownloadComplete().
To fix ETA bug:
* src/Util.h (difftvsec): New function.
* src/Util.cc (difftvsec): New function.
* src/TorrentConsoleDownloadEngine.cc (calculateSpeed): Use int for the
type of "elapsed" instead of long long int.
(calculateStatistics): Use Util::difftvsec instead of Util::difftv.
The updates of statistics takes place every 1 seconds.
* src/TorrentConsoleDownloadEngine.h (lastElapsed): Changed its type.
(calculateSpeed): Changed its argument signature.
* src/PeerMessage.cc (toString): Fixed message.
2006-04-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To print ETA:
* src/TorrentDownloadEngine.cc (afterEachIteration): Added download
completion handling when dealing with
TorrentMan::isPartialDownloadingMode() == true.
* src/TorrentDownloadEngine.h (onPartialDownloadingCompletes):
New function.
* src/TorrentConsoleDownloadEngine.h (startup): New variable.
(sessionDownloadLength): New variable.
(avgSpeed): New variable.
(eta): New variable.
* src/TorrentConsoleDownloadEngine.cc (initStatistics): Initialized
new variables: eta, avgSpeed, startup.
(calculateSpeed): Calculate average speed and ETA.
(printStatistics): Added ETA.
* src/Util.h (secfmt): New function.
* src/Util.cc (secfmt): New function.
2006-04-05 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To detect "keep alive" flooding:
* src/PeerInteractionCommand.h (keepAliveCount): New variable
* src/PeerInteractionCommand.cc (Constructor): Initialized new
variable: keepAliveCount.
(detectMessageFlooding): Added "keep alive" flooding detection.
(receiveMessage): Increase keepAliveCount when "keep alive" message
received.
To add the ability to download only specified files in multi-file
torrent:
* src/BitfieldMan.h (filterBitfield): New variable.
(filterEnabled): New variable.
(setFilterBit): New function.
(enableFilter): New function.
(disableFilter): New function.
(isFilterEnabled): New function.
(getFilteredTotalLength): New function.
(getCompletedLength): New function.
* src/BitfieldMan.cc (Constructor): Initialized new variable:
filterBitfield, filterEnabled.
(CopyConstructor): Added filterBitfield and filterEnabled.
(operator==): Added filterBitfield and filterEnabled.
(Destructor): Added filterBitfield.
(getMissingIndex): Use filterBitfield.
(getMissingUnusedIndex): Use filterBitfield.
(getFirstMissingUnusedIndex): Use filterBitfield.
(getFirstMissingUnusedIndex): Use filterBitfield.
(getAllMissingIndexes): Use filterBitfield.
(countMissingBlock): Use filterBitfield.
(countBlock): Use filterBitfield.
(setBitInternal): Added new argument on.
(setUseBit): Use setBitInternal.
(unsetUseBit): Use setBitInternal.
(setBit): Use setBitInternal.
(unsetBit): Use setBitInternal.
(isAllBitSet): Use filterBitfield.
(setFilterBit): New function.
(addFilter): New function.
(enableFilter): New function.
(disableFilter): New function.
(clearFilter): New function.
(isFilterEnabled): New function.
(getFilteredTotalLength): New function.
(getCompletedLength): New function.
* src/TorrentMan.h [FileEntry](Constructor): Updated signature.
Initalized newly added variables.
[FileEntry](offset): New variable.
[FileEntry](extracted): New variable.
[FileEntry](requested): New variable.
(readFileEntry): New function.
(option): New variable.
(splitMultiFile): Removed const qualifier.
(fixFilename): Removed const qualifier.
(readFileEntryFromMetaInfoFile): New function.
(finishPartialDownloadingMode): New function.
(isPartialDownloadingMode): New function.
(setFileEntriesToDownload): New function.
(getCompletedLength): New function.
(getPartialTotalLength): New function.
* src/TorrentMan.cc (readFileEntry): New function.
(setup): Use readFileEntry. If no-preallocation option is specified,
use DefaultDiskWriter.
(readFileEntryFromMetaInfoFile): New function.
(fixFilename): Removed const qualifier.
(splitMultiFile): Removed const qualifier.
(setFileEntriesToDownload): New function.
(isPartialDownloadingMode): New function.
(finishPartialDownloadingMode): New function.
(getCompletedLength): New function.
(getPartialTotalLength): New function.
* src/TorrentConsoleDownloadEngine.h (partialDownloadLengthDiff):
New variable.
(partialTotalLength): New variable.
(downloadLength): New variable.
(totalLength): New variable.
* src/TorrentConsoleDownloadEngine.cc (onPartialDownloadingCompletes):
Added log.
(initStatistics): Initialized new variables: partialDownloadLengthDiff,
partialTotalLength, downloadLength, totalLength.
(calculate): Calculate downloadLength and totalLength.
* src/prefs.h :New definition PREF_NO_PREALLOCATION
* src/main.cc (addCommand): Changed argument signature.
(main): Added new variable: args. Added new option "torrent-show-files"
"no-preallocation". Usage is not updated yet.
2006-04-02 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* src/PeerMessage.cc (setBitfield): Fixed invalid memory de-allocation.
2006-04-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Attempt to add the ability to listing file entries in a .torrent file.
This feature is not yet complete.
* src/prefs.h (PREF_TORRENT_SHOW_FILES): New definition
* src/TorrentMan.cc (getMultiFileEntries): New function.
(getName): New function.
* src/TorrentMan.h (getMultiFileEntries): New function.
(getName): New function.
* src/main.cc (main): Use above 2 funtion.
* Release 0.3.2
2006-03-31 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* src/PeerInteractionCommand.cc (checkInactiveConnection): New function
(detectMessageFlooding): Updated threshold value.
(checkLongTimePeerChoking): Updated timeout value.
(getNewPieceAndSendInterest): Added debug log.
* src/PeerInteractionCommand.h (checkInactiveConnection): New function
* src/TorrentMan.cc (deleteOldErrorPeers): Updated.
(getPeer): Updated.
* src/TorrentMan.h: Added MAX_PEER_ERROR.
* src/PeerAbstractCommand.cc (onAbort): Increment error counter.
* src/PeerListenCommand.cc (execute): Close connection if incoming peer
is localhost.
* src/main.cc (main): Updated PREF_PEER_CONNECTION_TIMEOUT to 60.
* src/PendingMessage.cc (processMessage): Not to send piece message
if peer is not interested in the pieces localhost has.
* src/Peer.cc (shouldChoke): Updated.
* src/SendMessageQueue.cc (cancelAllRequest): Fixed.
* src/Util.cc (isPowerOf): New function.
* src/Util.h (isPowerOf): New function.
* src/PeerMessageUtil.cc (checkLength): Added a check for length
whether or not it is power of 2.
2006-03-28 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Added new class SendMessageQueue that includes PendingMessages and
RequestSlotMan.
* src/SendMessageQueue.h: New class.
* src/SendMessageQueue.cc: New class.
* src/PendingMessage.h: Added new member variable blockIndex and its
accessors.
(createRequestMessage): Updated.
* src/PendingMessage.cc (createRequestMessage): Updated.
* src/PeerInteractionCommand.cc (executeInternal): Updated with
SendMessageQueue.
(checkLongTimePeerChoking): Updated with SendMessageQueue.
(receiveMessage): Updated with SendMessageQueue.
(deletePendingPieceMessage): Removed.
(getNewPieceAndSendInterest): Updated with SendMessageQueue.
(sendInterest): Updated with SendMessageQueue.
(createRequestPendingMessage): Updated with SendMessageQueue.
(sendMessages): Updated with SendMessageQueue.
(onAbort): Updated with SendMessageQueue.
(keepAlive): Updated with SendMessageQueue.
(beforeSocketCheck): Updated SendMessageQueue.
* src/PeerInteractionCommand (sendMessages): Shuffle
missingBLockIndexes before using it.
Added its own timeout for peer connection.
* src/PeerAbstractCommand.h: Added member variable timeout and its
setter.
* src/prefs.h: Added PREF_PEER_CONNECTION_TIMEOUT.
* src/PeerInteractionCommand.cc (PeerInteractionCommand):
Added setTimeout() call.
(executeInternal): Added setTimeout() call.
* src/PeerAbstractCommand.cc (PeerAbstractCommand):
Added timeout.
(isTimeoutDetected): Updated.
* src/main.cc (main): Added PREF_PEER_CONNECTION_TIMEOUT entry to
option.
Added *simple* message flooding checker.
* src/PeerInteractionCommand.cc (executeInternal):
Added detectMessageFlooding() call.
(detectMessageFlooding): New function.
(receiveMessage): Count up CHOKE, UNCHOKE, HAVE message.
(beforeSocketCheck): Added detectMessageFlooding() call.
* src/PeerInteractionCommand.h: Added sendMessageQueue,
chokeUnchokeCount, haveCount, detectMessageFlooding().
Removed deletePendingPieceMessage(), getRequestSlot(),
deleteRequestSlot(), deleteAllRequestSlot().
* src/PeerInteractionCommand.cc (beforeSocketCheck):
Added checkLongTimePeerChoking() call.
* src/RequestSlotMan.h: Renamed deleteTimeoutRequestSlot().
* src/TorrentMan.cc (addPeer): Delete at most MAX_PEER_LIST_SIZE peers
if duplicate == false.
The parameter "uploaded" and "downloaded" in the tracker request are
the size since the client sent the "started" event to the tracker.
* src/TorrentMan.cc (setup): Assigned saved downloaded Size and
uploaded size to preDownloadedSize, preUploadedSize respectively.
* src/TorrentMan.h: Added preDownloadedSize, preUploadedSize,
getSessionDownloadedSize(), getSessionUploadedSize().
* src/TrackerInitCommand.cc (execute): Use getSessionDownloadedSize(),
getSessionUploadedSize() instead of getDownloadedSize(),
getUploadedSize().
* src/PendingMessage.cc (processMessage): Do not send request message
if the peer is choking the client.
* src/TrackerUpdateCommand.cc (execute): Check wtheher minInterval is
less than interval.
2006-03-27 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* configure.in: Added gnutls support. Added several CPP macros.
* m4/openssl.m4: Added.
* src/SocketCore.{h,cc}: Drop const quarifier from writeData(),
readData(), peekData(). Added gnutls support.
* src/HttpDownloadCommand.cc: Removed SleepCommand.h
* src/TrackerWatcherCommand.{h,cc}: Added. This command creates
TrackerInitCommand periodicaly(TorrentMan::minInterval).
* src/TorrentMan.cc: Remove downloadedSize == 0 check from save().
Instead, added a check for whether setup method has executed
successfully.
* src/TorrentMan.h: Added member vaiable setupComplete. Updated
DEFAULT_ANNOUNCE_INTERVAL and DEFAULT_ANNOUNCE_MIN_INTERVAL to 300.
* src/Makefile.am: Updated.
* src/messageDigest.h: Added. This is a macro calculating SHA1 digest
using whether OpenSSL or gcrypt, depending on the result of configure
script.
* src/ShaVisitor.{h,cc}: Removed direct dependency on OpenSSL by using
messageDigest.h.
* src/TorrentAutoSaveCommand.h: Removed unused variable cuid.
* src/PeerListenCommand.cc: Added log about port binded successfully.
Fixed memory leak.
* src/main.cc: Added gnutls support. Replaced LIB_SSL with
ENABLE_BITTORRENT where they are not related to OpenSSL but BitTorrent.
Removed instantiation of TrackerInitCommand. Instead,
TrackerWatcherCommand is instantiated and pushed to the command queue.
* src/InitiateConnectionCommandFactory.cc: Replaced HAVE_LIBSSL with
ENABLE_SSL.
* src/Request.cc: Replaced HAVE_LIBSSL with ENABLE_SSL.
* src/RequestSlotMan.cc (deleteCompletedRequestSlot):
If a piece is already acquired by another command, delete the request
slots for the piece.
* src/TrackerUpdateCommand.cc (execute):
Changed log level of MSG_TRACKER_WARNING_MESSAGE from info to warn.
Added a check whether peer list is null.
Fixed the bug that causes sending completed event to the tracker
several times.
* src/TrackerInitCommand.cc (execute):
Fixed the bug that causes sending completed event to the tracker
several times.
* src/AbstractDiskWriter.{h,cc}: Removed direct dependency on OpenSSL
by using messageDigest.h.
2006-03-26 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* PeerConnection.cc: Replaced log message "keep-alive" with
"keep alive".
* PeerInteractionCommand.{h,cc}: Close connection if peer is choking
localhost long time.
* TorrentMan.cc: When adding new peer with duplicate = true, if the
number of peer list is equal to or grater than MAX_PEER_LIST, delete
at most 100 failure entry from the list. If with duplicate = false,
MAX_PEER_LIST is not checked.
* PeerListenCommand.cc: Fixed the argument order of log message.
2006-03-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* Logger.h: Moved enum LEVEL from SimpleLogger.h to here.
Added warn().
* SimpleLogger.h: Moved enum LEVEL to Logger.h.
Implemented warn().
Defined 2 macros(WRITE_LOG, WRITE_LOG_EX) to avoid duplicated code.
2006-03-24 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* Request.h: Added AFTER_COMPLETED event.
* TorrentDownloadEngine.cc: Prints "Download complete" message
instead of downloaded size and progress(%) after download completes.
* PeerInteractionCommand.cc: After download completes, sends unchoke
message to the peer if it is interested in what localhost has
downloaded.
* TorrentMan.cc: In single-file mode, copy temporary file to the final
destination instead of just renaming it.
* TorrentMan.cc: Added deleteTempFile().
* PeerAbstractCommand.cc: do not stop execution after download
completes. This makes localhost a seeder.
* Util.{h,cc}: Added fileCopy().
* PeerListenCommand.cc: do not stop execution after download completes.
This makes localhost a seeder.
* main.cc: Do not call TorrentMan::fixFilename() in torrentHandler.
Added TorrentMan::deleteTempFile() to torrentHandler.
Initialized the variable dir as ".".
* TorrentMan.h: Changed DEFAULT_ANNOUNCE_INTERVAL to 120 seconds.
Deleted renameSingleFile().
Added copySingleFile(), deleteTempFile().
* DownloadEngine.h: Added virtual function afterEachIteration().
* TorrentDownloadEngine.cc: Move a call to TorrentMan::fixFilename()
in onEndOfRun() to afterEachIteration().
In onEndOfRun(), changed if condition to check whether filenameFixed is
true.
* Util.cc: Implemented fileCopy() using rangedFileCopy().
In rangedFileCopy(), added try-catch block to properly close file
descriptors.
* TorrentDownloadEngine.cc: Added a member variable filenameFixed.
Added afterEachIteration(), isFilenameFixed().
* Peer.cc: Changed choking strategy.
* PreAllocationDiskWriter.cc: Drop O_DIRECT flag.
* TrackerInitCommand.cc: Send completed event only once.
* DownloadEngine.cc: Added a call to afterEachIteration().
* TrackerUpdateCommand.cc: Do not stop execution after download
completes.
* TorrentMan.h: Defined MAX_PEER_UPDATE as 15. aria2 attempts to
connect the peers at most MAX_PEER_UPDATE when a peer list is
received from a tracker.
* TrackerUpdateCommand.cc: Implemented above mentioned behavior.
Decreased the number of failure peers to delete to 0(just comment out
the line).
* Release 0.3.1
2006-03-23 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* PeerInteractionCommand.cc: added a call to
TorrentMan::unadvertisePiece in Destructor.
* PeerInteractionCommand.cc: make have message sent immediately
if the size of pending message queue is zero.
* TorrentMan.cc: set the maximum size of peer list to 250.
* TorrentMan.h: changed the container type of Peers and UsedPieces
to deque.
* Util.cc: fixed rangedFileCopy.
* AbstractDiskWriter.{h,cc}: moved digest context initialization
to Constructor. Also, moved digest cleanup to Destructor.
* MetaFileUtil.cc: fixed memory leak
* replaced std::vector with std::deque.
* AbstractCommand.cc: casted timeout value to long long int.
* ChunkedEncoding.cc: fixed memory leak.
* PeerInteractionCommand.cc: casted timeout value to long long int.
* SleepCommand.cc: casted timeout value to long long int.
* Data.cc: fixed memory leak.
* Data.cc: fixed toLLInt().
* BitfieldMan.cc: fixed memory leak.
* TorrentMan.cc: initialized storeDir to ".".
* TorrentMan.cc: fixed memory leak.
* TorrentMan.cc: corrected file paths of splitted files.
* PeerAbstractCommand.cc: casted timeout to long long int.
* main.cc: added delete(req) and delete(te->diskWriter).
* RequestSlot.cc: casted timeout value to long long int.
* Request.cc: fixed memory leak.
* PendingMessage.cc: make HAVE messages sent only when peer does not
have the piece.
* Peer.{h,cc}: added hasPiece(int index).
* main.cc: corrected addCommand.
2006-03-22 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* BitTorrent protocol support added.
* Release 0.3.0
2006-03-17 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* SocketCore.cc: remove the assignment of addrinfo.ai_addr.
2006-03-09 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* ChunkedEncoding.{h,cc}: fixed the bug that if chunk data is binary,
decoding did not work properly.
2006-03-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* DownloadEngine.h: included sys/time.h
* DownloadEngine.cc: remove sys/time.h
* Makefile.am (SUBDIRS): Add intl.
* configure.in (AC_CONFIG_FILES): Add intl/Makefile.
2006-03-05 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* main.cc: correct help message for --http-auth-scheme.
* main.cc: changed e-mail address for bug reports.
* ja.po: added japanese translation.
2006-03-04 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* SimpleLogger.cc: flush log file instead of stdout.
2006-03-03 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* main.cc: Fixed command-line option: max-tries
* HttpResponseCommand.cc: Make the request re-sent only if req->seg.sp
does not equal to seg.sp.
* DownloadCommand.cc: If EOF is got from the server and the total size
of file is not zero, then throw DlRetryEx.
* main.cc: Set the minium value of min-segment-size to 1024.
* HttpResponseCommand.cc: Fixed the bug that http segmented downloading
fails because of a regression since 0.2.0 release.
2006-03-02 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* HttpConnection.cc:
* common.h: defined the user agent name as macro
* DownloadEngine.{h, cc}:
* ConsoleDownloadEngine.{h, cc}: Console output message(size, speed)
is now generated by ConsoleDownloadEngine not by DownloadEngine.
* main.cc: Download complete/abort message is now generated by main.
* Makefile.am (SUBDIRS): Add m4.
(ACLOCAL_AMFLAGS): New variable.
(EXTRA_DIST): New variable.
* configure.in (AC_CONFIG_FILES): Add po/Makefile.in,
* gettext: added gettext functionality
2006-03-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* AbstractCommand.cc:
* DownloadCommand.{h, cc}: Aborted downloading commands now properly
unregister its cuid from SegmentMan.
* DownloadEngine.cc: .aria2 file was written when a downloading
failed with errors.
* HttpConnection.cc: Added "Proxy-Connection" header to proxy request.
Added "User-Agent" header to CONNECT proxy request.
Fixed "Proxy-Authorization" header. Now proxy authorization works
properly.
* Logger.h:
* SimpleLogger.{h,cc}: Changed the type of msg to const char*.
* ChunkedEncoding.cc: Added #include directive for strings.h
* Release 0.2.1
2006-02-28 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* Util.{h,cc}: added startsWith().
* CookieBox.cc: rewrited criteriaFind() using Util::startsWith() and
Util::endsWith().
* SocketCore.cc: struct addrinfo is now zero-initialized.
* common.h: added #include directive of limit.h.
* DownloadEngine.cc: added #include directive of sys/time.h and
algorithm.
* Exception.h: added #include directive of stdio.h.
* AbstractCommand.h: added #include directive of sys/time.h.
* DownloadCommand.h: added #include directive of sys/time.h.
* *.h: added #include directive of common.h to all base classes.
subclasses' one was removed.
* common.h: defined LONG_LONG_MAX and LONG_LONG_MIN if a compiler
does not define these macros.
2006-02-23 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* Release 0.2.0
* main.cc:
* HttpInitiateConnectionCommand.{h,cc}:
* prefs.h:
* HttpConnection.{h,cc}: added --http-proxy-method option.
We can now use GET command in http proxy.
2006-02-22 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* SplitSlowestSegmentSplitter.{h,cc}: This class provies algorithm
that splits slowest segment of SegmentMan::commands vector.
This is the default split algorithm of aria2.
* SplitFirstSegmentSplitter.{h,cc}: This class provides algorithm
that splits first segment of SegmentMan::commands vector.
* SegmentSplitter.{h,cc}: Added. This class provides split algorithm.
* DownloadCommand.{h,cc}: Added downloading speed calculation.
* Segment.h:
* SegmentMan.cc: Added speed field to Segment.h
* main.cc: -s option now affects all URLs in command-line arguemtns.
* HttpResponseCommand.cc: Fixed bug that segment file is not loaded.
* message.h: Change file size related %d to %lld.
2006-02-21 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* FtpInitiateConnectionCommand.{h,cc}:
* FtpNegotiationCommand.{h,cc}:
* FtpDownloadCommand.{h,cc}:
* FtpConnection.{h,cc}: Added FTP support
* SimpleLogger.cc: Log message now includes time information.
* main.cc: The value of --http-auth-scheme option is chagned from
'BASIC' to 'basic'
* main.cc: Added --timeout command-line option.
* main.cc: Added --min-segment-size command-line option.
* main.cc: Added --max-retries command-line option.
* prefs.h: option string constants are now defined in prefs.h
2006-02-19 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* AbstractCommand.cc: Fixed timeout bug in AbstractCommand
* SegmentMan.cc: Added totalSize entry to .aria2 file. No compatibility
with version 0.1.0's one.
2006-02-18 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* configure.in: Added --enable-ssl option to configure script.
* HttpConnection.cc: Make Request-URI an absolute path. Some servers
cannot permit absoluteURI as Request-URI.
* HttpConnection.cc: Added Referer support.
* main.cc: Added referer command-line option.
* main.cc: Added rety-wait command-line option.
* Exception.h: Fixed formating bug in Exception::setMsg()
* SocketCore.{h,cc}:
* Socket.{h, cc}:
* Request.cc:
* InitiateConnectionCommandFactory.cc:
* HttpRequestCommand.cc: Added HTTPS support.
* SocketCore.{h,cc}: Added SocketCore. Socket becomes a handle class
for SocketCore.
* ChunkedEncoding.cc: Fixed bug in ChunkedEncoding: expanding buffer
size is wrong
* DownloadCommand.cc: Fixed bug in DownloadCommand: In Chunked
Encoding, it wrongly adds to Segment.ds buff length from the socket.
2006-02-17 Tatsuhiro Tsujikawa <tsujikawa at rednoah dot com>
* Release 0.1.0
|