aboutsummaryrefslogtreecommitdiffstats
path: root/packages/ctorrent/files/tracker.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/ctorrent/files/tracker.patch')
-rw-r--r--packages/ctorrent/files/tracker.patch175
1 files changed, 175 insertions, 0 deletions
diff --git a/packages/ctorrent/files/tracker.patch b/packages/ctorrent/files/tracker.patch
index e69de29bb2..4d9a0d4973 100644
--- a/packages/ctorrent/files/tracker.patch
+++ b/packages/ctorrent/files/tracker.patch
@@ -0,0 +1,175 @@
+diff -ur ctorrent-1.3.4/ctorrent.cpp new/ctorrent.cpp
+--- ctorrent-1.3.4/ctorrent.cpp 2005-01-26 00:40:07.747876016 +0000
++++ new/ctorrent.cpp 2005-01-25 01:34:16.000000000 +0000
+@@ -87,9 +87,13 @@
+ Tracker.Initial();
+
+ signal(SIGPIPE,SIG_IGN);
+- signal(SIGINT,sigint_catch);
++ signal(SIGINT,sig_catch);
++ signal(SIGTERM,sig_catch);
+ Downloader();
+ }
++ if( cfg_cache_size ) BTCONTENT.FlushCache();
++ if( arg_bitfield_file ) BTCONTENT.pBF->WriteToFile(arg_bitfield_file);
++ WORLD.CloseAll();
+
+ exit(0);
+ }
+diff -ur ctorrent-1.3.4/downloader.cpp new/downloader.cpp
+--- ctorrent-1.3.4/downloader.cpp 2005-01-26 00:40:07.748875864 +0000
++++ new/downloader.cpp 2005-01-24 19:29:18.000000000 +0000
+@@ -30,9 +30,9 @@
+ fd_set rfd;
+ fd_set wfd;
+
+- for(;;){
++ do{
+ time(&now);
+- if( BTCONTENT.SeedTimeout(&now) ) break;
++ if( BTCONTENT.SeedTimeout(&now) ) Tracker.SetStoped();
+
+ FD_ZERO(&rfd); FD_ZERO(&wfd);
+ maxfd = Tracker.IntervalCheck(&now,&rfd, &wfd);
+@@ -48,5 +48,5 @@
+ if(T_FREE != Tracker.GetStatus()) Tracker.SocketReady(&rfd,&wfd,&nfds);
+ if( nfds ) WORLD.AnyPeerReady(&rfd,&wfd,&nfds);
+ }
+- }/* end for(;;) */
++ } while(Tracker.GetStatus() != T_FINISHED);
+ }
+diff -ur ctorrent-1.3.4/sigint.cpp new/sigint.cpp
+--- ctorrent-1.3.4/sigint.cpp 2005-01-26 00:40:07.749875712 +0000
++++ new/sigint.cpp 2005-01-26 00:39:48.175851416 +0000
+@@ -4,17 +4,27 @@
+ #include <signal.h>
+
+ #include "btcontent.h"
++#include "tracker.h"
+ #include "peerlist.h"
+ #include "btconfig.h"
++#include "sigint.h"
+
+-void sigint_catch(int sig_no)
++void sig_catch(int sig_no)
+ {
+- if(SIGINT == sig_no){
++ if(SIGINT == sig_no || SIGTERM == sig_no){
++ Tracker.SetStoped();
++ signal(sig_no,sig_catch2);
++ }
++}
++
++static void sig_catch2(int sig_no)
++{
++ if(SIGINT == sig_no || SIGTERM == sig_no){
+ if( cfg_cache_size ) BTCONTENT.FlushCache();
+ if( arg_bitfield_file ) BTCONTENT.pBF->WriteToFile(arg_bitfield_file);
+ WORLD.CloseAll();
+- signal(SIGINT,SIG_DFL);
+- raise(SIGINT);
++ signal(sig_no,SIG_DFL);
++ raise(sig_no);
+ }
+ }
+
+diff -ur ctorrent-1.3.4/sigint.h new/sigint.h
+--- ctorrent-1.3.4/sigint.h 2005-01-26 00:40:07.749875712 +0000
++++ new/sigint.h 2005-01-25 01:30:11.000000000 +0000
+@@ -2,7 +2,8 @@
+ #define SIGINT_H
+
+ #ifndef WINDOWS
+-void sigint_catch(int sig_no);
++void sig_catch(int sig_no);
++static void sig_catch2(int sig_no);
+ #endif
+
+ #endif
+diff -ur ctorrent-1.3.4/tracker.cpp new/tracker.cpp
+--- ctorrent-1.3.4/tracker.cpp 2005-01-26 00:40:07.751875408 +0000
++++ new/tracker.cpp 2005-01-26 00:38:52.828265528 +0000
+@@ -31,7 +31,7 @@
+ m_sock = INVALID_SOCKET;
+ m_port = 80;
+ m_status = T_FREE;
+- m_f_started = m_f_stoped = m_f_pause = 0;
++ m_f_started = m_f_stoped = m_f_pause = m_f_completed = 0;
+ m_interval = 15;
+
+ m_connect_refuse_click = 0;
+@@ -54,7 +54,8 @@
+
+ m_reponse_buffer.Reset();
+ time(&m_last_timestamp);
+- m_status = T_FREE;
++ if (m_f_stoped) m_status = T_FINISHED;
++ else m_status = T_FREE;
+ }
+
+ int btTracker:: _IPsin(char *h, int p, struct sockaddr_in *psin)
+@@ -329,14 +332,15 @@
+ // fprintf(stdout,"Old Set Self:");
+ // fprintf(stdout,"%s\n", inet_ntoa(Self.m_sin.sin_addr));
+
+- if( m_f_stoped ) /* stopped */
+- event = str_event[1];
+- else if( BTCONTENT.pBF->IsFull()) /* download complete */
+- event = str_event[2];
+- else if( m_f_started ) /* interval */
+- event = (char*) 0;
+- else
++ if( m_f_stoped )
++ event = str_event[1]; /* stopped */
++ else if( m_f_started == 0 )
+ event = str_event[0]; /* started */
++ else if( BTCONTENT.pBF->IsFull() && !m_f_completed){
++ event = str_event[2]; /* download complete */
++ m_f_completed = 1; /* only send download complete once */
++ } else
++ event = (char*) 0; /* interval */
+
+ if(event){
+ if(MAXPATHLEN < snprintf(REQ_BUFFER,MAXPATHLEN,REQ_URL_P2_FMT,
+@@ -380,8 +390,7 @@
+ {
+ /* tracker communication */
+ if( T_FREE == m_status ){
+- if((*pnow - m_last_timestamp >= m_interval) &&
+- (cfg_min_peers > WORLD.TotalPeers())){
++ if(*pnow - m_last_timestamp >= m_interval){
+
+ if(Connect() < 0){ Reset(15); return -1; }
+
+diff -ur ctorrent-1.3.4/tracker.h new/tracker.h
+--- ctorrent-1.3.4/tracker.h 2005-01-26 00:40:07.752875256 +0000
++++ new/tracker.h 2005-01-26 00:38:21.003103688 +0000
+@@ -21,6 +21,7 @@
+ #define T_FREE 0
+ #define T_CONNECTING 1
+ #define T_READY 2
++#define T_FINISHED 3
+
+ class btTracker
+ {
+@@ -34,9 +35,10 @@
+ unsigned char m_status:2;
+ unsigned char m_f_started:1;
+ unsigned char m_f_stoped:1;
++ unsigned char m_f_completed:1;
+
+ unsigned char m_f_pause:1;
+- unsigned char m_f_reserved:3;
++ unsigned char m_f_reserved:2;
+
+
+ time_t m_interval; // 与Tracker通信的时间间隔
+@@ -66,6 +68,8 @@
+ void SetPause() { m_f_pause = 1; }
+ void ClearPause() { m_f_pause = 0; }
+
++ void SetStoped() { Reset(15); m_f_stoped = 1;}
++
+ int Connect();
+ int SendRequest();
+ int CheckReponse();