+ var freqChunked int64
+ if yml.FreqChunked != nil {
+ if *yml.FreqChunked == 0 {
+ return nil, errors.New("freqchunked value must be greater than zero")
+ }
+ freqChunked = int64(*yml.FreqChunked) * 1024
+ }
+ var freqMinSize int64
+ if yml.FreqMinSize != nil {
+ freqMinSize = int64(*yml.FreqMinSize) * 1024
+ }
+
+ defOnlineDeadline := uint(DefaultDeadline)
+ if yml.OnlineDeadline != nil {
+ if *yml.OnlineDeadline <= 0 {
+ return nil, errors.New("OnlineDeadline must be at least 1 second")
+ }
+ defOnlineDeadline = *yml.OnlineDeadline
+ }
+ var defMaxOnlineTime uint
+ if yml.MaxOnlineTime != nil {
+ defMaxOnlineTime = *yml.MaxOnlineTime
+ }
+
+ var calls []*Call
+ for _, callYml := range yml.Calls {
+ expr, err := cronexpr.Parse(callYml.Cron)
+ if err != nil {
+ return nil, err
+ }
+ nice := uint8(255)
+ if callYml.Nice != nil {
+ if *callYml.Nice < 1 || *callYml.Nice > 255 {
+ return nil, errors.New("Nice must be between 1 and 255")
+ }
+ nice = uint8(*callYml.Nice)
+ }
+ var xx TRxTx
+ switch callYml.Xx {
+ case "rx":
+ xx = TRx
+ case "tx":
+ xx = TTx
+ case "":
+ default:
+ return nil, errors.New("xx field must be either \"rx\" or \"tx\"")
+ }
+ var addr *string
+ if callYml.Addr != nil {
+ if a, exists := yml.Addrs[*callYml.Addr]; exists {
+ addr = &a
+ } else {
+ addr = callYml.Addr
+ }
+ }
+ onlineDeadline := defOnlineDeadline
+ if callYml.OnlineDeadline != nil {
+ if *callYml.OnlineDeadline == 0 {
+ return nil, errors.New("OnlineDeadline must be at least 1 second")
+ }
+ onlineDeadline = *callYml.OnlineDeadline
+ }
+ var maxOnlineTime uint
+ if callYml.MaxOnlineTime != nil {
+ maxOnlineTime = *callYml.MaxOnlineTime
+ }
+ calls = append(calls, &Call{
+ Cron: expr,
+ Nice: nice,
+ Xx: xx,
+ Addr: addr,
+ OnlineDeadline: onlineDeadline,
+ MaxOnlineTime: maxOnlineTime,
+ })
+ }