mirror of
				git://erdgeist.org/opentracker
				synced 2025-11-04 11:53:22 +08:00 
			
		
		
		
	Add some subnet debugging features
This commit is contained in:
		
							parent
							
								
									20955311d1
								
							
						
					
					
						commit
						6073127ad0
					
				
							
								
								
									
										62
									
								
								ot_http.c
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								ot_http.c
									
									
									
									
									
								
							@ -16,6 +16,7 @@
 | 
			
		||||
#include "array.h"
 | 
			
		||||
#include "iob.h"
 | 
			
		||||
#include "ip6.h"
 | 
			
		||||
#include "scan.h"
 | 
			
		||||
 | 
			
		||||
/* Opentracker */
 | 
			
		||||
#include "trackerlogic.h"
 | 
			
		||||
@ -168,7 +169,7 @@ static const ot_keywords keywords_mode[] =
 | 
			
		||||
    { "busy", TASK_STATS_BUSY_NETWORKS }, { "torr", TASK_STATS_TORRENTS }, { "fscr", TASK_STATS_FULLSCRAPE },
 | 
			
		||||
    { "s24s", TASK_STATS_SLASH24S }, { "tpbs", TASK_STATS_TPB }, { "herr", TASK_STATS_HTTPERRORS }, { "completed", TASK_STATS_COMPLETED },
 | 
			
		||||
    { "top10", TASK_STATS_TOP10 }, { "renew", TASK_STATS_RENEW }, { "syncs", TASK_STATS_SYNCS }, { "version", TASK_STATS_VERSION },
 | 
			
		||||
    { "everything", TASK_STATS_EVERYTHING }, { "statedump", TASK_FULLSCRAPE_TRACKERSTATE }, { NULL, -3 } };
 | 
			
		||||
    { "everything", TASK_STATS_EVERYTHING }, { "statedump", TASK_FULLSCRAPE_TRACKERSTATE }, { "fulllog", TASK_STATS_FULLLOG }, { NULL, -3 } };
 | 
			
		||||
static const ot_keywords keywords_format[] =
 | 
			
		||||
  { { "bin", TASK_FULLSCRAPE_TPB_BINARY }, { "ben", TASK_FULLSCRAPE }, { "url", TASK_FULLSCRAPE_TPB_URLENCODED },
 | 
			
		||||
    { "txt", TASK_FULLSCRAPE_TPB_ASCII }, { NULL, -3 } };
 | 
			
		||||
@ -306,6 +307,9 @@ static ot_keywords keywords_announce[] = { { "port", 1 }, { "left", 2 }, { "even
 | 
			
		||||
#ifdef WANT_IP_FROM_QUERY_STRING
 | 
			
		||||
{ "ip", 7 },
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef WANT_FULLLOG_NETWORKS
 | 
			
		||||
{ "lognet", 8 },
 | 
			
		||||
#endif
 | 
			
		||||
{ NULL, -3 } };
 | 
			
		||||
static ot_keywords keywords_announce_event[] = { { "completed", 1 }, { "stopped", 2 }, { NULL, -3 } };
 | 
			
		||||
static ssize_t http_handle_announce( const int64 sock, struct ot_workstruct *ws, char *read_ptr ) {
 | 
			
		||||
@ -411,6 +415,37 @@ static ssize_t http_handle_announce( const int64 sock, struct ot_workstruct *ws,
 | 
			
		||||
        OT_SETIP( &peer, tmp_buf1 );
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef WANT_FULLLOG_NETWORKS
 | 
			
		||||
      case 8: /* matched "lognet" */
 | 
			
		||||
      {
 | 
			
		||||
        //if( accesslist_isblessed( cookie->ip, OT_PERMISSION_MAY_STAT ) ) {
 | 
			
		||||
          char *tmp_buf = ws->reply;
 | 
			
		||||
          ot_net net;
 | 
			
		||||
          signed short parsed, bits;
 | 
			
		||||
 | 
			
		||||
          len = scan_urlencoded_query( &read_ptr, tmp_buf, SCAN_SEARCHPATH_VALUE );
 | 
			
		||||
          tmp_buf[len] = 0;
 | 
			
		||||
          if( len <= 0 ) HTTPERROR_400_PARAM;
 | 
			
		||||
          if( *tmp_buf == '-' ) {
 | 
			
		||||
            loglist_reset( );
 | 
			
		||||
            return ws->reply_size = sprintf( ws->reply, "Successfully removed.\n" );
 | 
			
		||||
          }
 | 
			
		||||
          parsed = scan_ip6( tmp_buf, net.address );
 | 
			
		||||
          if( !parsed ) HTTPERROR_400_PARAM;
 | 
			
		||||
          if( tmp_buf[parsed++] != '/' )
 | 
			
		||||
            bits = 128;
 | 
			
		||||
          else {
 | 
			
		||||
            parsed = scan_short( tmp_buf + parsed, &bits );
 | 
			
		||||
            if( !parsed ) HTTPERROR_400_PARAM; 
 | 
			
		||||
            if( ip6_isv4mapped( net.address ) )
 | 
			
		||||
              bits += 96;
 | 
			
		||||
          }
 | 
			
		||||
          net.bits = bits;
 | 
			
		||||
          loglist_add_network( &net );
 | 
			
		||||
          return ws->reply_size = sprintf( ws->reply, "Successfully added.\n" );
 | 
			
		||||
        //}
 | 
			
		||||
      }
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@ -437,6 +472,31 @@ ssize_t http_handle_request( const int64 sock, struct ot_workstruct *ws ) {
 | 
			
		||||
  ssize_t reply_off, len;
 | 
			
		||||
  char   *read_ptr = ws->request, *write_ptr;
 | 
			
		||||
 | 
			
		||||
#ifdef WANT_FULLLOG_NETWORKS
 | 
			
		||||
  struct http_data *cookie = io_getcookie( sock );
 | 
			
		||||
  if( loglist_check_address( cookie->ip ) ) {
 | 
			
		||||
    ot_log *log = malloc( sizeof( ot_log ) );
 | 
			
		||||
    printf( "Hello World\n" );
 | 
			
		||||
    if( log ) {
 | 
			
		||||
      log->size = ws->request_size;
 | 
			
		||||
      log->data = malloc( ws->request_size );
 | 
			
		||||
      log->next = 0;
 | 
			
		||||
      log->time = g_now_seconds;
 | 
			
		||||
      memcpy( log->ip, cookie->ip, sizeof(ot_ip6));
 | 
			
		||||
      if( log->data ) {
 | 
			
		||||
        memcpy( log->data, ws->request, ws->request_size );
 | 
			
		||||
        if( !g_logchain_first )
 | 
			
		||||
          g_logchain_first = g_logchain_last = log;
 | 
			
		||||
        else {
 | 
			
		||||
          g_logchain_last->next = log;
 | 
			
		||||
          g_logchain_last = log;  
 | 
			
		||||
        }        
 | 
			
		||||
      } else
 | 
			
		||||
        free( log );
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _DEBUG_HTTPERROR
 | 
			
		||||
  reply_off = ws->request_size;
 | 
			
		||||
  if( ws->request_size >= G_DEBUGBUF_SIZE )
 | 
			
		||||
 | 
			
		||||
@ -39,6 +39,7 @@ typedef enum {
 | 
			
		||||
  TASK_STATS_SLASH24S              = 0x0103,
 | 
			
		||||
  TASK_STATS_TOP10                 = 0x0104,
 | 
			
		||||
  TASK_STATS_EVERYTHING            = 0x0105,
 | 
			
		||||
  TASK_STATS_FULLLOG               = 0x0106,
 | 
			
		||||
 | 
			
		||||
  TASK_FULLSCRAPE                  = 0x0200, /* Default mode */
 | 
			
		||||
  TASK_FULLSCRAPE_TPB_BINARY       = 0x0201,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										37
									
								
								ot_stats.c
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								ot_stats.c
									
									
									
									
									
								
							@ -26,6 +26,7 @@
 | 
			
		||||
#include "ot_mutex.h"
 | 
			
		||||
#include "ot_iovec.h"
 | 
			
		||||
#include "ot_stats.h"
 | 
			
		||||
#include "ot_accesslist.h"
 | 
			
		||||
 | 
			
		||||
#ifndef NO_FULLSCRAPE_LOGGING
 | 
			
		||||
#define LOG_TO_STDERR( ... ) fprintf( stderr, __VA_ARGS__ )
 | 
			
		||||
@ -477,6 +478,38 @@ static size_t stats_return_completed_mrtg( char * reply ) {
 | 
			
		||||
                 );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef WANT_FULLLOG_NETWORKS
 | 
			
		||||
static void stats_return_fulllog( int *iovec_entries, struct iovec **iovector, char *r ) {
 | 
			
		||||
  ot_log *loglist = g_logchain_first, *llnext;
 | 
			
		||||
  char * re = r + OT_STATS_TMPSIZE;
 | 
			
		||||
 | 
			
		||||
  g_logchain_first = g_logchain_last = 0;
 | 
			
		||||
  
 | 
			
		||||
  while( loglist ) {
 | 
			
		||||
    if( r + ( loglist->size + 64 ) >= re ) {
 | 
			
		||||
      r = iovec_fix_increase_or_free( iovec_entries, iovector, r, 32 * OT_STATS_TMPSIZE );
 | 
			
		||||
      if( !r ) return;
 | 
			
		||||
      re = r + 32 * OT_STATS_TMPSIZE;
 | 
			
		||||
    }
 | 
			
		||||
    r += sprintf( r, "%08ld: ", loglist->time );
 | 
			
		||||
    r += fmt_ip6c( r, loglist->ip );
 | 
			
		||||
    *r++ = '\n';
 | 
			
		||||
    memcpy( r, loglist->data, loglist->size );
 | 
			
		||||
    r += loglist->size;
 | 
			
		||||
    *r++ = '\n';
 | 
			
		||||
    *r++ = '*';
 | 
			
		||||
    *r++ = '\n';
 | 
			
		||||
    *r++ = '\n';
 | 
			
		||||
 | 
			
		||||
    llnext = loglist->next;
 | 
			
		||||
    free( loglist->data );
 | 
			
		||||
    free( loglist );
 | 
			
		||||
    loglist = llnext;
 | 
			
		||||
  }
 | 
			
		||||
  iovec_fixlast( iovec_entries, iovector, r );
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static size_t stats_return_everything( char * reply ) {
 | 
			
		||||
  torrent_stats stats = {0,0,0};
 | 
			
		||||
  int i;
 | 
			
		||||
@ -570,6 +603,10 @@ static void stats_make( int *iovec_entries, struct iovec **iovector, ot_tasktype
 | 
			
		||||
    case TASK_STATS_SLASH24S:    r += stats_slash24s_txt( r, 128 );         break;
 | 
			
		||||
    case TASK_STATS_TOP10:       r += stats_top10_txt( r );                 break;
 | 
			
		||||
    case TASK_STATS_EVERYTHING:  r += stats_return_everything( r );         break;
 | 
			
		||||
#ifdef WANT_FULLLOG_NETWORKS
 | 
			
		||||
    case TASK_STATS_FULLLOG:      stats_return_fulllog( iovec_entries, iovector, r );
 | 
			
		||||
                                                                            return;
 | 
			
		||||
#endif
 | 
			
		||||
    default:
 | 
			
		||||
      iovec_free(iovec_entries, iovector);
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user