12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package geodb
- import (
- "bytes"
- "encoding/csv"
- "io"
- "strings"
- "imuslab.com/zoraxy/mod/netutils"
- )
- func (s *Store) search(ip string) string {
- if strings.Contains(ip, ",") {
-
-
- ip = strings.Split(ip, ",")[0]
- ip = strings.TrimSpace(ip)
- }
-
- cc := ""
- if netutils.IsIPv6(ip) {
- if s.geotrieIpv6 == nil {
- cc = s.slowSearchIpv6(ip)
- } else {
- cc = s.geotrieIpv6.search(ip)
- }
- } else {
- if s.geotrie == nil {
- cc = s.slowSearchIpv4(ip)
- } else {
- cc = s.geotrie.search(ip)
- }
- }
-
- return cc
- }
- func constrctTrieTree(data [][]string) *trie {
- tt := newTrie()
- for _, entry := range data {
- startIp := entry[0]
- endIp := entry[1]
- cc := entry[2]
- tt.insert(startIp, cc)
- tt.insert(endIp, cc)
- }
- return tt
- }
- func parseCSV(content []byte) ([][]string, error) {
- var records [][]string
- r := csv.NewReader(bytes.NewReader(content))
- for {
- record, err := r.Read()
- if err == io.EOF {
- break
- }
- if err != nil {
- return nil, err
- }
- records = append(records, record)
- }
- return records, nil
- }
|