| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | 
							- // +build linux
 
- package core
 
- import (
 
- 	"os"
 
- 	"path/filepath"
 
- 	"plugin"
 
- 	"strings"
 
- 	"v2ray.com/core/app/log"
 
- 	"v2ray.com/core/common/platform"
 
- )
 
- func LoadPlugins() error {
 
- 	pluginPath := platform.GetPluginDirectory()
 
- 	dir, err := os.Open(pluginPath)
 
- 	if err != nil {
 
- 		return err
 
- 	}
 
- 	defer dir.Close()
 
- 	files, err := dir.Readdir(-1)
 
- 	if err != nil {
 
- 		return err
 
- 	}
 
- 	for _, file := range files {
 
- 		if !file.IsDir() && strings.HasSuffix(file.Name(), ".so") {
 
- 			p, err := plugin.Open(filepath.Join(pluginPath, file.Name()))
 
- 			if err != nil {
 
- 				return err
 
- 			}
 
- 			f, err := p.Lookup(GetMetadataFuncName)
 
- 			if err != nil {
 
- 				return err
 
- 			}
 
- 			if gmf, ok := f.(GetMetadataFunc); ok {
 
- 				metadata := gmf()
 
- 				log.Trace(newError("plugin (", metadata.Name, ") loaded."))
 
- 			}
 
- 		}
 
- 	}
 
- 	return nil
 
- }
 
 
  |