@@ -328,13 +328,34 @@ pub async fn http_service_announce_handler(request: HttpRequest, ip: IpAddr, dat
328328 IpAddr :: V4 ( _) => {
329329 if announce_unwrapped. left != 0 {
330330 let seeds = data. get_peers (
331- torrent_entry. seeds . clone ( ) ,
331+ & torrent_entry. seeds ,
332332 TorrentPeersType :: IPv4 ,
333333 Some ( ip) ,
334334 72
335335 ) ;
336- if seeds. is_some ( ) {
337- for ( _, torrent_peer) in seeds. unwrap ( ) . iter ( ) {
336+ for ( _, torrent_peer) in seeds. iter ( ) {
337+ let peer_pre_parse = match torrent_peer. peer_addr . ip ( ) . to_string ( ) . parse :: < Ipv4Addr > ( ) {
338+ Ok ( ip) => { ip }
339+ Err ( e) => {
340+ error ! ( "[IPV4 Error] {} - {}" , torrent_peer. peer_addr. ip( ) , e) ;
341+ return HttpResponse :: Ok ( ) . content_type ( ContentType :: plaintext ( ) ) . body ( ben_map ! {
342+ "failure reason" => ben_bytes!( e. to_string( ) )
343+ } . encode ( ) ) ;
344+ }
345+ } ;
346+ let _ = peers_list. write ( & u32:: from ( peer_pre_parse) . to_be_bytes ( ) ) ;
347+ peers_list. write_all ( & announce_unwrapped. clone ( ) . port . to_be_bytes ( ) ) . unwrap ( ) ;
348+ }
349+ }
350+ if peers_list. len ( ) != 72 {
351+ let peers = data. get_peers (
352+ & torrent_entry. peers ,
353+ TorrentPeersType :: IPv4 ,
354+ Some ( ip) ,
355+ 72
356+ ) ;
357+ for ( _, torrent_peer) in peers. iter ( ) {
358+ if peers_list. len ( ) != 72 {
338359 let peer_pre_parse = match torrent_peer. peer_addr . ip ( ) . to_string ( ) . parse :: < Ipv4Addr > ( ) {
339360 Ok ( ip) => { ip }
340361 Err ( e) => {
@@ -346,34 +367,9 @@ pub async fn http_service_announce_handler(request: HttpRequest, ip: IpAddr, dat
346367 } ;
347368 let _ = peers_list. write ( & u32:: from ( peer_pre_parse) . to_be_bytes ( ) ) ;
348369 peers_list. write_all ( & announce_unwrapped. clone ( ) . port . to_be_bytes ( ) ) . unwrap ( ) ;
370+ continue ;
349371 }
350- }
351- }
352- if peers_list. len ( ) != 72 {
353- let peers = data. get_peers (
354- torrent_entry. peers . clone ( ) ,
355- TorrentPeersType :: IPv4 ,
356- Some ( ip) ,
357- 72
358- ) ;
359- if peers. is_some ( ) {
360- for ( _, torrent_peer) in peers. unwrap ( ) . iter ( ) {
361- if peers_list. len ( ) != 72 {
362- let peer_pre_parse = match torrent_peer. peer_addr . ip ( ) . to_string ( ) . parse :: < Ipv4Addr > ( ) {
363- Ok ( ip) => { ip }
364- Err ( e) => {
365- error ! ( "[IPV4 Error] {} - {}" , torrent_peer. peer_addr. ip( ) , e) ;
366- return HttpResponse :: Ok ( ) . content_type ( ContentType :: plaintext ( ) ) . body ( ben_map ! {
367- "failure reason" => ben_bytes!( e. to_string( ) )
368- } . encode ( ) ) ;
369- }
370- } ;
371- let _ = peers_list. write ( & u32:: from ( peer_pre_parse) . to_be_bytes ( ) ) ;
372- peers_list. write_all ( & announce_unwrapped. clone ( ) . port . to_be_bytes ( ) ) . unwrap ( ) ;
373- continue ;
374- }
375- break ;
376- }
372+ break ;
377373 }
378374 }
379375 HttpResponse :: Ok ( ) . content_type ( ContentType :: plaintext ( ) ) . body ( ben_map ! {
@@ -388,52 +384,48 @@ pub async fn http_service_announce_handler(request: HttpRequest, ip: IpAddr, dat
388384 IpAddr :: V6 ( _) => {
389385 if announce_unwrapped. left != 0 {
390386 let seeds = data. get_peers (
391- torrent_entry. seeds . clone ( ) ,
387+ & torrent_entry. seeds ,
388+ TorrentPeersType :: IPv6 ,
389+ Some ( ip) ,
390+ 72
391+ ) ;
392+ for ( _, torrent_peer) in seeds. iter ( ) {
393+ let peer_pre_parse = match torrent_peer. peer_addr . ip ( ) . to_string ( ) . parse :: < Ipv6Addr > ( ) {
394+ Ok ( ip) => { ip }
395+ Err ( e) => {
396+ error ! ( "[IPV6 Error] {} - {}" , torrent_peer. peer_addr. ip( ) , e) ;
397+ return HttpResponse :: Ok ( ) . content_type ( ContentType :: plaintext ( ) ) . body ( ben_map ! {
398+ "failure reason" => ben_bytes!( e. to_string( ) )
399+ } . encode ( ) ) ;
400+ }
401+ } ;
402+ let _ = peers_list. write ( & u128:: from ( peer_pre_parse) . to_be_bytes ( ) ) ;
403+ peers_list. write_all ( & announce_unwrapped. clone ( ) . port . to_be_bytes ( ) ) . unwrap ( ) ;
404+ }
405+ }
406+ if peers_list. len ( ) != 72 {
407+ let peers = data. get_peers (
408+ & torrent_entry. peers ,
392409 TorrentPeersType :: IPv6 ,
393410 Some ( ip) ,
394411 72
395412 ) ;
396- if seeds . is_some ( ) {
397- for ( _ , torrent_peer ) in seeds . unwrap ( ) . iter ( ) {
413+ for ( _ , torrent_peer ) in peers . iter ( ) {
414+ if peers_list . len ( ) != 72 {
398415 let peer_pre_parse = match torrent_peer. peer_addr . ip ( ) . to_string ( ) . parse :: < Ipv6Addr > ( ) {
399416 Ok ( ip) => { ip }
400417 Err ( e) => {
401418 error ! ( "[IPV6 Error] {} - {}" , torrent_peer. peer_addr. ip( ) , e) ;
402419 return HttpResponse :: Ok ( ) . content_type ( ContentType :: plaintext ( ) ) . body ( ben_map ! {
403- "failure reason" => ben_bytes!( e. to_string( ) )
404- } . encode ( ) ) ;
420+ "failure reason" => ben_bytes!( e. to_string( ) )
421+ } . encode ( ) ) ;
405422 }
406423 } ;
407424 let _ = peers_list. write ( & u128:: from ( peer_pre_parse) . to_be_bytes ( ) ) ;
408425 peers_list. write_all ( & announce_unwrapped. clone ( ) . port . to_be_bytes ( ) ) . unwrap ( ) ;
426+ continue ;
409427 }
410- }
411- }
412- if peers_list. len ( ) != 72 {
413- let peers = data. get_peers (
414- torrent_entry. peers . clone ( ) ,
415- TorrentPeersType :: IPv6 ,
416- Some ( ip) ,
417- 72
418- ) ;
419- if peers. is_some ( ) {
420- for ( _, torrent_peer) in peers. unwrap ( ) . iter ( ) {
421- if peers_list. len ( ) != 72 {
422- let peer_pre_parse = match torrent_peer. peer_addr . ip ( ) . to_string ( ) . parse :: < Ipv6Addr > ( ) {
423- Ok ( ip) => { ip }
424- Err ( e) => {
425- error ! ( "[IPV6 Error] {} - {}" , torrent_peer. peer_addr. ip( ) , e) ;
426- return HttpResponse :: Ok ( ) . content_type ( ContentType :: plaintext ( ) ) . body ( ben_map ! {
427- "failure reason" => ben_bytes!( e. to_string( ) )
428- } . encode ( ) ) ;
429- }
430- } ;
431- let _ = peers_list. write ( & u128:: from ( peer_pre_parse) . to_be_bytes ( ) ) ;
432- peers_list. write_all ( & announce_unwrapped. clone ( ) . port . to_be_bytes ( ) ) . unwrap ( ) ;
433- continue ;
434- }
435- break ;
436- }
428+ break ;
437429 }
438430 }
439431 HttpResponse :: Ok ( ) . content_type ( ContentType :: plaintext ( ) ) . body ( ben_map ! {
@@ -454,40 +446,36 @@ pub async fn http_service_announce_handler(request: HttpRequest, ip: IpAddr, dat
454446 IpAddr :: V4 ( _) => {
455447 if announce_unwrapped. left != 0 {
456448 let seeds = data. get_peers (
457- torrent_entry. seeds . clone ( ) ,
449+ & torrent_entry. seeds ,
458450 TorrentPeersType :: IPv4 ,
459451 Some ( ip) ,
460452 72
461453 ) ;
462- if seeds. is_some ( ) {
463- for ( peer_id, torrent_peer) in seeds. unwrap ( ) . iter ( ) {
464- peers_list_mut. push ( ben_map ! {
465- "peer id" => ben_bytes!( peer_id. to_string( ) ) ,
466- "ip" => ben_bytes!( torrent_peer. peer_addr. ip( ) . to_string( ) ) ,
467- "port" => ben_int!( torrent_peer. peer_addr. port( ) as i64 )
468- } ) ;
469- }
454+ for ( peer_id, torrent_peer) in seeds. iter ( ) {
455+ peers_list_mut. push ( ben_map ! {
456+ "peer id" => ben_bytes!( peer_id. to_string( ) ) ,
457+ "ip" => ben_bytes!( torrent_peer. peer_addr. ip( ) . to_string( ) ) ,
458+ "port" => ben_int!( torrent_peer. peer_addr. port( ) as i64 )
459+ } ) ;
470460 }
471461 }
472462 if peers_list_mut. len ( ) != 72 {
473463 let peers = data. get_peers (
474- torrent_entry. peers . clone ( ) ,
464+ & torrent_entry. peers ,
475465 TorrentPeersType :: IPv4 ,
476466 Some ( ip) ,
477467 72
478468 ) ;
479- if peers. is_some ( ) {
480- for ( peer_id, torrent_peer) in peers. unwrap ( ) . iter ( ) {
481- if peers_list_mut. len ( ) != 72 {
482- peers_list_mut. push ( ben_map ! {
483- "peer id" => ben_bytes!( peer_id. to_string( ) ) ,
484- "ip" => ben_bytes!( torrent_peer. peer_addr. ip( ) . to_string( ) ) ,
485- "port" => ben_int!( torrent_peer. peer_addr. port( ) as i64 )
486- } ) ;
487- continue ;
488- }
489- break ;
469+ for ( peer_id, torrent_peer) in peers. iter ( ) {
470+ if peers_list_mut. len ( ) != 72 {
471+ peers_list_mut. push ( ben_map ! {
472+ "peer id" => ben_bytes!( peer_id. to_string( ) ) ,
473+ "ip" => ben_bytes!( torrent_peer. peer_addr. ip( ) . to_string( ) ) ,
474+ "port" => ben_int!( torrent_peer. peer_addr. port( ) as i64 )
475+ } ) ;
476+ continue ;
490477 }
478+ break ;
491479 }
492480 }
493481 HttpResponse :: Ok ( ) . content_type ( ContentType :: plaintext ( ) ) . body ( ben_map ! {
@@ -502,40 +490,36 @@ pub async fn http_service_announce_handler(request: HttpRequest, ip: IpAddr, dat
502490 IpAddr :: V6 ( _) => {
503491 if announce_unwrapped. left != 0 {
504492 let seeds = data. get_peers (
505- torrent_entry. seeds . clone ( ) ,
493+ & torrent_entry. seeds ,
506494 TorrentPeersType :: IPv6 ,
507495 Some ( ip) ,
508496 72
509497 ) ;
510- if seeds. is_some ( ) {
511- for ( peer_id, torrent_peer) in seeds. unwrap ( ) . iter ( ) {
512- peers_list_mut. push ( ben_map ! {
513- "peer id" => ben_bytes!( peer_id. to_string( ) ) ,
514- "ip" => ben_bytes!( torrent_peer. peer_addr. ip( ) . to_string( ) ) ,
515- "port" => ben_int!( torrent_peer. peer_addr. port( ) as i64 )
516- } ) ;
517- }
498+ for ( peer_id, torrent_peer) in seeds. iter ( ) {
499+ peers_list_mut. push ( ben_map ! {
500+ "peer id" => ben_bytes!( peer_id. to_string( ) ) ,
501+ "ip" => ben_bytes!( torrent_peer. peer_addr. ip( ) . to_string( ) ) ,
502+ "port" => ben_int!( torrent_peer. peer_addr. port( ) as i64 )
503+ } ) ;
518504 }
519505 }
520506 if peers_list_mut. len ( ) != 72 {
521507 let peers = data. get_peers (
522- torrent_entry. peers . clone ( ) ,
508+ & torrent_entry. peers ,
523509 TorrentPeersType :: IPv6 ,
524510 Some ( ip) ,
525511 72
526512 ) ;
527- if peers. is_some ( ) {
528- for ( peer_id, torrent_peer) in peers. unwrap ( ) . iter ( ) {
529- if peers_list_mut. len ( ) != 72 {
530- peers_list_mut. push ( ben_map ! {
531- "peer id" => ben_bytes!( peer_id. to_string( ) ) ,
532- "ip" => ben_bytes!( torrent_peer. peer_addr. ip( ) . to_string( ) ) ,
533- "port" => ben_int!( torrent_peer. peer_addr. port( ) as i64 )
534- } ) ;
535- continue ;
536- }
537- break ;
513+ for ( peer_id, torrent_peer) in peers. iter ( ) {
514+ if peers_list_mut. len ( ) != 72 {
515+ peers_list_mut. push ( ben_map ! {
516+ "peer id" => ben_bytes!( peer_id. to_string( ) ) ,
517+ "ip" => ben_bytes!( torrent_peer. peer_addr. ip( ) . to_string( ) ) ,
518+ "port" => ben_int!( torrent_peer. peer_addr. port( ) as i64 )
519+ } ) ;
520+ continue ;
538521 }
522+ break ;
539523 }
540524 }
541525 HttpResponse :: Ok ( ) . content_type ( ContentType :: plaintext ( ) ) . body ( ben_map ! {
0 commit comments