mirror of
https://github.com/Gouryella/drip.git
synced 2026-03-03 00:31:41 +00:00
feat(cli): Supports stopping HTTPS tunnels and optimizes configuration display logic.
- Added support for HTTPS tunnel types to the `drip stop` command and updated the example documentation. - Optimized token display logic to adapt to token formats of different lengths. - Adjust the alignment of FrameHandler buffer read/write and timeout configuration formats. - Move the error handling logic location to ensure data read integrity. - Introducing context to control request lifecycle and supporting cancel transfer in proxy handlers - The hop-by-hop header judgment format in the unified response header filtering rules - Add a context-aware streaming request cancellation mechanism and extend the channel cleanup timeout. - Add a context control field to the TCP connection structure to support connection lifecycle management. - Format the httpResponseWriter field comments
This commit is contained in:
@@ -117,9 +117,15 @@ func runConfigShow(cmd *cobra.Command, args []string) error {
|
||||
|
||||
var displayToken string
|
||||
if cfg.Token != "" {
|
||||
if len(cfg.Token) > 10 {
|
||||
displayToken = cfg.Token[:3] + "***" + cfg.Token[len(cfg.Token)-3:]
|
||||
tokenLen := len(cfg.Token)
|
||||
if tokenLen <= 3 {
|
||||
// For very short tokens, just show asterisks
|
||||
displayToken = "***"
|
||||
} else if tokenLen > 10 {
|
||||
// For long tokens, show first 3 and last 3 characters
|
||||
displayToken = cfg.Token[:3] + "***" + cfg.Token[tokenLen-3:]
|
||||
} else {
|
||||
// For medium tokens (4-10 chars), show first 3 characters
|
||||
displayToken = cfg.Token[:3] + "***"
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -14,6 +14,7 @@ var stopCmd = &cobra.Command{
|
||||
|
||||
Examples:
|
||||
drip stop http 3000 Stop HTTP tunnel on port 3000
|
||||
drip stop https 8443 Stop HTTPS tunnel on port 8443
|
||||
drip stop tcp 5432 Stop TCP tunnel on port 5432
|
||||
drip stop all Stop all running tunnels
|
||||
|
||||
@@ -37,8 +38,8 @@ func runStop(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
|
||||
tunnelType := args[0]
|
||||
if tunnelType != "http" && tunnelType != "tcp" {
|
||||
return fmt.Errorf("invalid tunnel type: %s (must be 'http' or 'tcp')", tunnelType)
|
||||
if tunnelType != "http" && tunnelType != "https" && tunnelType != "tcp" {
|
||||
return fmt.Errorf("invalid tunnel type: %s (must be 'http', 'https', or 'tcp')", tunnelType)
|
||||
}
|
||||
|
||||
port, err := strconv.Atoi(args[1])
|
||||
|
||||
@@ -15,6 +15,7 @@ import (
|
||||
|
||||
"drip/internal/shared/pool"
|
||||
"drip/internal/shared/protocol"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
@@ -97,10 +98,10 @@ func NewFrameHandler(conn net.Conn, frameWriter *protocol.FrameWriter, localHost
|
||||
DisableKeepAlives: false, // Enable keep-alive for connection reuse
|
||||
TLSHandshakeTimeout: 5 * time.Second, // Reduced from 10s for faster failure detection
|
||||
TLSClientConfig: tlsConfig,
|
||||
ResponseHeaderTimeout: 15 * time.Second, // Reduced from 30s for faster timeout
|
||||
ResponseHeaderTimeout: 15 * time.Second, // Reduced from 30s for faster timeout
|
||||
ExpectContinueTimeout: 500 * time.Millisecond, // Reduced from 1s for better responsiveness
|
||||
WriteBufferSize: 32 * 1024, // 32KB write buffer
|
||||
ReadBufferSize: 32 * 1024, // 32KB read buffer
|
||||
WriteBufferSize: 32 * 1024, // 32KB write buffer
|
||||
ReadBufferSize: 32 * 1024, // 32KB read buffer
|
||||
DialContext: (&net.Dialer{
|
||||
Timeout: 3 * time.Second, // Reduced from 5s for faster connection attempts
|
||||
KeepAlive: 30 * time.Second, // Keep TCP keepalive
|
||||
@@ -226,9 +227,6 @@ func (h *FrameHandler) handleLocalResponse(stream *Stream) {
|
||||
}
|
||||
|
||||
n, err := stream.LocalConn.Read(buf)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
|
||||
if n > 0 {
|
||||
if h.isClosedCheck != nil && h.isClosedCheck() {
|
||||
@@ -264,6 +262,10 @@ func (h *FrameHandler) handleLocalResponse(stream *Stream) {
|
||||
|
||||
h.stats.AddBytesOut(int64(len(payload)))
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user