Files
umbrix-libcore/custom/custom.go

171 lines
4.0 KiB
Go
Raw Normal View History

2023-08-16 15:16:02 +03:30
package main
/*
#include "stdint.h"
*/
import "C"
import (
2023-09-01 14:52:30 +03:30
"encoding/json"
2024-01-19 17:55:58 +03:30
"fmt"
2023-08-19 14:09:49 +03:30
"os"
2023-08-28 13:08:43 +03:30
"unsafe"
2023-08-19 14:09:49 +03:30
2024-03-22 16:25:56 +00:00
"github.com/hiddify/hiddify-core/bridge"
"github.com/hiddify/hiddify-core/config"
pb "github.com/hiddify/hiddify-core/hiddifyrpc"
v2 "github.com/hiddify/hiddify-core/v2"
2024-03-03 04:15:19 +01:00
2023-10-27 14:36:00 +03:30
"github.com/sagernet/sing-box/log"
2023-08-16 15:16:02 +03:30
)
2023-08-28 13:08:43 +03:30
//export setupOnce
func setupOnce(api unsafe.Pointer) {
bridge.InitializeDartApi(api)
}
2023-08-16 15:16:02 +03:30
//export setup
2023-10-27 16:39:48 +03:30
func setup(baseDir *C.char, workingDir *C.char, tempDir *C.char, statusPort C.longlong, debug bool) (CErr *C.char) {
err := v2.Setup(C.GoString(baseDir), C.GoString(workingDir), C.GoString(tempDir), int64(statusPort), debug)
2023-10-27 16:39:48 +03:30
return emptyOrErrorC(err)
2023-08-16 15:16:02 +03:30
}
2023-08-19 14:09:49 +03:30
//export parse
2023-10-14 17:22:26 +03:30
func parse(path *C.char, tempPath *C.char, debug bool) (CErr *C.char) {
res, err := v2.Parse(&pb.ParseRequest{
ConfigPath: C.GoString(path),
TempPath: C.GoString(tempPath),
2023-10-14 17:22:26 +03:30
})
2023-08-16 15:16:02 +03:30
if err != nil {
log.Error(err.Error())
2023-08-16 15:16:02 +03:30
return C.CString(err.Error())
}
err = os.WriteFile(C.GoString(path), []byte(res.Content), 0644)
return emptyOrErrorC(err)
2023-08-16 15:16:02 +03:30
}
2023-09-01 14:52:30 +03:30
//export changeConfigOptions
2023-10-14 17:22:26 +03:30
func changeConfigOptions(configOptionsJson *C.char) (CErr *C.char) {
_, err := v2.ChangeConfigOptions(&pb.ChangeConfigOptionsRequest{
ConfigOptionsJson: C.GoString(configOptionsJson),
})
return emptyOrErrorC(err)
2023-09-01 14:52:30 +03:30
}
2023-11-12 12:50:14 +03:30
//export generateConfig
func generateConfig(path *C.char) (res *C.char) {
_, err := v2.GenerateConfig(&pb.GenerateConfigRequest{
Path: C.GoString(path),
2023-11-12 12:50:14 +03:30
})
return emptyOrErrorC(err)
2023-11-12 12:50:14 +03:30
}
2023-09-10 20:18:33 +03:30
//export start
2023-10-26 15:12:56 +03:30
func start(configPath *C.char, disableMemoryLimit bool) (CErr *C.char) {
2023-10-27 14:36:00 +03:30
_, err := v2.Start(&pb.StartRequest{
ConfigPath: C.GoString(configPath),
EnableOldCommandServer: true,
DisableMemoryLimit: disableMemoryLimit,
})
return emptyOrErrorC(err)
2023-08-16 15:16:02 +03:30
}
//export stop
2023-10-14 17:22:26 +03:30
func stop() (CErr *C.char) {
2024-03-09 21:07:15 +01:00
_, err := v2.Stop()
return emptyOrErrorC(err)
2023-09-10 20:18:33 +03:30
}
//export restart
2023-10-26 15:12:56 +03:30
func restart(configPath *C.char, disableMemoryLimit bool) (CErr *C.char) {
2023-10-27 14:36:00 +03:30
_, err := v2.Restart(&pb.StartRequest{
ConfigPath: C.GoString(configPath),
EnableOldCommandServer: true,
DisableMemoryLimit: disableMemoryLimit,
})
return emptyOrErrorC(err)
2023-08-28 13:08:43 +03:30
}
//export startCommandClient
func startCommandClient(command C.int, port C.longlong) *C.char {
err := v2.StartCommand(int32(command), int64(port))
return emptyOrErrorC(err)
2023-08-28 13:08:43 +03:30
}
//export stopCommandClient
func stopCommandClient(command C.int) *C.char {
err := v2.StopCommand(int32(command))
return emptyOrErrorC(err)
2023-08-16 15:16:02 +03:30
}
2023-08-29 19:10:14 +03:30
//export selectOutbound
2023-10-14 17:22:26 +03:30
func selectOutbound(groupTag *C.char, outboundTag *C.char) (CErr *C.char) {
_, err := v2.SelectOutbound(&pb.SelectOutboundRequest{
GroupTag: C.GoString(groupTag),
OutboundTag: C.GoString(outboundTag),
2023-10-14 17:22:26 +03:30
})
return emptyOrErrorC(err)
2023-08-29 19:10:14 +03:30
}
//export urlTest
2023-10-14 17:22:26 +03:30
func urlTest(groupTag *C.char) (CErr *C.char) {
_, err := v2.UrlTest(&pb.UrlTestRequest{
GroupTag: C.GoString(groupTag),
2023-10-14 17:22:26 +03:30
})
return emptyOrErrorC(err)
}
func emptyOrErrorC(err error) *C.char {
if err == nil {
return C.CString("")
2023-08-29 19:10:14 +03:30
}
log.Error(err.Error())
return C.CString(err.Error())
2023-08-29 19:10:14 +03:30
}
2024-02-18 12:31:17 +03:30
//export generateWarpConfig
func generateWarpConfig(licenseKey *C.char, accountId *C.char, accessToken *C.char) (CResp *C.char) {
res, err := v2.GenerateWarpConfig(&pb.GenerateWarpConfigRequest{
LicenseKey: C.GoString(licenseKey),
AccountId: C.GoString(accountId),
AccessToken: C.GoString(accessToken),
2024-02-18 12:31:17 +03:30
})
2024-02-18 12:31:17 +03:30
if err != nil {
return C.CString(fmt.Sprint("error: ", err.Error()))
}
warpAccount := config.WarpAccount{
AccountID: res.Account.AccountId,
AccessToken: res.Account.AccessToken,
}
warpConfig := config.WarpWireguardConfig{
PrivateKey: res.Config.PrivateKey,
LocalAddressIPv4: res.Config.LocalAddressIpv4,
LocalAddressIPv6: res.Config.LocalAddressIpv6,
PeerPublicKey: res.Config.PeerPublicKey,
}
log := res.Log
response := &config.WarpGenerationResponse{
WarpAccount: warpAccount,
Log: log,
Config: warpConfig,
}
responseJson, err := json.Marshal(response)
if err != nil {
return C.CString("")
}
return C.CString(string(responseJson))
2024-02-18 12:31:17 +03:30
}
2023-08-16 15:16:02 +03:30
func main() {}