diff options
Diffstat (limited to 'opentracker.c')
-rw-r--r-- | opentracker.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/opentracker.c b/opentracker.c index a2f0db2..5fa6548 100644 --- a/opentracker.c +++ b/opentracker.c | |||
@@ -106,7 +106,7 @@ void httpresponse(int64 s,struct http_data* h) | |||
106 | ot_peer peer; | 106 | ot_peer peer; |
107 | ot_torrent *torrent; | 107 | ot_torrent *torrent; |
108 | ot_hash *hash = NULL; | 108 | ot_hash *hash = NULL; |
109 | int numwant, tmp, scanon; | 109 | int numwant, tmp, scanon, mode; |
110 | unsigned short port = htons(6881); | 110 | unsigned short port = htons(6881); |
111 | size_t reply_size = 0; | 111 | size_t reply_size = 0; |
112 | 112 | ||
@@ -130,8 +130,37 @@ e400: | |||
130 | case 5: /* scrape ? */ | 130 | case 5: /* scrape ? */ |
131 | if (byte_diff(data,5,"stats")) | 131 | if (byte_diff(data,5,"stats")) |
132 | goto e404; | 132 | goto e404; |
133 | scanon = 1; | ||
134 | mode = STATS_MRTG; | ||
135 | |||
136 | while( scanon ) { | ||
137 | switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) { | ||
138 | case -2: /* terminator */ | ||
139 | scanon = 0; | ||
140 | break; | ||
141 | case -1: /* error */ | ||
142 | goto e404; | ||
143 | case 4: | ||
144 | if(byte_diff(data,4,"mode")) { | ||
145 | scan_urlencoded_query( &c, NULL, SCAN_SEARCHPATH_VALUE ); | ||
146 | continue; | ||
147 | } | ||
148 | size_t len = scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_VALUE ); | ||
149 | if( len <= 0 ) goto e400_param; | ||
150 | if( !byte_diff(data,4,"mrtg")) | ||
151 | mode = STATS_MRTG; | ||
152 | else if( !byte_diff(data,4,"top5")) | ||
153 | mode = STATS_TOP5; | ||
154 | else | ||
155 | goto e400_param; | ||
156 | default: | ||
157 | scan_urlencoded_query( &c, NULL, SCAN_SEARCHPATH_VALUE ); | ||
158 | break; | ||
159 | } | ||
160 | } | ||
161 | |||
133 | /* Enough for http header + whole scrape string */ | 162 | /* Enough for http header + whole scrape string */ |
134 | if( ( reply_size = return_stats_for_tracker( SUCCESS_HTTP_HEADER_LENGTH + static_reply ) ) <= 0 ) | 163 | if( ( reply_size = return_stats_for_tracker( SUCCESS_HTTP_HEADER_LENGTH + static_reply, mode ) ) <= 0 ) |
135 | goto e500; | 164 | goto e500; |
136 | break; | 165 | break; |
137 | case 6: /* scrape ? */ | 166 | case 6: /* scrape ? */ |