+++ /dev/null
-// (c) Bernhard Tittelbach, 2013
-
-package main
-
-import (
- "os"
- "flag"
- "fmt"
- //~ "log/syslog"
- //~ "log"
-)
-
-// ---------- Main Code -------------
-
-var (
- zmqport_ string
- door_keys_file_ string
- use_syslog_ bool
- start_server_ bool
- //~ syslog_ *log.Logger
-)
-
-func usage() {
- fmt.Fprintf(os.Stderr, "Usage: door_nick_lookup_zmq [options] [keyid1 [keyid2 [...]]]\n")
- flag.PrintDefaults()
-}
-
-func init() {
- flag.StringVar(&zmqport_, "zmqport", "ipc:///run/tuer/door_keyname.ipc", "zmq socket path")
- flag.StringVar(&door_keys_file_, "keysfile", "/flash/keys", "door keys file")
- //~ flag.BoolVar(&use_syslog_, "syslog", false, "log to syslog local2 facility")
- flag.BoolVar(&start_server_, "server", false, "open 0mq socket and listen to requests")
- flag.Usage = usage
- flag.Parse()
-}
-
-func getFileMTime(filename string ) (int64, error) {
- keysfile, err := os.Open(filename)
- if err != nil { return 0, err }
- defer keysfile.Close()
- stat, err := keysfile.Stat()
- if err != nil { return 0, err }
- return stat.ModTime().Unix(), nil
-}
-
-func main() {
- knstore := new(KeyNickStore)
- err := knstore.LoadKeysFile(door_keys_file_)
- if err != nil { panic(err) }
- door_keys_mtime, err := getFileMTime(door_keys_file_)
- if err != nil { panic(err) }
-
- for _, key := range(flag.Args()) {
- nick, err := knstore.LookupHexKeyNick(key)
- if err != nil {
- fmt.Printf("ERROR: %s for key %s\n", err.Error(), key)
- } else {
- fmt.Println(key,nick)
- }
- }
-
- if ! start_server_ {
- os.Exit(0)
- }
-
- zmqctx, zmqchans := ZmqsInit(zmqport_)
- if zmqchans == nil {
- os.Exit(0)
- }
- defer zmqchans.Close()
- defer zmqctx.Close()
-
- //~ if use_syslog_ {
- //~ var logerr error
- //~ syslog_, logerr = syslog.NewLogger(syslog.LOG_INFO | syslog.LOG_LOCAL2, 0)
- //~ if logerr != nil { panic(logerr) }
- //~ syslog_.Print("started")
- //~ defer syslog_.Print("exiting")
- //~ }
-
- for keybytes := range(zmqchans.In()) {
- current_door_keys_mtime, err := getFileMTime(door_keys_file_)
- if err == nil && current_door_keys_mtime > door_keys_mtime {
- door_keys_mtime = current_door_keys_mtime
- knstore.LoadKeysFile(door_keys_file_)
- }
- nick, err := knstore.LookupHexKeyNick(string(keybytes[0]))
- if err != nil {
- zmqchans.Out() <- [][]byte{[]byte("ERROR"), []byte(err.Error())}
- } else {
- zmqchans.Out() <- [][]byte{[]byte("RESULT"), keybytes[0], []byte(nick)}
- }
- }
-}