| 
									
										
										
										
											2017-11-22 23:11:32 +01:00
										 |  |  | // +build linux | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package core | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"os" | 
					
						
							|  |  |  | 	"path/filepath" | 
					
						
							|  |  |  | 	"plugin" | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"v2ray.com/core/common/platform" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-22 23:15:14 +01:00
										 |  |  | func loadPluginsInternal() error { | 
					
						
							| 
									
										
										
										
											2017-11-22 23:11:32 +01:00
										 |  |  | 	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() | 
					
						
							| 
									
										
										
										
											2017-12-19 21:28:12 +01:00
										 |  |  | 				newError("plugin (", metadata.Name, ") loaded.").WriteToLog() | 
					
						
							| 
									
										
										
										
											2017-11-22 23:11:32 +01:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } |