fix: 2.9 ipv4|ipv6|auto
This commit is contained in:
parent
23ee7e5d33
commit
1c6477531c
@ -136,6 +136,7 @@ type ServerConfig struct {
|
|||||||
Logging LoggingConfig `mapstructure:"logging"`
|
Logging LoggingConfig `mapstructure:"logging"`
|
||||||
GlobalExtensions []string `mapstructure:"globalextensions"`
|
GlobalExtensions []string `mapstructure:"globalextensions"`
|
||||||
FileNaming string `mapstructure:"filenaming"`
|
FileNaming string `mapstructure:"filenaming"`
|
||||||
|
ForceProtocol string `mapstructure:"forceprotocol"` // NEW field
|
||||||
// Removed TempPath, LoggingJSON
|
// Removed TempPath, LoggingJSON
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,16 +382,41 @@ func createAndMountISO(size, mountpoint, charset string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var dialer = &net.Dialer{
|
func initializeNetworkProtocol(forceProtocol string) (*net.Dialer, error) {
|
||||||
DualStack: true,
|
switch forceProtocol {
|
||||||
Timeout: 5 * time.Second,
|
case "ipv4":
|
||||||
|
return &net.Dialer{
|
||||||
|
Timeout: 5 * time.Second,
|
||||||
|
DualStack: false,
|
||||||
|
Control: func(network, address string, c syscall.RawConn) error {
|
||||||
|
if network == "tcp6" {
|
||||||
|
return fmt.Errorf("IPv6 is disabled by forceprotocol setting")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
|
case "ipv6":
|
||||||
|
return &net.Dialer{
|
||||||
|
Timeout: 5 * time.Second,
|
||||||
|
DualStack: false,
|
||||||
|
Control: func(network, address string, c syscall.RawConn) error {
|
||||||
|
if network == "tcp4" {
|
||||||
|
return fmt.Errorf("IPv4 is disabled by forceprotocol setting")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
|
case "auto":
|
||||||
|
return &net.Dialer{
|
||||||
|
Timeout: 5 * time.Second,
|
||||||
|
DualStack: true,
|
||||||
|
}, nil
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("invalid forceprotocol value: %s", forceProtocol)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var dualStackClient = &http.Client{
|
var dualStackClient *http.Client
|
||||||
Transport: &http.Transport{
|
|
||||||
DialContext: dialer.DialContext,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
setDefaults()
|
setDefaults()
|
||||||
@ -469,8 +495,9 @@ func main() {
|
|||||||
log.Infof("Server PreCaching: %v", conf.Server.PreCaching)
|
log.Infof("Server PreCaching: %v", conf.Server.PreCaching)
|
||||||
log.Infof("Server FileTTLEnabled: %v", conf.Server.FileTTLEnabled)
|
log.Infof("Server FileTTLEnabled: %v", conf.Server.FileTTLEnabled)
|
||||||
log.Infof("Server DeduplicationEnabled: %v", conf.Server.DeduplicationEnabled)
|
log.Infof("Server DeduplicationEnabled: %v", conf.Server.DeduplicationEnabled)
|
||||||
log.Infof("Server BindIP: %s", conf.Server.BindIP) // Hinzugefügt: Logging für BindIP
|
log.Infof("Server BindIP: %s", conf.Server.BindIP) // Hinzugefügt: Logging für BindIP
|
||||||
log.Infof("Server FileNaming: %s", conf.Server.FileNaming) // Added: Logging for FileNaming
|
log.Infof("Server FileNaming: %s", conf.Server.FileNaming) // Added: Logging for FileNaming
|
||||||
|
log.Infof("Server ForceProtocol: %s", conf.Server.ForceProtocol) // Added: Logging for ForceProtocol
|
||||||
|
|
||||||
err = writePIDFile(conf.Server.PIDFilePath) // Write PID file after config is loaded
|
err = writePIDFile(conf.Server.PIDFilePath) // Write PID file after config is loaded
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -590,6 +617,17 @@ func main() {
|
|||||||
log.Fatalf("Invalid IdleTimeout: %v", err)
|
log.Fatalf("Invalid IdleTimeout: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize network protocol based on forceprotocol setting
|
||||||
|
dialer, err := initializeNetworkProtocol(conf.Server.ForceProtocol)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to initialize network protocol: %v", err)
|
||||||
|
}
|
||||||
|
dualStackClient = &http.Client{
|
||||||
|
Transport: &http.Transport{
|
||||||
|
DialContext: dialer.DialContext,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
server := &http.Server{
|
server := &http.Server{
|
||||||
Addr: conf.Server.BindIP + ":" + conf.Server.ListenPort, // Geändert: Nutzung von BindIP
|
Addr: conf.Server.BindIP + ":" + conf.Server.ListenPort, // Geändert: Nutzung von BindIP
|
||||||
Handler: router,
|
Handler: router,
|
||||||
@ -668,6 +706,7 @@ deduplicationenabled = true
|
|||||||
globalextensions = [".txt", ".pdf", ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".svg", ".webp"]
|
globalextensions = [".txt", ".pdf", ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".svg", ".webp"]
|
||||||
# FileNaming options: "HMAC", "None"
|
# FileNaming options: "HMAC", "None"
|
||||||
filenaming = "HMAC"
|
filenaming = "HMAC"
|
||||||
|
forceprotocol = "auto"
|
||||||
|
|
||||||
[logging]
|
[logging]
|
||||||
level = "info"
|
level = "info"
|
||||||
@ -733,7 +772,7 @@ uploadqueuesize = 50
|
|||||||
# Add file-specific configurations here
|
# Add file-specific configurations here
|
||||||
|
|
||||||
[build]
|
[build]
|
||||||
version = "2.7-Stable"
|
version = "2.9-Stable"
|
||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -827,6 +866,7 @@ func setDefaults() {
|
|||||||
viper.SetDefault("server.loggingjson", false)
|
viper.SetDefault("server.loggingjson", false)
|
||||||
viper.SetDefault("server.filettlenabled", true)
|
viper.SetDefault("server.filettlenabled", true)
|
||||||
viper.SetDefault("server.deduplicationenabled", true)
|
viper.SetDefault("server.deduplicationenabled", true)
|
||||||
|
viper.SetDefault("server.forceprotocol", "auto")
|
||||||
|
|
||||||
viper.SetDefault("timeouts.readtimeout", "4800s")
|
viper.SetDefault("timeouts.readtimeout", "4800s")
|
||||||
viper.SetDefault("timeouts.writetimeout", "4800s")
|
viper.SetDefault("timeouts.writetimeout", "4800s")
|
||||||
@ -1181,6 +1221,9 @@ func logSystemInfo() {
|
|||||||
log.Infof("Platform Family: %s", hInfo.PlatformFamily)
|
log.Infof("Platform Family: %s", hInfo.PlatformFamily)
|
||||||
log.Infof("Platform Version: %s", hInfo.PlatformVersion)
|
log.Infof("Platform Version: %s", hInfo.PlatformVersion)
|
||||||
log.Infof("Kernel Version: %s", hInfo.KernelVersion)
|
log.Infof("Kernel Version: %s", hInfo.KernelVersion)
|
||||||
|
|
||||||
|
// Log the forceprotocol configuration
|
||||||
|
log.Infof("Force Protocol: %s", conf.Server.ForceProtocol)
|
||||||
}
|
}
|
||||||
|
|
||||||
func initMetrics() {
|
func initMetrics() {
|
||||||
|
24
config.toml
24
config.toml
@ -1,5 +1,19 @@
|
|||||||
[server]
|
# Server configuration
|
||||||
// ...existing code...
|
listenport = "8080" # TCP port for incoming requests
|
||||||
# FileNaming options: "HMAC", "None"
|
unixsocket = false # Use Unix domain socket instead of TCP
|
||||||
FileNaming = "HMAC"
|
storagepath = "/path/to/hmac-file-server/data/" # Directory to store uploaded files
|
||||||
// ...existing code...
|
loglevel = "debug" # Logging level: "debug", "info", "warn", "error"
|
||||||
|
logfile = "/path/to/hmac-file-server.log" # Path to log file; leave empty to use stdout
|
||||||
|
metricsenabled = true # Enable Prometheus metrics
|
||||||
|
metricsport = "9090" # Port for Prometheus metrics
|
||||||
|
deduplicationenabled = true
|
||||||
|
minfreebytes = "5GB" # Minimum free disk space required
|
||||||
|
filettl = "2Y" # Time-to-live for files
|
||||||
|
filettlenabled = false # Enable TTL checks and cleanup
|
||||||
|
autoadjustworkers = true # Automatically adjust worker threads based on load
|
||||||
|
networkevents = false # Enable detailed network event logging
|
||||||
|
pidfilepath = "./hmac-file-server.pid" # Path to PID file
|
||||||
|
precaching = true # Pre-cache file structures on startup
|
||||||
|
|
||||||
|
# New option to force network protocol
|
||||||
|
forceprotocol = "auto" # Options: "ipv4", "ipv6", "auto"
|
||||||
|
12
wiki.md
12
wiki.md
@ -62,6 +62,9 @@ autoadjustworkers = true # Automatically adjust worker threads based on load
|
|||||||
networkevents = false # Enable detailed network event logging
|
networkevents = false # Enable detailed network event logging
|
||||||
pidfilepath = "./hmac-file-server.pid" # Path to PID file
|
pidfilepath = "./hmac-file-server.pid" # Path to PID file
|
||||||
precaching = true # Pre-cache file structures on startup
|
precaching = true # Pre-cache file structures on startup
|
||||||
|
|
||||||
|
# New option to force network protocol
|
||||||
|
forceprotocol = "auto" # Options: "ipv4", "ipv6", "auto"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Configuration Options
|
#### Configuration Options
|
||||||
@ -143,6 +146,14 @@ precaching = true # Pre-cache file structures on startup
|
|||||||
- *Description*: Enables pre-caching of file structures on startup to improve access speed and performance.
|
- *Description*: Enables pre-caching of file structures on startup to improve access speed and performance.
|
||||||
- *Default*: `true`
|
- *Default*: `true`
|
||||||
|
|
||||||
|
- **forceprotocol**:
|
||||||
|
- *Type*: `String`
|
||||||
|
- *Description*: Specifies the network protocol to use for server communication.
|
||||||
|
- `"ipv4"`: Forces the server to use IPv4.
|
||||||
|
- `"ipv6"`: Forces the server to use IPv6.
|
||||||
|
- `"auto"`: Uses the system's default behavior (dual-stack).
|
||||||
|
- *Default*: `"auto"`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Deduplication Settings
|
### Deduplication Settings
|
||||||
@ -495,6 +506,7 @@ autoadjustworkers = true
|
|||||||
networkevents = false
|
networkevents = false
|
||||||
pidfilepath = "./hmac-file-server.pid"
|
pidfilepath = "./hmac-file-server.pid"
|
||||||
precaching = true
|
precaching = true
|
||||||
|
forceprotocol = "auto"
|
||||||
|
|
||||||
# Deduplication settings
|
# Deduplication settings
|
||||||
[deduplication]
|
[deduplication]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user