@@ -7,36 +7,48 @@ import (
77
88func getNatType () string {
99 model .EnableLoger = false
10- addrStrPtrList := []string {
11- "stun.voipgate.com:3478" ,
12- "stun.miwifi.com:3478" ,
13- "stunserver.stunprotocol.org:3478" ,
14- }
15- checkStatus := true
16- for _ , addrStr := range addrStrPtrList {
17- err1 := stuncheck .MappingTests (addrStr )
18- if err1 != nil {
19- model .NatMappingBehavior = "inconclusive"
20- if model .EnableLoger {
21- model .Log .Warn ("NAT mapping behavior: inconclusive" )
22- }
23- checkStatus = false
10+ model .Verbose = 0
11+ model .Timeout = 3
12+ model .IPVersion = "ipv4"
13+ addrStrList := model .GetDefaultServers (model .IPVersion )
14+ rfcMethods := []string {"RFC5780" , "RFC5389" , "RFC3489" }
15+ successfulDetection := false
16+ for _ , rfcMethod := range rfcMethods {
17+ if successfulDetection {
18+ break
2419 }
25- err2 := stuncheck .FilteringTests (addrStr )
26- if err2 != nil {
27- model .NatFilteringBehavior = "inconclusive"
28- if model .EnableLoger {
29- model .Log .Warn ("NAT filtering behavior: inconclusive" )
20+ for _ , addrStr := range addrStrList {
21+ model .NatMappingBehavior = ""
22+ model .NatFilteringBehavior = ""
23+ var err1 , err2 error
24+ switch rfcMethod {
25+ case "RFC5780" :
26+ err1 = stuncheck .MappingTests (addrStr )
27+ if err1 != nil {
28+ model .NatMappingBehavior = "inconclusive"
29+ }
30+ err2 = stuncheck .FilteringTests (addrStr )
31+ if err2 != nil {
32+ model .NatFilteringBehavior = "inconclusive"
33+ }
34+ case "RFC5389" :
35+ err1 = stuncheck .MappingTestsRFC5389 (addrStr )
36+ if err1 != nil {
37+ model .NatMappingBehavior = "inconclusive"
38+ model .NatFilteringBehavior = "inconclusive"
39+ }
40+ case "RFC3489" :
41+ err1 = stuncheck .MappingTestsRFC3489 (addrStr )
42+ if err1 != nil {
43+ model .NatMappingBehavior = "inconclusive"
44+ model .NatFilteringBehavior = "inconclusive"
45+ }
46+ }
47+ if model .NatMappingBehavior != "inconclusive" && model .NatFilteringBehavior != "inconclusive" &&
48+ model .NatMappingBehavior != "" && model .NatFilteringBehavior != "" {
49+ successfulDetection = true
50+ break
3051 }
31- checkStatus = false
32- }
33- if model .NatMappingBehavior == "inconclusive" || model .NatFilteringBehavior == "inconclusive" {
34- checkStatus = false
35- } else if model .NatMappingBehavior != "inconclusive" && model .NatFilteringBehavior != "inconclusive" {
36- checkStatus = true
37- }
38- if checkStatus {
39- break
4052 }
4153 }
4254 return stuncheck .CheckType ()
0 commit comments