Ubuntu Pastebin

Paste from Chipaca at Tue, 28 Jul 2015 15:21:28 +0000

Download as text
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// -*- Mode: Go; indent-tabs-mode: t -*-

/*
 * Copyright (C) 2014-2015 Canonical Ltd
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

package main

import (
	"crypto/md5"
	"fmt"
	"io"
	"net"
	"net/http"
	"os"
	"time"
)

var (
	usage = fmt.Errorf("Usage: %s URL MD5 TIMEOUT INTERVAL; for example: http://start.ubuntu.com/connectivity-check.html 4589f42e1546aa47ca181e5d949d310b 1s 5s", os.Args[0])
)

func die(err error) {
	fmt.Fprintln(os.Stderr, "error:", err)
	os.Exit(1)
}

func main() {
	if len(os.Args) != 5 {
		die(usage)
	}

	targetURL := os.Args[1]
	targetMD5 := os.Args[2]
	targetTimeout, err := time.ParseDuration(os.Args[3])
	if err != nil {
		die(err)
	}
	interval, err := time.ParseDuration(os.Args[4])
	if err != nil {
		die(err)
	}

	client := &http.Client{
		Transport: &http.Transport{
			Dial: func(network, addr string) (net.Conn, error) {
				return net.DialTimeout(network, addr, targetTimeout)
			},
		},
	}

	ticker := time.NewTicker(interval)

	for {
		if resp, err := client.Get(targetURL); err == nil {
			h := md5.New()
			io.Copy(h, resp.Body)
			if fmt.Sprintf("%x", h.Sum(nil)) == targetMD5 {
				os.Exit(0)
			}
		}
		<-ticker.C
	}
}
Download as text