aboutsummaryrefslogtreecommitdiff
path: root/challenge.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-12-25 16:03:37 +0100
committerDimitri Sokolyuk <demon@dim13.org>2015-12-25 16:03:37 +0100
commit1e28cc43c5691f90aae4d2b77e5ecaf52432f2eb (patch)
tree7e1877c324ffd145b84be15d99409647acb7a661 /challenge.go
parenta262e55aab59f23ccce5b4ebe3771a1c5e792dc2 (diff)
timeout
Diffstat (limited to 'challenge.go')
-rw-r--r--challenge.go22
1 files changed, 19 insertions, 3 deletions
diff --git a/challenge.go b/challenge.go
index 7fee500..2571012 100644
--- a/challenge.go
+++ b/challenge.go
@@ -1,17 +1,33 @@
package acme
+import (
+ "errors"
+ "time"
+)
+
// Solver decribes a solving interface
type Solver interface {
Solve() error
- Solved() error
+ Abort() error
}
var canSolve = make(map[ChallengeType]bool)
+var errTimeOut = errors.New("time out")
func registerChallenge(c ChallengeType) {
canSolve[c] = true
}
-func Solve(s Solver) error {
- return s.Solve()
+func Solve(s Solver, timeout time.Duration) error {
+ errc := make(chan error)
+ go func() {
+ errc <- s.Solve()
+ }()
+ select {
+ case err := <-errc:
+ return err
+ case <-time.After(timeout):
+ s.Abort()
+ return errTimeOut
+ }
}