diff options
author | erdgeist <> | 2009-01-02 08:57:53 +0000 |
---|---|---|
committer | erdgeist <> | 2009-01-02 08:57:53 +0000 |
commit | 2df09905f5540fee096d48a92cb0c42558498a12 (patch) | |
tree | 68eab61d29719400972485de395dd0465467aea6 /ot_udp.c | |
parent | 548e2b8338b5ee8d24fa928e833f345bb5cb6f0e (diff) |
* opentracker now drops permissions in correct order and really chroots() if ran as root
* lock passing between add_peer_to_torrent and return_peers_for_torrent is now avoided by providing a more general add_peer_to_torrent_and_return_peers function that can be used with NULL parameters to not return any peers (in sync case)
* in order to keep a fast overview how many torrents opentracker maintains, every mutex_bucket_unlock operation expects an additional integer parameter that tells ot_mutex.c how many torrents have been added or removed. A function mutex_get_torrent_count has been introduced.
Diffstat (limited to 'ot_udp.c')
-rw-r--r-- | ot_udp.c | 18 |
1 files changed, 8 insertions, 10 deletions
@@ -41,7 +41,6 @@ static int udp_test_connectionid( const uint32_t * const connid, const char * re | |||
41 | /* UDP implementation according to http://xbtt.sourceforge.net/udp_tracker_protocol.html */ | 41 | /* UDP implementation according to http://xbtt.sourceforge.net/udp_tracker_protocol.html */ |
42 | void handle_udp4( int64 serversocket ) { | 42 | void handle_udp4( int64 serversocket ) { |
43 | ot_peer peer; | 43 | ot_peer peer; |
44 | ot_torrent *torrent; | ||
45 | ot_hash *hash = NULL; | 44 | ot_hash *hash = NULL; |
46 | char remoteip[4]; | 45 | char remoteip[4]; |
47 | uint32_t *inpacket = (uint32_t*)static_inbuf; | 46 | uint32_t *inpacket = (uint32_t*)static_inbuf; |
@@ -79,7 +78,7 @@ void handle_udp4( int64 serversocket ) { | |||
79 | if( r < 98 ) | 78 | if( r < 98 ) |
80 | return; | 79 | return; |
81 | 80 | ||
82 | if( !udp_test_connectionid( inpacket, remoteip )) | 81 | if( !udp_test_connectionid( inpacket, remoteip )) |
83 | fprintf( stderr, "UDP connect Connection id missmatch.\n" ); | 82 | fprintf( stderr, "UDP connect Connection id missmatch.\n" ); |
84 | 83 | ||
85 | /* We do only want to know, if it is zero */ | 84 | /* We do only want to know, if it is zero */ |
@@ -110,20 +109,15 @@ void handle_udp4( int64 serversocket ) { | |||
110 | 109 | ||
111 | if( OT_PEERFLAG( &peer ) & PEER_FLAG_STOPPED ) /* Peer is gone. */ | 110 | if( OT_PEERFLAG( &peer ) & PEER_FLAG_STOPPED ) /* Peer is gone. */ |
112 | r = remove_peer_from_torrent( hash, &peer, static_outbuf, FLAG_UDP ); | 111 | r = remove_peer_from_torrent( hash, &peer, static_outbuf, FLAG_UDP ); |
113 | else { | 112 | else |
114 | torrent = add_peer_to_torrent( hash, &peer WANT_SYNC_PARAM( 0 ) ); | 113 | r = 8 + add_peer_to_torrent_and_return_peers( hash, &peer, FLAG_UDP, numwant, static_outbuf + 8 ); |
115 | if( !torrent ) | ||
116 | return; /* XXX maybe send error */ | ||
117 | |||
118 | r = 8 + return_peers_for_torrent( torrent, numwant, static_outbuf + 8, FLAG_UDP ); | ||
119 | } | ||
120 | 114 | ||
121 | socket_send4( serversocket, static_outbuf, r, remoteip, remoteport ); | 115 | socket_send4( serversocket, static_outbuf, r, remoteip, remoteport ); |
122 | stats_issue_event( EVENT_ANNOUNCE, FLAG_UDP, r ); | 116 | stats_issue_event( EVENT_ANNOUNCE, FLAG_UDP, r ); |
123 | break; | 117 | break; |
124 | 118 | ||
125 | case 2: /* This is a scrape action */ | 119 | case 2: /* This is a scrape action */ |
126 | if( !udp_test_connectionid( inpacket, remoteip )) | 120 | if( !udp_test_connectionid( inpacket, remoteip )) |
127 | fprintf( stderr, "UDP scrape Connection id missmatch.\n" ); | 121 | fprintf( stderr, "UDP scrape Connection id missmatch.\n" ); |
128 | 122 | ||
129 | outpacket[0] = htonl( 2 ); /* scrape action */ | 123 | outpacket[0] = htonl( 2 ); /* scrape action */ |
@@ -138,4 +132,8 @@ void handle_udp4( int64 serversocket ) { | |||
138 | } | 132 | } |
139 | } | 133 | } |
140 | 134 | ||
135 | void udp_init( ) { | ||
136 | |||
137 | } | ||
138 | |||
141 | const char *g_version_udp_c = "$Source$: $Revision$\n"; | 139 | const char *g_version_udp_c = "$Source$: $Revision$\n"; |