61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
package cryptparse
|
|
|
|
import (
|
|
`reflect`
|
|
`strconv`
|
|
)
|
|
|
|
/*
|
|
reflectUriFlat is the reflection used for a TlsUri when converting to a TlsFlat.
|
|
*/
|
|
func reflectUriFlat(s *TlsUri, tagName string) (f *TlsFlat, err error) {
|
|
|
|
var ptrVal reflect.Value
|
|
var ptrType reflect.Type
|
|
var ptrKind reflect.Kind
|
|
var n uint64
|
|
var flat TlsFlat
|
|
var sVal reflect.Value = reflect.ValueOf(s)
|
|
var sType reflect.Type = sVal.Type()
|
|
var kind reflect.Kind = sType.Kind()
|
|
var params map[tlsUriParam][]string = make(map[tlsUriParam][]string)
|
|
|
|
if s == nil {
|
|
return
|
|
}
|
|
|
|
for k, v := range params {
|
|
if tlsUriParam(k) != "" {
|
|
params[k] = v
|
|
}
|
|
}
|
|
|
|
flat = TlsFlat{
|
|
Host: s.Hostname(),
|
|
Port: nil,
|
|
SniName: nil,
|
|
SkipVerify: false,
|
|
Certs: nil,
|
|
CaFiles: nil,
|
|
CipherSuites: nil,
|
|
Curves: nil,
|
|
MinTlsProtocol: nil,
|
|
MaxTlsProtocol: nil,
|
|
}
|
|
|
|
if s.Port() != "" {
|
|
f.Port = new(uint16)
|
|
if n, err = strconv.ParseUint(s.Port(), 10, 16); err != nil {
|
|
return
|
|
}
|
|
*f.Port = uint16(n)
|
|
}
|
|
|
|
// TODO: lookup map, map[string]tlsUriParam where key is name of constant as string, and value is that corresponding value.
|
|
// Use that value to lookup in params.
|
|
|
|
f = &flat
|
|
|
|
return
|
|
}
|