(port string)
| 32 | RespHead atomic.Value // 存 string |
| 33 | } |
| 34 | var ( |
| 35 | serverConfigMu sync.RWMutex |
| 36 | serverConfigs = make(map[string]*ServerConfig) |
| 37 | ) |
| 38 | func writeTempCertFiles(certPEM, keyPEM string) (certPath, keyPath string, err error) { |
| 39 | cf, err := os.CreateTemp("", "lain_cert_*.pem") |
| 40 | if err != nil { |
| 41 | return "", "", err |
| 42 | } |
| 43 | if _, err = cf.Write([]byte(certPEM)); err != nil { |
| 44 | cf.Close() |
| 45 | os.Remove(cf.Name()) |
| 46 | return "", "", err |
| 47 | } |
| 48 | cf.Close() |
| 49 | kf, err := os.CreateTemp("", "lain_key_*.pem") |
| 50 | if err != nil { |
| 51 | os.Remove(cf.Name()) |
| 52 | return "", "", err |
| 53 | } |
| 54 | if _, err = kf.Write([]byte(keyPEM)); err != nil { |
| 55 | kf.Close() |
no outgoing calls
no test coverage detected