@@ -32,59 +32,35 @@ func withRequestLogger(next http.Handler) http.Handler {
3232 })
3333}
3434
35- func start (ctx context.Context , listenAddress string , runAcceleratedDHTClient bool , contentEndpoints , peerEndpoints , ipnsEndpoints []string ) error {
36- h , err := newHost (runAcceleratedDHTClient )
37- if err != nil {
38- return err
39- }
40-
41- var dhtRouting routing.Routing
42- if runAcceleratedDHTClient {
43- wrappedDHT , err := newBundledDHT (ctx , h )
44- if err != nil {
45- return err
46- }
47- dhtRouting = wrappedDHT
48- } else {
49- standardDHT , err := dht .New (ctx , h , dht .Mode (dht .ModeClient ), dht .BootstrapPeers (dht .GetDefaultBootstrapPeerAddrInfos ()... ))
50- if err != nil {
51- return err
52- }
53- dhtRouting = standardDHT
54- }
55-
56- crRouters , err := getCombinedRouting (contentEndpoints , dhtRouting )
57- if err != nil {
58- return err
59- }
60-
61- prRouters , err := getCombinedRouting (peerEndpoints , dhtRouting )
62- if err != nil {
63- return err
64- }
35+ type serverOptions struct {
36+ listenAddress string
37+ acceleratedDHT bool
38+ putEnabled bool
39+ contentEndpoints []string
40+ peerEndpoints []string
41+ ipnsEndpoints []string
42+ dataDirectory string
43+ }
6544
66- ipnsRouters , err := getCombinedRouting (ipnsEndpoints , dhtRouting )
45+ func startServer (ctx context.Context , options * serverOptions ) error {
46+ router , err := newRouter (ctx , options )
6747 if err != nil {
6848 return err
6949 }
7050
71- _ , port , err := net .SplitHostPort (listenAddress )
51+ _ , port , err := net .SplitHostPort (options . listenAddress )
7252 if err != nil {
7353 return err
7454 }
7555
76- log .Printf ("Listening on %s" , listenAddress )
56+ log .Printf ("Listening on %s" , options . listenAddress )
7757 log .Printf ("Delegated Routing API on http://127.0.0.1:%s/routing/v1" , port )
7858
7959 mdlw := middleware .New (middleware.Config {
8060 Recorder : metrics .NewRecorder (metrics.Config {Prefix : "someguy" }),
8161 })
8262
83- handler := server .Handler (& composableRouter {
84- providers : crRouters ,
85- peers : prRouters ,
86- ipns : ipnsRouters ,
87- })
63+ handler := server .Handler (router )
8864
8965 // Add CORS.
9066 handler = cors .New (cors.Options {
@@ -108,8 +84,66 @@ func start(ctx context.Context, listenAddress string, runAcceleratedDHTClient bo
10884
10985 http .Handle ("/debug/metrics/prometheus" , promhttp .Handler ())
11086 http .Handle ("/" , handler )
111- server := & http.Server {Addr : listenAddress , Handler : nil }
87+ server := & http.Server {Addr : options . listenAddress , Handler : nil }
11288 return server .ListenAndServe ()
89+
90+ // TODO: call .Close in database on exit
91+ }
92+
93+ func newRouter (ctx context.Context , options * serverOptions ) (server.ContentRouter , error ) {
94+ h , err := newHost (options .acceleratedDHT )
95+ if err != nil {
96+ return nil , err
97+ }
98+
99+ var dhtRouting routing.Routing
100+ if options .acceleratedDHT {
101+ wrappedDHT , err := newBundledDHT (ctx , h )
102+ if err != nil {
103+ return nil , err
104+ }
105+ dhtRouting = wrappedDHT
106+ } else {
107+ standardDHT , err := dht .New (ctx , h , dht .Mode (dht .ModeClient ), dht .BootstrapPeers (dht .GetDefaultBootstrapPeerAddrInfos ()... ))
108+ if err != nil {
109+ return nil , err
110+ }
111+ dhtRouting = standardDHT
112+ }
113+
114+ crRouters , err := getCombinedRouting (options .contentEndpoints , dhtRouting , options .putEnabled )
115+ if err != nil {
116+ return nil , err
117+ }
118+
119+ prRouters , err := getCombinedRouting (options .peerEndpoints , dhtRouting , options .putEnabled )
120+ if err != nil {
121+ return nil , err
122+ }
123+
124+ ipnsRouters , err := getCombinedRouting (options .ipnsEndpoints , dhtRouting , options .putEnabled )
125+ if err != nil {
126+ return nil , err
127+ }
128+
129+ remoteRouter := & composableRouter {
130+ providers : crRouters ,
131+ peers : prRouters ,
132+ ipns : ipnsRouters ,
133+ }
134+
135+ if options .dataDirectory == "" {
136+ return remoteRouter , nil
137+ }
138+
139+ localRouter , err := newLocalRouter (options .dataDirectory )
140+ if err != nil {
141+ return nil , err
142+ }
143+
144+ return & parallelRouter {
145+ routers : []router {localRouter , remoteRouter },
146+ }, nil
113147}
114148
115149func newHost (highOutboundLimits bool ) (host.Host , error ) {
@@ -146,9 +180,9 @@ func newHost(highOutboundLimits bool) (host.Host, error) {
146180 return h , nil
147181}
148182
149- func getCombinedRouting (endpoints []string , dht routing.Routing ) (router , error ) {
183+ func getCombinedRouting (endpoints []string , dht routing.Routing , putEnabled bool ) (router , error ) {
150184 if len (endpoints ) == 0 {
151- return libp2pRouter {routing : dht }, nil
185+ return libp2pRouter {routing : dht , putEnabled : putEnabled }, nil
152186 }
153187
154188 var routers []router
@@ -158,10 +192,10 @@ func getCombinedRouting(endpoints []string, dht routing.Routing) (router, error)
158192 if err != nil {
159193 return nil , err
160194 }
161- routers = append (routers , clientRouter {Client : drclient })
195+ routers = append (routers , clientRouter {client : drclient , putEnabled : putEnabled })
162196 }
163197
164198 return parallelRouter {
165- routers : append (routers , libp2pRouter {routing : dht }),
199+ routers : append (routers , libp2pRouter {routing : dht , putEnabled : putEnabled }),
166200 }, nil
167201}
0 commit comments