summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerdgeist <>2006-12-19 18:01:28 +0000
committererdgeist <>2006-12-19 18:01:28 +0000
commitc87389f92987fac73aabd5798fe10fd44d42cf4e (patch)
tree549baf2f7a7cf9f6efab289aaeeae06195cf82ec
parentf406961fe0dc2945b2eaeaefac5e9fd7d087fde8 (diff)
Now every answer goes in one buffer
-rw-r--r--opentracker.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/opentracker.c b/opentracker.c
index 342acf7..0ff0100 100644
--- a/opentracker.c
+++ b/opentracker.c
@@ -70,7 +70,6 @@ void httperror(struct http_data* h,const char* title,const char* message)
70} 70}
71 71
72// bestimmten http parameter auslesen und adresse zurueckgeben 72// bestimmten http parameter auslesen und adresse zurueckgeben
73
74const char* http_header(struct http_data* r,const char* h) 73const char* http_header(struct http_data* r,const char* h)
75{ 74{
76 long i; 75 long i;
@@ -160,10 +159,10 @@ e400:
160 goto bailout; 159 goto bailout;
161 } 160 }
162 161
163 // Enough for whole scrape string 162 // Enough for http header + whole scrape string
164 reply = malloc( 128 ); 163 reply = malloc( 208 );
165 if( reply ) 164 if( reply )
166 reply_size = return_scrape_for_torrent( hash, reply ); 165 reply_size = return_scrape_for_torrent( hash, 80 + reply );
167 if( !reply || ( reply_size < 0 ) ) { 166 if( !reply || ( reply_size < 0 ) ) {
168 if( reply ) free( reply ); 167 if( reply ) free( reply );
169 goto e500; 168 goto e500;
@@ -252,7 +251,10 @@ e400:
252 251
253 if( OT_FLAG( &peer ) & PEER_FLAG_STOPPED ) { 252 if( OT_FLAG( &peer ) & PEER_FLAG_STOPPED ) {
254 remove_peer_from_torrent( hash, &peer ); 253 remove_peer_from_torrent( hash, &peer );
255 reply = strdup( "d15:warning message4:Okaye" ); reply_size = 26; 254 reply = malloc( 106 );
255 if( !reply )
256 goto e500;
257 MEMMOVE( reply + 80, "d15:warning message4:Okaye", reply_size = 26 );
256 } else { 258 } else {
257 torrent = add_peer_to_torrent( hash, &peer ); 259 torrent = add_peer_to_torrent( hash, &peer );
258 if( !torrent ) { 260 if( !torrent ) {
@@ -260,9 +262,9 @@ e500:
260 httperror(h,"500 Internal Server Error","A server error has occured. Please retry later."); 262 httperror(h,"500 Internal Server Error","A server error has occured. Please retry later.");
261 goto bailout; 263 goto bailout;
262 } 264 }
263 reply = malloc( numwant*6+128 ); // peerlist + seeder, peers and lametta n*6+81 a.t.m. 265 reply = malloc( 80+numwant*6+128 ); // http header + peerlist + seeder, peers and lametta 80 + n*6+81 a.t.m.
264 if( reply ) 266 if( reply )
265 reply_size = return_peers_for_torrent( torrent, numwant, reply ); 267 reply_size = return_peers_for_torrent( torrent, numwant, 80 + reply );
266 if( !reply || ( reply_size <= 0 ) ) { 268 if( !reply || ( reply_size <= 0 ) ) {
267 if( reply ) free( reply ); 269 if( reply ) free( reply );
268 goto e500; 270 goto e500;
@@ -272,10 +274,10 @@ e500:
272 case 11: 274 case 11:
273 if( byte_diff(data,11,"mrtg_scrape")) 275 if( byte_diff(data,11,"mrtg_scrape"))
274 goto e404; 276 goto e404;
275 reply = malloc( 128 ); 277 reply = malloc( 256 );
276 { 278 {
277 unsigned long seconds_elapsed = time( NULL ) - ot_start_time; 279 unsigned long seconds_elapsed = time( NULL ) - ot_start_time;
278 reply_size = sprintf( reply, "%d\n%d\nUp: %ld seconds (%ld hours)\nPretuned by german engineers, currently handling %li connections per second.", 280 reply_size = sprintf( 80+reply, "%d\n%d\nUp: %ld seconds (%ld hours)\nPretuned by german engineers, currently handling %li connections per second.",
279 ot_overall_connections, ot_overall_connections, seconds_elapsed, seconds_elapsed / 3600, ot_overall_connections / ( seconds_elapsed ? seconds_elapsed : 1 ) ); 281 ot_overall_connections, ot_overall_connections, seconds_elapsed, seconds_elapsed / 3600, ot_overall_connections / ( seconds_elapsed ? seconds_elapsed : 1 ) );
280 } 282 }
281 break; 283 break;
@@ -285,9 +287,11 @@ e404:
285 goto bailout; 287 goto bailout;
286 } 288 }
287 289
288 c=(char*)malloc(80); 290 if( reply && reply_size ) {
289 iob_addbuf_free( &h->iob, c, sprintf( c, "HTTP/1.0 200 OK\r\nContent-Type: text/plain\r\nContent-Length: %ld\r\n\r\n", (long)reply_size )); 291 MEMMOVE( reply, "HTTP/1.0 200 OK\r\nContent-Type: text/plain\r\nContent-Length: X \r\n\r\n", 80 );
290 if( reply && reply_size ) iob_addbuf_free(&h->iob, reply, reply_size ); 292 fmt_ulonglong( reply+59, (long long)reply_size );
293 iob_addbuf_free(&h->iob, reply, 80+reply_size );
294 }
291 295
292bailout: 296bailout:
293 io_dontwantread(s); 297 io_dontwantread(s);