@@ -363,6 +363,10 @@ void IceTransport::LogCallback(juice_log_level_t level, const char *message) {
363
363
PLOG (severity) << " juice: " << message;
364
364
}
365
365
366
+ void IceTransport::addIceServers (std::vector<IceServer> servers) {
367
+ // TODO
368
+ }
369
+
366
370
#else // USE_NICE == 1
367
371
368
372
unique_ptr<GMainLoop, void (*)(GMainLoop *)> IceTransport::MainLoop (nullptr , nullptr );
@@ -487,106 +491,7 @@ IceTransport::IceTransport(const Configuration &config, candidate_callback candi
487
491
std::vector<IceServer> servers = config.iceServers ;
488
492
std::shuffle (servers.begin (), servers.end (), utils::random_engine ());
489
493
490
- // Add one STUN server
491
- bool success = false ;
492
- for (auto &server : servers) {
493
- if (server.hostname .empty ())
494
- continue ;
495
- if (server.type != IceServer::Type::Stun)
496
- continue ;
497
- if (server.port == 0 )
498
- server.port = 3478 ; // STUN UDP port
499
-
500
- struct addrinfo hints = {};
501
- hints.ai_family = AF_INET; // IPv4
502
- hints.ai_socktype = SOCK_DGRAM;
503
- hints.ai_protocol = IPPROTO_UDP;
504
- hints.ai_flags = AI_ADDRCONFIG;
505
- struct addrinfo *result = nullptr ;
506
- if (getaddrinfo (server.hostname .c_str (), std::to_string (server.port ).c_str (), &hints,
507
- &result) != 0 ) {
508
- PLOG_WARNING << " Unable to resolve STUN server address: " << server.hostname << ' :'
509
- << server.port ;
510
- continue ;
511
- }
512
-
513
- for (auto p = result; p; p = p->ai_next ) {
514
- if (p->ai_family == AF_INET) {
515
- char nodebuffer[MAX_NUMERICNODE_LEN];
516
- char servbuffer[MAX_NUMERICSERV_LEN];
517
- if (getnameinfo (p->ai_addr , p->ai_addrlen , nodebuffer, MAX_NUMERICNODE_LEN,
518
- servbuffer, MAX_NUMERICSERV_LEN,
519
- NI_NUMERICHOST | NI_NUMERICSERV) == 0 ) {
520
- PLOG_INFO << " Using STUN server \" " << server.hostname << " :" << server.port
521
- << " \" " ;
522
- g_object_set (G_OBJECT (mNiceAgent .get ()), " stun-server" , nodebuffer, nullptr );
523
- g_object_set (G_OBJECT (mNiceAgent .get ()), " stun-server-port" ,
524
- std::stoul (servbuffer), nullptr );
525
- success = true ;
526
- break ;
527
- }
528
- }
529
- }
530
-
531
- freeaddrinfo (result);
532
- if (success)
533
- break ;
534
- }
535
-
536
- // Add TURN servers
537
- for (auto &server : servers) {
538
- if (server.hostname .empty ())
539
- continue ;
540
- if (server.type != IceServer::Type::Turn)
541
- continue ;
542
- if (server.port == 0 )
543
- server.port = server.relayType == IceServer::RelayType::TurnTls ? 5349 : 3478 ;
544
-
545
- struct addrinfo hints = {};
546
- hints.ai_family = AF_UNSPEC;
547
- hints.ai_socktype =
548
- server.relayType == IceServer::RelayType::TurnUdp ? SOCK_DGRAM : SOCK_STREAM;
549
- hints.ai_protocol =
550
- server.relayType == IceServer::RelayType::TurnUdp ? IPPROTO_UDP : IPPROTO_TCP;
551
- hints.ai_flags = AI_ADDRCONFIG;
552
- struct addrinfo *result = nullptr ;
553
- if (getaddrinfo (server.hostname .c_str (), std::to_string (server.port ).c_str (), &hints,
554
- &result) != 0 ) {
555
- PLOG_WARNING << " Unable to resolve TURN server address: " << server.hostname << ' :'
556
- << server.port ;
557
- continue ;
558
- }
559
-
560
- for (auto p = result; p; p = p->ai_next ) {
561
- if (p->ai_family == AF_INET || p->ai_family == AF_INET6) {
562
- char nodebuffer[MAX_NUMERICNODE_LEN];
563
- char servbuffer[MAX_NUMERICSERV_LEN];
564
- if (getnameinfo (p->ai_addr , p->ai_addrlen , nodebuffer, MAX_NUMERICNODE_LEN,
565
- servbuffer, MAX_NUMERICSERV_LEN,
566
- NI_NUMERICHOST | NI_NUMERICSERV) == 0 ) {
567
- PLOG_INFO << " Using TURN server \" " << server.hostname << " :" << server.port
568
- << " \" " ;
569
- NiceRelayType niceRelayType;
570
- switch (server.relayType ) {
571
- case IceServer::RelayType::TurnTcp:
572
- niceRelayType = NICE_RELAY_TYPE_TURN_TCP;
573
- break ;
574
- case IceServer::RelayType::TurnTls:
575
- niceRelayType = NICE_RELAY_TYPE_TURN_TLS;
576
- break ;
577
- default :
578
- niceRelayType = NICE_RELAY_TYPE_TURN_UDP;
579
- break ;
580
- }
581
- nice_agent_set_relay_info (mNiceAgent .get (), mStreamId , 1 , nodebuffer,
582
- std::stoul (servbuffer), server.username .c_str (),
583
- server.password .c_str (), niceRelayType);
584
- }
585
- }
586
- }
587
-
588
- freeaddrinfo (result);
589
- }
494
+ addIceServers (servers);
590
495
591
496
g_signal_connect (G_OBJECT (mNiceAgent .get ()), " component-state-changed" ,
592
497
G_CALLBACK (StateChangeCallback), this );
@@ -888,6 +793,112 @@ bool IceTransport::getSelectedCandidatePair(Candidate *local, Candidate *remote)
888
793
return true ;
889
794
}
890
795
796
+
797
+
798
+ void IceTransport::addIceServers (std::vector<IceServer> servers) {
799
+
800
+ // Add one STUN server
801
+ bool success = false ;
802
+ for (auto &server : servers) {
803
+ if (server.hostname .empty ())
804
+ continue ;
805
+ if (server.type != IceServer::Type::Stun)
806
+ continue ;
807
+ if (server.port == 0 )
808
+ server.port = 3478 ; // STUN UDP port
809
+
810
+ struct addrinfo hints = {};
811
+ hints.ai_family = AF_INET; // IPv4
812
+ hints.ai_socktype = SOCK_DGRAM;
813
+ hints.ai_protocol = IPPROTO_UDP;
814
+ hints.ai_flags = AI_ADDRCONFIG;
815
+ struct addrinfo *result = nullptr ;
816
+ if (getaddrinfo (server.hostname .c_str (), std::to_string (server.port ).c_str (), &hints,
817
+ &result) != 0 ) {
818
+ PLOG_WARNING << " Unable to resolve STUN server address: " << server.hostname << ' :'
819
+ << server.port ;
820
+ continue ;
821
+ }
822
+
823
+ for (auto p = result; p; p = p->ai_next ) {
824
+ if (p->ai_family == AF_INET) {
825
+ char nodebuffer[MAX_NUMERICNODE_LEN];
826
+ char servbuffer[MAX_NUMERICSERV_LEN];
827
+ if (getnameinfo (p->ai_addr , p->ai_addrlen , nodebuffer, MAX_NUMERICNODE_LEN,
828
+ servbuffer, MAX_NUMERICSERV_LEN,
829
+ NI_NUMERICHOST | NI_NUMERICSERV) == 0 ) {
830
+ PLOG_INFO << " Using STUN server \" " << server.hostname << " :" << server.port
831
+ << " \" " ;
832
+ g_object_set (G_OBJECT (mNiceAgent .get ()), " stun-server" , nodebuffer, nullptr );
833
+ g_object_set (G_OBJECT (mNiceAgent .get ()), " stun-server-port" ,
834
+ std::stoul (servbuffer), nullptr );
835
+ success = true ;
836
+ break ;
837
+ }
838
+ }
839
+ }
840
+
841
+ freeaddrinfo (result);
842
+ if (success)
843
+ break ;
844
+ }
845
+
846
+ // Add TURN servers
847
+ for (auto &server : servers) {
848
+ if (server.hostname .empty ())
849
+ continue ;
850
+ if (server.type != IceServer::Type::Turn)
851
+ continue ;
852
+ if (server.port == 0 )
853
+ server.port = server.relayType == IceServer::RelayType::TurnTls ? 5349 : 3478 ;
854
+
855
+ struct addrinfo hints = {};
856
+ hints.ai_family = AF_UNSPEC;
857
+ hints.ai_socktype =
858
+ server.relayType == IceServer::RelayType::TurnUdp ? SOCK_DGRAM : SOCK_STREAM;
859
+ hints.ai_protocol =
860
+ server.relayType == IceServer::RelayType::TurnUdp ? IPPROTO_UDP : IPPROTO_TCP;
861
+ hints.ai_flags = AI_ADDRCONFIG;
862
+ struct addrinfo *result = nullptr ;
863
+ if (getaddrinfo (server.hostname .c_str (), std::to_string (server.port ).c_str (), &hints,
864
+ &result) != 0 ) {
865
+ PLOG_WARNING << " Unable to resolve TURN server address: " << server.hostname << ' :'
866
+ << server.port ;
867
+ continue ;
868
+ }
869
+
870
+ for (auto p = result; p; p = p->ai_next ) {
871
+ if (p->ai_family == AF_INET || p->ai_family == AF_INET6) {
872
+ char nodebuffer[MAX_NUMERICNODE_LEN];
873
+ char servbuffer[MAX_NUMERICSERV_LEN];
874
+ if (getnameinfo (p->ai_addr , p->ai_addrlen , nodebuffer, MAX_NUMERICNODE_LEN,
875
+ servbuffer, MAX_NUMERICSERV_LEN,
876
+ NI_NUMERICHOST | NI_NUMERICSERV) == 0 ) {
877
+ PLOG_INFO << " Using TURN server \" " << server.hostname << " :" << server.port
878
+ << " \" " ;
879
+ NiceRelayType niceRelayType;
880
+ switch (server.relayType ) {
881
+ case IceServer::RelayType::TurnTcp:
882
+ niceRelayType = NICE_RELAY_TYPE_TURN_TCP;
883
+ break ;
884
+ case IceServer::RelayType::TurnTls:
885
+ niceRelayType = NICE_RELAY_TYPE_TURN_TLS;
886
+ break ;
887
+ default :
888
+ niceRelayType = NICE_RELAY_TYPE_TURN_UDP;
889
+ break ;
890
+ }
891
+ nice_agent_set_relay_info (mNiceAgent .get (), mStreamId , 1 , nodebuffer,
892
+ std::stoul (servbuffer), server.username .c_str (),
893
+ server.password .c_str (), niceRelayType);
894
+ }
895
+ }
896
+ }
897
+
898
+ freeaddrinfo (result);
899
+ }
900
+ }
901
+
891
902
#endif
892
903
893
904
} // namespace rtc::impl
0 commit comments