github.com/arieschain/arieschain@v0.0.0-20191023063405-37c074544356/rpc/endpoints.go (about) 1 package rpc 2 3 import ( 4 "net" 5 6 "github.com/quickchainproject/quickchain/log" 7 ) 8 9 // StartHTTPEndpoint starts the HTTP RPC endpoint, configured with cors/vhosts/modules 10 func StartHTTPEndpoint(endpoint string, apis []API, modules []string, cors []string, vhosts []string) (net.Listener, *Server, error) { 11 // Generate the whitelist based on the allowed modules 12 whitelist := make(map[string]bool) 13 for _, module := range modules { 14 whitelist[module] = true 15 } 16 // Register all the APIs exposed by the services 17 handler := NewServer() 18 for _, api := range apis { 19 if whitelist[api.Namespace] || (len(whitelist) == 0 && api.Public) { 20 if err := handler.RegisterName(api.Namespace, api.Service); err != nil { 21 return nil, nil, err 22 } 23 log.Debug("HTTP registered", "namespace", api.Namespace) 24 } 25 } 26 // All APIs registered, start the HTTP listener 27 var ( 28 listener net.Listener 29 err error 30 ) 31 if listener, err = net.Listen("tcp", endpoint); err != nil { 32 return nil, nil, err 33 } 34 go NewHTTPServer(cors, vhosts, handler).Serve(listener) 35 return listener, handler, err 36 } 37 38 // StartWSEndpoint starts a websocket endpoint 39 func StartWSEndpoint(endpoint string, apis []API, modules []string, wsOrigins []string, exposeAll bool) (net.Listener, *Server, error) { 40 41 // Generate the whitelist based on the allowed modules 42 whitelist := make(map[string]bool) 43 for _, module := range modules { 44 whitelist[module] = true 45 } 46 // Register all the APIs exposed by the services 47 handler := NewServer() 48 for _, api := range apis { 49 if exposeAll || whitelist[api.Namespace] || (len(whitelist) == 0 && api.Public) { 50 if err := handler.RegisterName(api.Namespace, api.Service); err != nil { 51 return nil, nil, err 52 } 53 log.Debug("WebSocket registered", "service", api.Service, "namespace", api.Namespace) 54 } 55 } 56 // All APIs registered, start the HTTP listener 57 var ( 58 listener net.Listener 59 err error 60 ) 61 if listener, err = net.Listen("tcp", endpoint); err != nil { 62 return nil, nil, err 63 } 64 go NewWSServer(wsOrigins, handler).Serve(listener) 65 return listener, handler, err 66 67 } 68 69 // StartIPCEndpoint starts an IPC endpoint. 70 func StartIPCEndpoint(ipcEndpoint string, apis []API) (net.Listener, *Server, error) { 71 // Register all the APIs exposed by the services. 72 handler := NewServer() 73 for _, api := range apis { 74 if err := handler.RegisterName(api.Namespace, api.Service); err != nil { 75 return nil, nil, err 76 } 77 log.Debug("IPC registered", "namespace", api.Namespace) 78 } 79 // All APIs registered, start the IPC listener. 80 listener, err := ipcListen(ipcEndpoint) 81 if err != nil { 82 return nil, nil, err 83 } 84 go handler.ServeListener(listener) 85 return listener, handler, nil 86 }