removed kicad-libs and teenstep after moving to github
[svn42.git] / go / door_nick_lookup_zmq / main.go
1 // (c) Bernhard Tittelbach, 2013
2
3 package main
4
5 import (
6     "os"
7     "flag"
8     "fmt"
9     //~ "log/syslog"
10     //~ "log"
11 )
12
13 // ---------- Main Code -------------
14
15 var (
16     zmqport_ string
17     door_keys_file_ string
18     use_syslog_ bool
19     start_server_ bool
20     //~ syslog_ *log.Logger
21 )
22
23 func usage() {
24     fmt.Fprintf(os.Stderr, "Usage: door_nick_lookup_zmq [options] [keyid1 [keyid2 [...]]]\n")
25     flag.PrintDefaults()
26 }
27
28 func init() {
29     flag.StringVar(&zmqport_, "zmqport", "ipc:///run/tuer/door_keyname.ipc", "zmq socket path")
30     flag.StringVar(&door_keys_file_, "keysfile", "/flash/keys", "door keys file")
31     //~ flag.BoolVar(&use_syslog_, "syslog", false, "log to syslog local2 facility")
32     flag.BoolVar(&start_server_, "server", false, "open 0mq socket and listen to requests")
33     flag.Usage = usage
34     flag.Parse()
35 }
36
37 func getFileMTime(filename string ) (int64, error) {
38     keysfile, err := os.Open(filename)
39     if err != nil { return 0, err }
40     defer keysfile.Close()
41     stat, err := keysfile.Stat()
42     if err != nil { return 0, err }
43     return stat.ModTime().Unix(), nil
44 }
45
46 func main() {
47     knstore := new(KeyNickStore)
48     err := knstore.LoadKeysFile(door_keys_file_)
49     if err != nil { panic(err) }
50     door_keys_mtime, err := getFileMTime(door_keys_file_)
51     if err != nil { panic(err) }
52     
53     for _, key := range(flag.Args()) {
54         nick, err := knstore.LookupHexKeyNick(key)
55         if err != nil {
56             fmt.Printf("ERROR: %s for key %s\n", err.Error(), key)
57         } else {
58             fmt.Println(key,nick)
59         }
60     }
61
62     if ! start_server_ {
63        os.Exit(0)
64     }
65
66     zmqctx, zmqchans := ZmqsInit(zmqport_)
67     if zmqchans == nil {
68         os.Exit(0)
69     }
70     defer zmqchans.Close()
71     defer zmqctx.Close()
72
73     //~ if use_syslog_ {
74         //~ var logerr error
75         //~ syslog_, logerr = syslog.NewLogger(syslog.LOG_INFO | syslog.LOG_LOCAL2, 0)
76         //~ if logerr != nil { panic(logerr) }
77         //~ syslog_.Print("started")
78         //~ defer syslog_.Print("exiting")
79     //~ }
80
81     for keybytes := range(zmqchans.In()) {
82         current_door_keys_mtime, err := getFileMTime(door_keys_file_)
83         if err == nil && current_door_keys_mtime > door_keys_mtime {
84             door_keys_mtime = current_door_keys_mtime
85             knstore.LoadKeysFile(door_keys_file_)
86         }
87         nick, err := knstore.LookupHexKeyNick(string(keybytes[0]))
88         if err != nil {
89             zmqchans.Out() <- [][]byte{[]byte("ERROR"), []byte(err.Error())}
90         } else {
91             zmqchans.Out() <- [][]byte{[]byte("RESULT"), keybytes[0], []byte(nick)}
92         }
93     }
94 }