123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package main
- import "C"
- import (
- "github.com/Dreamacro/clash/config"
- "github.com/Dreamacro/clash/constant"
- "github.com/Dreamacro/clash/hub"
- "github.com/oschwald/geoip2-golang"
- "log"
- "os"
- "path/filepath"
- )
- var options []hub.Option
- func init() {
- constant.Version = "v1.16.0"
- }
- //export setHomeDir
- func setHomeDir(homeStr *C.char) bool {
- homeDir := C.GoString(homeStr)
- info, err := os.Stat(homeDir)
- if err != nil {
- log.Printf("clash_lib [setHomeDir]: %s : %+v\n", homeDir, err)
- return false
- }
- if !info.IsDir() {
- log.Printf("clash_lib [setHomeDir]: Path is not directory %s\n", homeDir)
- return false
- }
- constant.SetHomeDir(homeDir)
- return true
- }
- //export setConfig
- func setConfig(configStr *C.char) bool {
- configFile := C.GoString(configStr)
- if configFile == "" {
- return false
- }
- if !filepath.IsAbs(configFile) {
- configFile = filepath.Join(constant.Path.HomeDir(), configFile)
- }
- constant.SetConfig(configFile)
- return true
- }
- //export withExternalController
- func withExternalController(externalController *C.char) {
- options = append(options, hub.WithExternalController(C.GoString(externalController)))
- }
- //export withSecret
- func withSecret(secret *C.char) {
- options = append(options, hub.WithSecret(C.GoString(secret)))
- }
- //export mmdbVerify
- func mmdbVerify(path *C.char) bool {
- instance, err := geoip2.Open(C.GoString(path))
- if err == nil {
- _ = instance.Close()
- }
- return err == nil
- }
- //export startService
- func startService() bool {
- if err := config.Init(constant.Path.HomeDir()); err != nil {
- log.Printf("clash_lib [startService]: Initial error: %+v\n", err)
- return false
- }
- err := hub.Parse(options...)
- if err != nil {
- log.Printf("clash_lib [startService]: %+v\n", err)
- return false
- }
- return true
- }
- func main() {
- log.Println("hello clash")
- }
|