Changeset 5689
- Timestamp:
- Apr 25, 2008, 2:57:33 AM (14 years ago)
- Location:
- trunk/libtransmission
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/fdlimit.c
r5455 r5689 41 41 #endif 42 42 #include <unistd.h> 43 #include <libgen.h> /* basename,dirname */43 #include <libgen.h> /* dirname */ 44 44 #include <fcntl.h> /* O_LARGEFILE */ 45 45 … … 60 60 #endif 61 61 62 /** 63 *** 64 **/ 65 66 static void 67 myDebug( const char * file, int line, const char * fmt, ... ) 68 { 69 FILE * fp = tr_getLog( ); 70 if( fp != NULL ) 71 { 72 va_list args; 73 char s[64]; 74 struct evbuffer * buf = evbuffer_new( ); 75 char * myfile = tr_strdup( file ); 76 77 evbuffer_add_printf( buf, "[%s] ", tr_getLogTimeStr( s, sizeof(s) ) ); 78 va_start( args, fmt ); 79 evbuffer_add_vprintf( buf, fmt, args ); 80 va_end( args ); 81 evbuffer_add_printf( buf, " (%s:%d)\n", basename(myfile), line ); 82 fwrite( EVBUFFER_DATA(buf), 1, EVBUFFER_LENGTH(buf), fp ); 83 84 tr_free( myfile ); 85 evbuffer_free( buf ); 86 } 87 } 88 89 #define dbgmsg(fmt...) myDebug(__FILE__, __LINE__, ##fmt ) 62 #define dbgmsg(fmt...) tr_deepLog( __FILE__, __LINE__, NULL, ##fmt ) 90 63 91 64 /** -
trunk/libtransmission/handshake.c
r5632 r5689 17 17 #include <string.h> 18 18 #include <stdio.h> 19 #include <libgen.h> /* basename */20 19 21 20 #include <event.h> … … 135 134 **/ 136 135 137 static void 138 myDebug( const char * file, int line, const tr_handshake * handshake, const char * fmt, ... ) 139 { 140 FILE * fp = tr_getLog( ); 141 if( fp != NULL ) 142 { 143 va_list args; 144 char timestr[64]; 145 struct evbuffer * buf = evbuffer_new( ); 146 char * myfile = tr_strdup( file ); 147 148 evbuffer_add_printf( buf, "[%s] %s: ", 149 tr_getLogTimeStr( timestr, sizeof(timestr) ), 150 tr_peerIoGetAddrStr( handshake->io ) ); 151 va_start( args, fmt ); 152 evbuffer_add_vprintf( buf, fmt, args ); 153 va_end( args ); 154 evbuffer_add_printf( buf, " (%s:%d)\n", basename(myfile), line ); 155 fwrite( EVBUFFER_DATA(buf), 1, EVBUFFER_LENGTH(buf), fp ); 156 157 tr_free( myfile ); 158 evbuffer_free( buf ); 159 } 160 } 161 162 #define dbgmsg(handshake, fmt...) myDebug(__FILE__, __LINE__, handshake, ##fmt ) 136 #define dbgmsg(handshake, fmt...) tr_deepLog( __FILE__, __LINE__, tr_peerIoGetAddrStr( handshake->io ), ##fmt ) 163 137 164 138 static const char* getStateName( short state ) -
trunk/libtransmission/peer-mgr.c
r5650 r5689 16 16 #include <stdio.h> /* printf */ 17 17 #include <limits.h> /* INT_MAX */ 18 19 #include <libgen.h> /* basename */20 18 21 19 #include <event.h> … … 157 155 }; 158 156 159 /** 160 *** 161 **/ 162 163 static void 164 myDebug( const char * file, int line, const Torrent * t, const char * fmt, ... ) 165 { 166 FILE * fp = tr_getLog( ); 167 if( fp != NULL ) 168 { 169 va_list args; 170 char timestr[64]; 171 struct evbuffer * buf = evbuffer_new( ); 172 char * myfile = tr_strdup( file ); 173 174 evbuffer_add_printf( buf, "[%s] ", tr_getLogTimeStr( timestr, sizeof(timestr) ) ); 175 if( t != NULL ) 176 evbuffer_add_printf( buf, "%s ", t->tor->info.name ); 177 va_start( args, fmt ); 178 evbuffer_add_vprintf( buf, fmt, args ); 179 va_end( args ); 180 evbuffer_add_printf( buf, " (%s:%d)\n", basename(myfile), line ); 181 fwrite( EVBUFFER_DATA(buf), 1, EVBUFFER_LENGTH(buf), fp ); 182 183 tr_free( myfile ); 184 evbuffer_free( buf ); 185 } 186 } 187 188 #define tordbg(t, fmt...) myDebug(__FILE__, __LINE__, t, ##fmt ) 157 #define tordbg(t, fmt...) tr_deepLog( __FILE__, __LINE__, t->tor->info.name, ##fmt ) 189 158 190 159 /** … … 1112 1081 tr_peerIo * io; 1113 1082 tr_handshake * handshake; 1114 1115 tordbg( NULL, "Got an INCOMING connection with %s", tr_peerIoAddrStr( addr, port ) );1116 1083 1117 1084 io = tr_peerIoNewIncoming( manager->handle, addr, port, socket ); -
trunk/libtransmission/tracker.c
r5673 r5689 15 15 #include <stdlib.h> 16 16 #include <string.h> /* strcmp, strchr */ 17 #include <libgen.h> /* basename */18 17 19 18 #include <event.h> … … 127 126 }; 128 127 129 /** 130 *** 131 **/ 132 133 static void 134 myDebug( const char * file, int line, const tr_tracker * t, const char * fmt, ... ) 135 { 136 FILE * fp = tr_getLog( ); 137 if( fp != NULL ) 138 { 139 va_list args; 140 char timestr[64]; 141 struct evbuffer * buf = evbuffer_new( ); 142 char * myfile = tr_strdup( file ); 143 144 evbuffer_add_printf( buf, "[%s] ", tr_getLogTimeStr( timestr, sizeof(timestr) ) ); 145 if( t ) 146 evbuffer_add_printf( buf, "%s ", t->name ); 147 va_start( args, fmt ); 148 evbuffer_add_vprintf( buf, fmt, args ); 149 va_end( args ); 150 evbuffer_add_printf( buf, " (%s:%d)\n", basename(myfile), line ); 151 fwrite( EVBUFFER_DATA(buf), 1, EVBUFFER_LENGTH(buf), fp ); 152 153 tr_free( myfile ); 154 evbuffer_free( buf ); 155 } 156 } 157 158 #define dbgmsg(t, fmt...) myDebug(__FILE__, __LINE__, t, ##fmt ) 128 #define dbgmsg(name, fmt...) tr_deepLog(__FILE__, __LINE__, name, ##fmt ) 159 129 160 130 /*** … … 366 336 return; 367 337 368 dbgmsg( t , "tracker response: %d", responseCode );338 dbgmsg( t->name, "tracker response: %d", responseCode ); 369 339 tr_ndbg( t->name, "tracker response: %d", responseCode ); 370 340 t->lastAnnounceResponse = responseCode; … … 389 359 390 360 if(( tr_bencDictFindInt( &benc, "interval", &i ))) { 391 dbgmsg( t , "setting interval to %d", (int)i );361 dbgmsg( t->name, "setting interval to %d", (int)i ); 392 362 t->announceIntervalSec = i; 393 363 } 394 364 395 365 if(( tr_bencDictFindInt( &benc, "min interval", &i ))) { 396 dbgmsg( t , "setting min interval to %d", (int)i );366 dbgmsg( t->name, "setting min interval to %d", (int)i ); 397 367 t->announceMinIntervalSec = i; 398 368 } … … 441 411 { 442 412 const int interval = t->announceIntervalSec + t->randOffset; 443 dbgmsg( t , "request succeeded. reannouncing in %d seconds", interval );413 dbgmsg( t->name, "request succeeded. reannouncing in %d seconds", interval ); 444 414 t->reannounceAt = time( NULL ) + interval; 445 415 t->manualAnnounceAllowedAt = time( NULL ) + t->announceMinIntervalSec; … … 450 420 * parsed the redirect, all that's left is to retry */ 451 421 const int interval = 5; 452 dbgmsg( t , "got a redirect. retrying in %d seconds", interval );422 dbgmsg( t->name, "got a redirect. retrying in %d seconds", interval ); 453 423 t->reannounceAt = time( NULL ) + interval; 454 424 t->manualAnnounceAllowedAt = time( NULL ) + t->announceMinIntervalSec; … … 475 445 { 476 446 /* WTF did we get?? */ 477 dbgmsg( t , "Invalid response from tracker... retrying in two minutes." );447 dbgmsg( t->name, "Invalid response from tracker... retrying in two minutes." ); 478 448 t->manualAnnounceAllowedAt = ~(time_t)0; 479 449 t->reannounceAt = time( NULL ) + t->randOffset + 120; … … 497 467 return; 498 468 499 dbgmsg( t , "scrape response: %ld\n", responseCode );469 dbgmsg( t->name, "scrape response: %ld\n", responseCode ); 500 470 tr_ndbg( t->name, "scrape response: %d", responseCode ); 501 471 t->lastScrapeResponse = responseCode; … … 556 526 { 557 527 const int interval = t->scrapeIntervalSec + t->randOffset; 558 dbgmsg( t , "request succeeded. rescraping in %d seconds", interval );528 dbgmsg( t->name, "request succeeded. rescraping in %d seconds", interval ); 559 529 tr_ndbg( t->name, "request succeeded. rescraping in %d seconds", interval ); 560 530 t->scrapeAt = time( NULL ) + interval; … … 563 533 { 564 534 const int interval = 5; 565 dbgmsg( t , "got a redirect. retrying in %d seconds", interval );535 dbgmsg( t->name, "got a redirect. retrying in %d seconds", interval ); 566 536 t->scrapeAt = time( NULL ) + interval; 567 537 } … … 569 539 { 570 540 const int interval = t->retryScrapeIntervalSec + t->randOffset; 571 dbgmsg( t , "Tracker responded to scrape with %d. Retrying in %d seconds.",541 dbgmsg( t->name, "Tracker responded to scrape with %d. Retrying in %d seconds.", 572 542 responseCode, interval ); 573 543 t->retryScrapeIntervalSec *= 2; -
trunk/libtransmission/utils.c
r5673 r5689 31 31 #include <string.h> /* strerror */ 32 32 33 #include <libgen.h> /* basename */ 33 34 #include <sys/time.h> 34 35 #include <sys/types.h> … … 84 85 } 85 86 87 void 88 tr_setMessageLevel( int level ) 89 { 90 tr_msgInit(); 91 tr_lockLock( messageLock ); 92 messageLevel = MAX( 0, level ); 93 tr_lockUnlock( messageLock ); 94 } 95 96 int 97 tr_getMessageLevel( void ) 98 { 99 int ret; 100 101 tr_msgInit(); 102 tr_lockLock( messageLock ); 103 ret = messageLevel; 104 tr_lockUnlock( messageLock ); 105 106 return ret; 107 } 108 109 void 110 tr_setMessageQueuing( int enabled ) 111 { 112 tr_msgInit(); 113 tr_lockLock( messageLock ); 114 messageQueuing = enabled; 115 tr_lockUnlock( messageLock ); 116 } 117 118 tr_msg_list * 119 tr_getQueuedMessages( void ) 120 { 121 tr_msg_list * ret; 122 123 assert( NULL != messageLock ); 124 tr_lockLock( messageLock ); 125 ret = messageQueue; 126 messageQueue = NULL; 127 messageQueueTail = &messageQueue; 128 tr_lockUnlock( messageLock ); 129 130 return ret; 131 } 132 133 void 134 tr_freeMessageList( tr_msg_list * list ) 135 { 136 tr_msg_list * next; 137 138 while( NULL != list ) 139 { 140 next = list->next; 141 free( list->message ); 142 free( list->name ); 143 free( list ); 144 list = next; 145 } 146 } 147 148 /** 149 *** 150 **/ 151 86 152 char* 87 153 tr_getLogTimeStr( char * buf, int buflen ) … … 109 175 110 176 void 111 tr_setMessageLevel( int level ) 112 { 113 tr_msgInit(); 114 tr_lockLock( messageLock ); 115 messageLevel = MAX( 0, level ); 116 tr_lockUnlock( messageLock ); 117 } 118 119 int 120 tr_getMessageLevel( void ) 121 { 122 int ret; 123 124 tr_msgInit(); 125 tr_lockLock( messageLock ); 126 ret = messageLevel; 127 tr_lockUnlock( messageLock ); 128 129 return ret; 130 } 131 132 void 133 tr_setMessageQueuing( int enabled ) 134 { 135 tr_msgInit(); 136 tr_lockLock( messageLock ); 137 messageQueuing = enabled; 138 tr_lockUnlock( messageLock ); 139 } 140 141 tr_msg_list * 142 tr_getQueuedMessages( void ) 143 { 144 tr_msg_list * ret; 145 146 assert( NULL != messageLock ); 147 tr_lockLock( messageLock ); 148 ret = messageQueue; 149 messageQueue = NULL; 150 messageQueueTail = &messageQueue; 151 tr_lockUnlock( messageLock ); 152 153 return ret; 154 } 155 156 void 157 tr_freeMessageList( tr_msg_list * list ) 158 { 159 tr_msg_list * next; 160 161 while( NULL != list ) 162 { 163 next = list->next; 164 free( list->message ); 165 free( list->name ); 166 free( list ); 167 list = next; 168 } 169 } 177 tr_deepLog( const char * file, int line, const char * name, const char * fmt, ... ) 178 { 179 FILE * fp = tr_getLog( ); 180 if( fp != NULL ) 181 { 182 va_list args; 183 char timestr[64]; 184 struct evbuffer * buf = evbuffer_new( ); 185 char * myfile = tr_strdup( file ); 186 187 evbuffer_add_printf( buf, "[%s] ", tr_getLogTimeStr( timestr, sizeof(timestr) ) ); 188 if( name ) 189 evbuffer_add_printf( buf, "%s ", name ); 190 va_start( args, fmt ); 191 evbuffer_add_vprintf( buf, fmt, args ); 192 va_end( args ); 193 evbuffer_add_printf( buf, " (%s:%d)\n", basename(myfile), line ); 194 fwrite( EVBUFFER_DATA(buf), 1, EVBUFFER_LENGTH(buf), fp ); 195 196 tr_free( myfile ); 197 evbuffer_free( buf ); 198 } 199 } 200 201 /*** 202 **** 203 ***/ 170 204 171 205 int -
trunk/libtransmission/utils.h
r5673 r5689 55 55 #define tr_inf( a... ) tr_msg( __FILE__, __LINE__, TR_MSG_INF, NULL, ## a ) 56 56 #define tr_dbg( a... ) tr_msg( __FILE__, __LINE__, TR_MSG_DBG, NULL, ## a ) 57 void tr_msg ( const char * file, int line, int level, const char * torrent, const char * msg, ... );57 void tr_msg ( const char * file, int line, int level, const char * torrent, const char * fmt, ... ); 58 58 FILE* tr_getLog( void ); 59 60 void tr_deepLog( const char * file, int line, const char * name, const char * fmt, ... ); 59 61 60 62 char* tr_getLogTimeStr( char * buf, int buflen ); -
trunk/libtransmission/web.c
r5686 r5689 24 24 25 25 #if CURL_CHECK_VERSION(7,16,0) 26 #define HAVE_CURL_MULTI_SOCKET26 #define USE_CURL_MULTI_SOCKET 27 27 #else 28 28 #define PULSE_MSEC 200 29 29 static void pulse( int socket UNUSED, short action UNUSED, void * vweb ); 30 30 #endif 31 32 #define dbgmsg(fmt...) tr_deepLog( __FILE__, __LINE__, "web", ##fmt ) 31 33 32 34 struct tr_web … … 40 42 struct tr_web_task 41 43 { 42 unsigned inttag;44 unsigned long tag; 43 45 struct evbuffer * response; 44 46 tr_web_done_func * done_func; … … 47 49 48 50 static size_t 49 writeFunc( void * ptr, size_t size, size_t nmemb, void * vtask )51 writeFunc( void * ptr, size_t size, size_t nmemb, void * task ) 50 52 { 51 53 const size_t byteCount = size * nmemb; 52 struct tr_web_task * task = vtask; 53 evbuffer_add( task->response, ptr, byteCount ); 54 evbuffer_add( ((struct tr_web_task*)task)->response, ptr, byteCount ); 54 55 return byteCount; 55 56 } … … 59 60 { 60 61 CURLMcode rc; 61 do {62 #ifdef HAVE_CURL_MULTI_SOCKET62 do 63 #ifdef USE_CURL_MULTI_SOCKET 63 64 rc = curl_multi_socket_all( web->cm, &web->remain ); 64 65 #else 65 66 rc = curl_multi_perform( web->cm, &web->remain ); 66 67 #endif 67 fprintf( stderr, "remaining: %d\n", web->remain ); 68 } while( rc == CURLM_CALL_MULTI_PERFORM ); 68 while( rc == CURLM_CALL_MULTI_PERFORM ); 69 dbgmsg( "%d tasks remain", web->remain ); 70 if ( rc != CURLM_OK ) 71 tr_err( "%s", curl_multi_strerror(rc) ); 69 72 } 70 73 … … 75 78 void * done_func_user_data ) 76 79 { 77 static unsigned inttag = 0;80 static unsigned long tag = 0; 78 81 struct tr_web_task * task; 79 82 struct tr_web * web = session->web; … … 86 89 task->response = evbuffer_new( ); 87 90 88 fprintf( stderr, "new web tag %u [%s]\n", task->tag, url );91 dbgmsg( "adding task #%lu [%s]", task->tag, url ); 89 92 ++web->remain; 90 93 … … 99 102 curl_multi_add_handle( web->cm, ch ); 100 103 104 #ifdef USE_CURL_MULTI_SOCKET 101 105 pump( web ); 102 103 #ifndef HAVE_CURL_MULTI_SOCKET 106 #else 104 107 if( !evtimer_initialized( &web->timer ) ) 105 { 108 evtimer_set( &web->timer, pulse, web ); 109 if( !evtimer_pending( &web->timer, NULL ) ) { 106 110 struct timeval tv = tr_timevalMsec( PULSE_MSEC ); 107 evtimer_set( &web->timer, pulse, web );108 fprintf( stderr, "no timer running yet... starting one\n" );109 111 evtimer_add( &web->timer, &tv ); 110 112 } … … 113 115 114 116 static void 115 responseHandler( tr_web * web )116 { 117 int remaining= 0;117 processCompletedTasks( tr_web * web ) 118 { 119 int more = 0; 118 120 119 121 do { 120 CURLMsg * msg = curl_multi_info_read( web->cm, & remaining);122 CURLMsg * msg = curl_multi_info_read( web->cm, &more ); 121 123 if( msg && ( msg->msg == CURLMSG_DONE ) ) 122 124 { … … 132 134 curl_easy_getinfo( ch, CURLINFO_RESPONSE_CODE, &response_code ); 133 135 134 fprintf( stderr, "web task %u done\n", task->tag );136 dbgmsg( "task #%lu done", task->tag ); 135 137 task->done_func( web->session, 136 138 response_code, … … 146 148 } 147 149 } 148 while( remaining);150 while( more ); 149 151 150 152 /* remove timeout if there are no transfers left */ … … 153 155 } 154 156 155 #ifdef HAVE_CURL_MULTI_SOCKET156 /* libevent says that sock is ready to be processed, so wake uplibcurl */157 #ifdef USE_CURL_MULTI_SOCKET 158 /* libevent says that sock is ready to be processed, so tell libcurl */ 157 159 static void 158 160 event_callback( int sock, short action, void * vweb ) … … 161 163 CURLMcode rc; 162 164 int mask; 163 164 #if 0165 static const char *strings[] = {166 "NONE","TIMEOUT","READ","TIMEOUT|READ","WRITE","TIMEOUT|WRITE",167 "READ|WRITE","TIMEOUT|READ|WRITE","SIGNAL" };168 fprintf( stderr, "Event on socket %d (%s)\n", sock, strings[action] );169 #endif170 165 171 166 switch (action & (EV_READ|EV_WRITE)) { … … 173 168 case EV_WRITE: mask = CURL_CSELECT_OUT; break; 174 169 case EV_READ|EV_WRITE: mask = CURL_CSELECT_IN|CURL_CSELECT_OUT; break; 175 default: tr_err( "Unknown event % d\n", (int)action ); return;170 default: tr_err( "Unknown event %hd\n", action ); return; 176 171 } 177 172 … … 183 178 tr_err( "%s (%d)", curl_multi_strerror(rc), (int)sock ); 184 179 185 responseHandler( web );180 processCompletedTasks( web ); 186 181 } 187 182 … … 205 200 } 206 201 207 #if 0208 {209 static const char *actions[] = {"NONE", "IN", "OUT", "INOUT", "REMOVE"};210 fprintf( stderr, "Callback on socket %d (%s)\n", (int)sock, actions[action]);211 }212 #endif213 214 202 switch (action) { 215 203 case CURL_POLL_IN: events |= EV_READ; break; … … 226 214 } 227 215 228 /* libevent says that timeout_ms have passed, so wake uplibcurl */216 /* libevent says that timeout_ms have passed, so tell libcurl */ 229 217 static void 230 218 timeout_callback( int socket UNUSED, short action UNUSED, void * vweb ) 231 219 { 220 tr_web * web = vweb; 232 221 CURLMcode rc; 233 tr_web * web = vweb; 234 235 do 236 rc = curl_multi_socket( web->cm, CURL_SOCKET_TIMEOUT, &web->remain ); 222 223 do rc = curl_multi_socket( web->cm, CURL_SOCKET_TIMEOUT, &web->remain ); 237 224 while( rc == CURLM_CALL_MULTI_PERFORM ); 238 239 225 if( rc != CURLM_OK ) 240 226 tr_err( "%s", curl_multi_strerror( rc ) ); … … 262 248 263 249 pump( web ); 264 responseHandler( web );250 processCompletedTasks( web ); 265 251 266 252 if( web->remain > 0 ) { … … 290 276 web->cm = curl_multi_init( ); 291 277 web->session = session; 292 web->remain = 0; 293 294 #ifdef HAVE_CURL_MULTI_SOCKET 278 279 #ifdef USE_CURL_MULTI_SOCKET 295 280 curl_multi_setopt( web->cm, CURLMOPT_SOCKETDATA, web ); 296 281 curl_multi_setopt( web->cm, CURLMOPT_SOCKETFUNCTION, socket_callback );
Note: See TracChangeset
for help on using the changeset viewer.