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"`
|
||||
GlobalExtensions []string `mapstructure:"globalextensions"`
|
||||
FileNaming string `mapstructure:"filenaming"`
|
||||
ForceProtocol string `mapstructure:"forceprotocol"` // NEW field
|
||||
// Removed TempPath, LoggingJSON
|
||||
}
|
||||
|
||||
@ -381,16 +382,41 @@ func createAndMountISO(size, mountpoint, charset string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
var dialer = &net.Dialer{
|
||||
DualStack: true,
|
||||
Timeout: 5 * time.Second,
|
||||
func initializeNetworkProtocol(forceProtocol string) (*net.Dialer, error) {
|
||||
switch forceProtocol {
|
||||
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{
|
||||
Transport: &http.Transport{
|
||||
DialContext: dialer.DialContext,
|
||||
},
|
||||
}
|
||||
var dualStackClient *http.Client
|
||||
|
||||
func main() {
|
||||
setDefaults()
|
||||
@ -469,8 +495,9 @@ func main() {
|
||||
log.Infof("Server PreCaching: %v", conf.Server.PreCaching)
|
||||
log.Infof("Server FileTTLEnabled: %v", conf.Server.FileTTLEnabled)
|
||||
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 FileNaming: %s", conf.Server.FileNaming) // Added: Logging for FileNaming
|
||||
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 ForceProtocol: %s", conf.Server.ForceProtocol) // Added: Logging for ForceProtocol
|
||||
|
||||
err = writePIDFile(conf.Server.PIDFilePath) // Write PID file after config is loaded
|
||||
if err != nil {
|
||||
@ -590,6 +617,17 @@ func main() {
|
||||
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{
|
||||
Addr: conf.Server.BindIP + ":" + conf.Server.ListenPort, // Geändert: Nutzung von BindIP
|
||||
Handler: router,
|
||||
@ -668,6 +706,7 @@ deduplicationenabled = true
|
||||
globalextensions = [".txt", ".pdf", ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".svg", ".webp"]
|
||||
# FileNaming options: "HMAC", "None"
|
||||
filenaming = "HMAC"
|
||||
forceprotocol = "auto"
|
||||
|
||||
[logging]
|
||||
level = "info"
|
||||
@ -733,7 +772,7 @@ uploadqueuesize = 50
|
||||
# Add file-specific configurations here
|
||||
|
||||
[build]
|
||||
version = "2.7-Stable"
|
||||
version = "2.9-Stable"
|
||||
`)
|
||||
}
|
||||
|
||||
@ -827,6 +866,7 @@ func setDefaults() {
|
||||
viper.SetDefault("server.loggingjson", false)
|
||||
viper.SetDefault("server.filettlenabled", true)
|
||||
viper.SetDefault("server.deduplicationenabled", true)
|
||||
viper.SetDefault("server.forceprotocol", "auto")
|
||||
|
||||
viper.SetDefault("timeouts.readtimeout", "4800s")
|
||||
viper.SetDefault("timeouts.writetimeout", "4800s")
|
||||
@ -1181,6 +1221,9 @@ func logSystemInfo() {
|
||||
log.Infof("Platform Family: %s", hInfo.PlatformFamily)
|
||||
log.Infof("Platform Version: %s", hInfo.PlatformVersion)
|
||||
log.Infof("Kernel Version: %s", hInfo.KernelVersion)
|
||||
|
||||
// Log the forceprotocol configuration
|
||||
log.Infof("Force Protocol: %s", conf.Server.ForceProtocol)
|
||||
}
|
||||
|
||||
func initMetrics() {
|
||||
|
24
config.toml
24
config.toml
@ -1,5 +1,19 @@
|
||||
[server]
|
||||
// ...existing code...
|
||||
# FileNaming options: "HMAC", "None"
|
||||
FileNaming = "HMAC"
|
||||
// ...existing code...
|
||||
# Server configuration
|
||||
listenport = "8080" # TCP port for incoming requests
|
||||
unixsocket = false # Use Unix domain socket instead of TCP
|
||||
storagepath = "/path/to/hmac-file-server/data/" # Directory to store uploaded files
|
||||
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
|
||||
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"
|
||||
```
|
||||
|
||||
#### 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.
|
||||
- *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
|
||||
@ -495,6 +506,7 @@ autoadjustworkers = true
|
||||
networkevents = false
|
||||
pidfilepath = "./hmac-file-server.pid"
|
||||
precaching = true
|
||||
forceprotocol = "auto"
|
||||
|
||||
# Deduplication settings
|
||||
[deduplication]
|
||||
|
Loading…
x
Reference in New Issue
Block a user