MCPcopy Create free account
hub / github.com/Invisv-Privacy/masque / HandleConnectMasque

Function HandleConnectMasque

example/preproxy/main.go:323–377  ·  view source on GitHub ↗

HandleConnectMasque creates a new TCP or UDP stream via the relayClient and returns the connected stream upon success.

(relayClient *masqueH3.Client, c net.Conn, target string, isTcp bool, fail connFailFunc)

Source from the content-addressed store, hash-verified

321// HandleConnectMasque creates a new TCP or UDP stream via the relayClient and
322// returns the connected stream upon success.
323func HandleConnectMasque(relayClient *masqueH3.Client, c net.Conn, target string, isTcp bool, fail connFailFunc) (io.ReadWriteCloser, error) {
324 _, port, err := net.SplitHostPort(target)
325 if err != nil {
326 logger.Error("Failed to split host and port", "err", err)
327 fail(c)
328 if err := c.Close(); err != nil {
329 logger.Error("Failed to close c", "err", err)
330 }
331 return nil, err
332 }
333
334 portInt, err := strconv.Atoi(port)
335 if err != nil {
336 logger.Error("Failed to convert port to int", "err", err)
337 fail(c)
338 if err := c.Close(); err != nil {
339 logger.Error("Failed to close c", "err", err)
340 }
341 return nil, err
342 }
343
344 if masque.IsDisallowedPort(uint16(portInt)) {
345 logger.Error("Disallowed port", "port", port)
346 fail(c)
347 if err := c.Close(); err != nil {
348 logger.Error("Failed to close c", "err", err)
349 }
350 return nil, fmt.Errorf("Disallowed port: %s", port)
351 }
352
353 var masqueConn io.ReadWriteCloser
354 if isTcp {
355 masqueConn, err = relayClient.CreateTCPStream(target)
356 if err != nil {
357 logger.Error("Failed to create TCP stream", "err", err)
358 fail(c)
359 if err := c.Close(); err != nil {
360 logger.Error("Failed to close c", "err", err)
361 }
362 return nil, err
363 }
364 } else {
365 masqueConn, err = relayClient.CreateUDPStream(target)
366 if err != nil {
367 logger.Error("Failed to create UDP stream", "err", err)
368 fail(c)
369 if err := c.Close(); err != nil {
370 logger.Error("Failed to close c", "err", err)
371 }
372 return nil, err
373 }
374 }
375
376 return masqueConn, nil
377}

Callers 1

mainFunction · 0.85

Calls 4

IsDisallowedPortFunction · 0.92
CloseMethod · 0.45
CreateTCPStreamMethod · 0.45
CreateUDPStreamMethod · 0.45

Tested by

no test coverage detected