@@ -26,15 +26,12 @@ import (
2626 "golang.org/x/net/proxy"
2727
2828 "github.com/skycoin/dmsg/internal/cli"
29+ "github.com/skycoin/dmsg/internal/flags"
2930 "github.com/skycoin/dmsg/pkg/dmsg"
3031 "github.com/skycoin/dmsg/pkg/dmsghttp"
3132)
3233
3334var (
34- ctxs []context.Context
35- cancels []func ()
36- dmsgDiscs []string
37- dmsgSessions int
3835 dmsgcurlData string
3936 sk cipher.SecKey
4037 pk cipher.PubKey
@@ -46,21 +43,15 @@ var (
4643 dmsgcurlWait int
4744 dmsgcurlOutput string
4845 replace bool
49- proxyAddr []string
50- httpClients []* http.Client
46+ proxyAddr string
5147 dialer = proxy .Direct //nolint unused
52- dmsgHTTPPath string
53- useHTTP bool
5448 err error
5549)
5650
5751func init () {
5852 RootCmd .Flags ().SortFlags = false
59- RootCmd .Flags ().BoolVarP (& useHTTP , "http" , "z" , false , "use regular http to connect to dmsg discovery" )
60- RootCmd .Flags ().StringSliceVarP (& dmsgDiscs , "dmsg-disc" , "c" , []string {dmsg .DiscAddr (false )}, "dmsg discovery url(s)\033 [0m\n \r " )
61- RootCmd .Flags ().StringVarP (& dmsgHTTPPath , "dmsgconf" , "D" , "" , "dmsghttp-config path" )
62- RootCmd .Flags ().StringSliceVarP (& proxyAddr , "proxy" , "p" , proxyAddr , "connect to dmsg via proxy (i.e. '127.0.0.1:1080')" )
63- RootCmd .Flags ().IntVarP (& dmsgSessions , "sess" , "e" , 1 , "number of dmsg servers to connect to\033 [0m\n \r " )
53+ flags .InitFlags (RootCmd )
54+ RootCmd .Flags ().StringVarP (& proxyAddr , "proxy" , "p" , proxyAddr , "connect to DMSG via proxy (i.e. '127.0.0.1:1080')" )
6455 RootCmd .Flags ().StringVarP (& logLvl , "loglvl" , "l" , "fatal" , "[ debug | warn | error | fatal | panic | trace | info ]\033 [0m\n \r " )
6556 RootCmd .Flags ().StringVarP (& dmsgcurlData , "data" , "d" , "" , "dmsghttp POST data" )
6657 RootCmd .Flags ().StringVarP (& dmsgcurlOutput , "out" , "o" , "" , "output filepath" )
@@ -92,8 +83,8 @@ var RootCmd = &cobra.Command{
9283 }
9384 }
9485
95- if dmsgHTTPPath != "" {
96- dmsg .DmsghttpJSON , err = os .ReadFile (dmsgHTTPPath ) //nolint
86+ if flags . DmsgHTTPPath != "" {
87+ dmsg .DmsghttpJSON , err = os .ReadFile (flags . DmsgHTTPPath ) //nolint
9788 if err != nil {
9889 dlog .WithError (err ).Fatal ("Failed to read specified dmsghttp-config" )
9990 }
@@ -130,70 +121,31 @@ var RootCmd = &cobra.Command{
130121 }
131122
132123 var cErr curlError
133- if useHTTP {
134- if len (dmsgDiscs ) == 0 || dmsgDiscs [0 ] == "" {
135- dmsgDiscs = []string {dmsg .DiscAddr (false )}
136- }
137- dlog .Debug ("DMSG Discovery: " , dmsgDiscs )
138- for i := range dmsgDiscs {
139- ctx , cancel := cmdutil .SignalContext (context .Background (), dlog )
140- defer cancel ()
141- ctxs = append (ctxs , ctx )
142- cancels = append (cancels , cancel )
143-
144- httpClient := & http.Client {}
145-
146- if i < len (proxyAddr ) && proxyAddr [i ] != "" {
147- // Use SOCKS5 proxy dialer if specified
148- dialer , err := proxy .SOCKS5 ("tcp" , proxyAddr [i ], nil , proxy .Direct )
149- if err != nil {
150- dlog .WithError (fmt .Errorf ("Error creating SOCKS5 dialer: %v" , err )).Error (errorDesc ["COULDNT_RESOLVE_PROXY" ])
151- os .Exit (errorCode ["COULDNT_RESOLVE_PROXY" ])
152- }
153- transport := & http.Transport {
154- Dial : dialer .Dial ,
155- }
156- httpClient = & http.Client {
157- Transport : transport ,
158- }
159- ctxs [i ] = context .WithValue (context .Background (), "socks5_proxy" , proxyAddr [i ]) //nolint
160- }
161- httpClients = append (httpClients , httpClient )
124+ ctx , cancel := cmdutil .SignalContext (context .Background (), dlog )
125+ defer cancel ()
162126
163- cErr = handleRequest (ctxs [i ], dlog , pk , sk , httpClients [i ], dmsgDiscs [i ], dmsgSessions , parsedURL , dmsgcurlData , ! useHTTP )
164- if cErr .Code == 0 {
165- return nil
166- }
167- dlog .WithError (cErr .Error ).Debug ("An error occurred\n " )
127+ httpClient := & http.Client {}
128+ if proxyAddr != "" {
129+ // Use SOCKS5 proxy dialer if specified
130+ dialer , err := proxy .SOCKS5 ("tcp" , proxyAddr , nil , proxy .Direct )
131+ if err != nil {
132+ dlog .WithError (fmt .Errorf ("Error creating SOCKS5 dialer: %v" , err )).Error (errorDesc ["COULDNT_RESOLVE_PROXY" ])
133+ os .Exit (errorCode ["COULDNT_RESOLVE_PROXY" ])
168134 }
169- } else { //Use direct dmsg client & embedded config
170- ctx , cancel := cmdutil .SignalContext (context .Background (), dlog )
171- defer cancel ()
172- ctxs = append (ctxs , ctx )
173-
174- httpClient := & http.Client {}
175- if 0 < len (proxyAddr ) && proxyAddr [0 ] != "" {
176- // Use SOCKS5 proxy dialer if specified
177- dialer , err := proxy .SOCKS5 ("tcp" , proxyAddr [0 ], nil , proxy .Direct )
178- if err != nil {
179- dlog .WithError (fmt .Errorf ("Error creating SOCKS5 dialer: %v" , err )).Error (errorDesc ["COULDNT_RESOLVE_PROXY" ])
180- os .Exit (errorCode ["COULDNT_RESOLVE_PROXY" ])
181- }
182- transport := & http.Transport {
183- Dial : dialer .Dial ,
184- }
185- httpClient = & http.Client {
186- Transport : transport ,
187- }
188- ctxs [0 ] = context .WithValue (context .Background (), "socks5_proxy" , proxyAddr [0 ]) //nolint
135+ transport := & http.Transport {
136+ Dial : dialer .Dial ,
189137 }
190-
191- cErr = handleRequest (ctxs [0 ], dlog , pk , sk , httpClient , "" , dmsgSessions , parsedURL , dmsgcurlData , ! useHTTP )
192- if cErr .Code == 0 {
193- return nil
138+ httpClient = & http.Client {
139+ Transport : transport ,
194140 }
195- dlog .WithError (cErr .Error ).Debug ("An error occurred\n " )
141+ ctx = context .WithValue (context .Background (), "socks5_proxy" , proxyAddr ) //nolint
142+ }
143+
144+ cErr = handleRequest (ctx , pk , sk , httpClient , parsedURL , dmsgcurlData )
145+ if cErr .Code == 0 {
146+ return nil
196147 }
148+
197149 if cErr .Code != 0 {
198150 dlog .WithError (cErr .Error ).Error ("An error occurred\n " )
199151 return cErr .Error
@@ -202,7 +154,7 @@ var RootCmd = &cobra.Command{
202154 },
203155}
204156
205- func handleRequest (ctx context.Context , dmsgLogger * logging. Logger , pk cipher.PubKey , sk cipher.SecKey , httpClient * http.Client , dmsgDisc string , dmsgSessions int , parsedURL * url.URL , dmsgcurlData string , dmsgHTTP bool ) curlError {
157+ func handleRequest (ctx context.Context , pk cipher.PubKey , sk cipher.SecKey , httpClient * http.Client , parsedURL * url.URL , dmsgcurlData string ) curlError {
206158 file , err := prepareOutputFile ()
207159 if err != nil {
208160 return curlError {
@@ -213,17 +165,35 @@ func handleRequest(ctx context.Context, dmsgLogger *logging.Logger, pk cipher.Pu
213165 defer closeAndCleanFile (file , err )
214166 var dmsgC * dmsg.Client
215167 var closeDmsg func ()
216- if ! dmsgHTTP {
217- dmsgC , closeDmsg , err = cli .StartDmsg (ctx , dmsgLogger , pk , sk , httpClient , dmsgDisc , dmsgSessions )
168+
169+ if flags .UseDC {
170+ dmsgC , closeDmsg , err = cli .StartDmsgDirect (ctx , dlog , pk , sk , httpClient , "" , flags .DmsgSessions , pk .String ())
218171 } else {
219- dmsgC , closeDmsg , err = cli .StartDmsgDirect (ctx , dmsgLogger , pk , sk , httpClient , dmsgDisc , dmsgSessions , destPK .String ())
172+ if flags .UseHTTP {
173+ dmsgC , closeDmsg , err = cli .StartDmsg (ctx , dlog , pk , sk , httpClient , flags .DmsgDiscURL , flags .DmsgSessions )
174+ } else {
175+ var dmsgDC * dmsg.Client
176+ var closeDmsgDC func ()
177+ dmsgDC , closeDmsgDC , err = cli .StartDmsgDirect (ctx , dlog , pk , sk , httpClient , "" , flags .DmsgSessions , dmsg .ExtractPKFromDmsgAddr (flags .DmsgDiscAddr ))
178+ if err != nil {
179+ dlog .WithError (err ).Error ("Error connecting to dmsg network" )
180+ return curlError {
181+ Error : fmt .Errorf ("%s" , errorDesc ["DMSG_INIT" ]),
182+ Code : errorCode ["DMSG_INIT" ],
183+ }
184+ }
185+ defer closeDmsgDC ()
186+ dmsgHTTP := & http.Client {Transport : dmsghttp .MakeHTTPTransport (ctx , dmsgDC )}
187+ dmsgC , closeDmsg , err = cli .StartDmsg (ctx , dlog , pk , sk , dmsgHTTP , flags .DmsgDiscAddr , flags .DmsgSessions )
188+ }
220189 }
190+
221191 if err != nil {
222192 dlog .WithError (err ).Debug ("Error connecting to dmsg network" )
223- // return curlError{
224- // Error: fmt.Errorf("%s", errorDesc["DMSG_INIT"]),
225- // Code: errorCode["DMSG_INIT"],
226- // }
193+ return curlError {
194+ Error : fmt .Errorf ("%s" , errorDesc ["DMSG_INIT" ]),
195+ Code : errorCode ["DMSG_INIT" ],
196+ }
227197 }
228198 defer closeDmsg ()
229199
0 commit comments