diff options
author | erdgeist <> | 2008-11-28 22:21:10 +0000 |
---|---|---|
committer | erdgeist <> | 2008-11-28 22:21:10 +0000 |
commit | 334c6e4bbb97a4c0656e1b07c3e6a565f68eae2b (patch) | |
tree | f84ad28c39b32d0906e32e8ba5e461ecdaed7799 /ot_http.c | |
parent | ff6c0339c13a6b42149ba91da14dbb824307cea7 (diff) |
The BIG refactoring [tm]. Too many changes to count them. If it doesn't suite you, revert to last version.
Diffstat (limited to 'ot_http.c')
-rw-r--r-- | ot_http.c | 62 |
1 files changed, 2 insertions, 60 deletions
@@ -5,7 +5,6 @@ | |||
5 | 5 | ||
6 | /* System */ | 6 | /* System */ |
7 | #include <sys/types.h> | 7 | #include <sys/types.h> |
8 | #include <sys/uio.h> | ||
9 | #include <arpa/inet.h> | 8 | #include <arpa/inet.h> |
10 | #include <stdlib.h> | 9 | #include <stdlib.h> |
11 | #include <stdio.h> | 10 | #include <stdio.h> |
@@ -26,7 +25,6 @@ | |||
26 | #include "ot_fullscrape.h" | 25 | #include "ot_fullscrape.h" |
27 | #include "ot_stats.h" | 26 | #include "ot_stats.h" |
28 | #include "ot_accesslist.h" | 27 | #include "ot_accesslist.h" |
29 | #include "ot_sync.h" | ||
30 | 28 | ||
31 | #define OT_MAXMULTISCRAPE_COUNT 64 | 29 | #define OT_MAXMULTISCRAPE_COUNT 64 |
32 | static ot_hash multiscrape_buf[OT_MAXMULTISCRAPE_COUNT]; | 30 | static ot_hash multiscrape_buf[OT_MAXMULTISCRAPE_COUNT]; |
@@ -165,52 +163,6 @@ ssize_t http_sendiovecdata( const int64 client_socket, int iovec_entries, struct | |||
165 | return 0; | 163 | return 0; |
166 | } | 164 | } |
167 | 165 | ||
168 | #ifdef WANT_SYNC_BATCH | ||
169 | static ssize_t http_handle_sync( const int64 client_socket, char *data ) { | ||
170 | struct http_data* h = io_getcookie( client_socket ); | ||
171 | size_t len; | ||
172 | int mode = SYNC_OUT, scanon = 1; | ||
173 | char *c = data; | ||
174 | |||
175 | if( !accesslist_isblessed( h->ip, OT_PERMISSION_MAY_SYNC ) ) | ||
176 | HTTPERROR_403_IP; | ||
177 | |||
178 | while( scanon ) { | ||
179 | switch( scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_PARAM ) ) { | ||
180 | case -2: scanon = 0; break; /* TERMINATOR */ | ||
181 | case -1: HTTPERROR_400_PARAM; /* PARSE ERROR */ | ||
182 | default: scan_urlencoded_skipvalue( &c ); break; | ||
183 | case 9: | ||
184 | if(byte_diff(data,9,"changeset")) { | ||
185 | scan_urlencoded_skipvalue( &c ); | ||
186 | continue; | ||
187 | } | ||
188 | /* ignore this, when we dont at least see "d4:syncdee" */ | ||
189 | if( ( len = scan_urlencoded_query( &c, data = c, SCAN_SEARCHPATH_VALUE ) ) < 10 ) HTTPERROR_400_PARAM; | ||
190 | if( add_changeset_to_tracker( (uint8_t*)data, len ) ) HTTPERROR_400_PARAM; | ||
191 | if( mode == SYNC_OUT ) { | ||
192 | stats_issue_event( EVENT_SYNC_IN, FLAG_TCP, 0 ); | ||
193 | mode = SYNC_IN; | ||
194 | } | ||
195 | break; | ||
196 | } | ||
197 | } | ||
198 | |||
199 | if( mode == SYNC_OUT ) { | ||
200 | /* Pass this task to the worker thread */ | ||
201 | h->flag |= STRUCT_HTTP_FLAG_WAITINGFORTASK; | ||
202 | stats_issue_event( EVENT_SYNC_OUT_REQUEST, FLAG_TCP, 0 ); | ||
203 | sync_deliver( client_socket ); | ||
204 | io_dontwantread( client_socket ); | ||
205 | return -2; | ||
206 | } | ||
207 | |||
208 | /* Simple but proof for now */ | ||
209 | memmove( static_outbuf + SUCCESS_HTTP_HEADER_LENGTH, "OK", 2); | ||
210 | return 2; | ||
211 | } | ||
212 | #endif | ||
213 | |||
214 | static ssize_t http_handle_stats( const int64 client_socket, char *data, char *d, size_t l ) { | 166 | static ssize_t http_handle_stats( const int64 client_socket, char *data, char *d, size_t l ) { |
215 | char *c = data; | 167 | char *c = data; |
216 | int mode = TASK_STATS_PEERS, scanon = 1, format = 0; | 168 | int mode = TASK_STATS_PEERS, scanon = 1, format = 0; |
@@ -245,10 +197,6 @@ static ssize_t http_handle_stats( const int64 client_socket, char *data, char *d | |||
245 | mode = TASK_STATS_UDP; | 197 | mode = TASK_STATS_UDP; |
246 | else if( !byte_diff(data,4,"busy")) | 198 | else if( !byte_diff(data,4,"busy")) |
247 | mode = TASK_STATS_BUSY_NETWORKS; | 199 | mode = TASK_STATS_BUSY_NETWORKS; |
248 | else if( !byte_diff(data,4,"dmem")) | ||
249 | mode = TASK_STATS_MEMORY; | ||
250 | else if( !byte_diff(data,4,"vdeb")) | ||
251 | mode = TASK_STATS_VECTOR_DEBUG; | ||
252 | else if( !byte_diff(data,4,"torr")) | 200 | else if( !byte_diff(data,4,"torr")) |
253 | mode = TASK_STATS_TORRENTS; | 201 | mode = TASK_STATS_TORRENTS; |
254 | else if( !byte_diff(data,4,"fscr")) | 202 | else if( !byte_diff(data,4,"fscr")) |
@@ -265,7 +213,7 @@ static ssize_t http_handle_stats( const int64 client_socket, char *data, char *d | |||
265 | case 5: | 213 | case 5: |
266 | if( !byte_diff(data,5,"top10")) | 214 | if( !byte_diff(data,5,"top10")) |
267 | mode = TASK_STATS_TOP10; | 215 | mode = TASK_STATS_TOP10; |
268 | if( !byte_diff(data,5,"renew")) | 216 | else if( !byte_diff(data,5,"renew")) |
269 | mode = TASK_STATS_RENEW; | 217 | mode = TASK_STATS_RENEW; |
270 | else | 218 | else |
271 | HTTPERROR_400_PARAM; | 219 | HTTPERROR_400_PARAM; |
@@ -524,7 +472,7 @@ static ssize_t http_handle_announce( const int64 client_socket, char *data ) { | |||
524 | len = remove_peer_from_torrent( hash, &peer, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, FLAG_TCP ); | 472 | len = remove_peer_from_torrent( hash, &peer, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, FLAG_TCP ); |
525 | else { | 473 | else { |
526 | torrent = add_peer_to_torrent( hash, &peer WANT_SYNC_PARAM( 0 ) ); | 474 | torrent = add_peer_to_torrent( hash, &peer WANT_SYNC_PARAM( 0 ) ); |
527 | if( !torrent || !( len = return_peers_for_torrent( hash, numwant, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, FLAG_TCP ) ) ) HTTPERROR_500; | 475 | if( !torrent || !( len = return_peers_for_torrent( torrent, numwant, SUCCESS_HTTP_HEADER_LENGTH + static_outbuf, FLAG_TCP ) ) ) HTTPERROR_500; |
528 | } | 476 | } |
529 | stats_issue_event( EVENT_ANNOUNCE, FLAG_TCP, len); | 477 | stats_issue_event( EVENT_ANNOUNCE, FLAG_TCP, len); |
530 | return len; | 478 | return len; |
@@ -573,12 +521,6 @@ ssize_t http_handle_request( const int64 client_socket, char *data, size_t recv_ | |||
573 | reply_size = http_handle_scrape( client_socket, c ); | 521 | reply_size = http_handle_scrape( client_socket, c ); |
574 | /* All the rest is matched the standard way */ | 522 | /* All the rest is matched the standard way */ |
575 | else switch( len ) { | 523 | else switch( len ) { |
576 | #ifdef WANT_SYNC_BATCH | ||
577 | case 4: /* sync ? */ | ||
578 | if( byte_diff( data, 4, "sync") ) HTTPERROR_404; | ||
579 | reply_size = http_handle_sync( client_socket, c ); | ||
580 | break; | ||
581 | #endif | ||
582 | case 5: /* stats ? */ | 524 | case 5: /* stats ? */ |
583 | if( byte_diff( data, 5, "stats") ) HTTPERROR_404; | 525 | if( byte_diff( data, 5, "stats") ) HTTPERROR_404; |
584 | reply_size = http_handle_stats( client_socket, c, recv_header, recv_length ); | 526 | reply_size = http_handle_stats( client_socket, c, recv_header, recv_length ); |