/* Rating system designed to be used in VoIP Carriers World Copyright (C) 2013 ITsysCOM This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see */ package utils import ( "crypto/sha1" "fmt" "encoding/hex" "crypto/rand" ) // Returns first non empty string out of vals. Useful to extract defaults func FirstNonEmpty(vals ...string) string { for _, val := range vals { if len(val) != 0 { return val } } return "" } func FSCgrId(uuid string) string { hasher := sha1.New() hasher.Write([]byte(uuid)) return fmt.Sprintf("%x", hasher.Sum(nil)) } func NewTPid() string { hasher := sha1.New() uuid,_ := GenUUID() hasher.Write([]byte(uuid)) return fmt.Sprintf("%x", hasher.Sum(nil)) } func GenUUID() (string, error) { uuid := make([]byte, 16) n, err := rand.Read(uuid) if n != len(uuid) || err != nil { return "", err } uuid[8] = 0x80 uuid[4] = 0x40 return hex.EncodeToString(uuid), nil }