|
|
@ -487,36 +487,13 @@ func originate(u string) string {
|
|
|
|
return ""
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var allhandles = make(map[string]string)
|
|
|
|
var allhandles = cache.New(cache.Options{Filler: func(xid string) (string, bool) {
|
|
|
|
var handlelock sync.Mutex
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// handle, handle@host
|
|
|
|
|
|
|
|
func handles(xid string) (string, string) {
|
|
|
|
|
|
|
|
if xid == "" {
|
|
|
|
|
|
|
|
return "", ""
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
handlelock.Lock()
|
|
|
|
|
|
|
|
handle := allhandles[xid]
|
|
|
|
|
|
|
|
handlelock.Unlock()
|
|
|
|
|
|
|
|
if handle == "" {
|
|
|
|
|
|
|
|
handle = findhandle(xid)
|
|
|
|
|
|
|
|
handlelock.Lock()
|
|
|
|
|
|
|
|
allhandles[xid] = handle
|
|
|
|
|
|
|
|
handlelock.Unlock()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if handle == xid {
|
|
|
|
|
|
|
|
return xid, xid
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return handle, handle + "@" + originate(xid)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func findhandle(xid string) string {
|
|
|
|
|
|
|
|
row := stmtGetXonker.QueryRow(xid, "handle")
|
|
|
|
row := stmtGetXonker.QueryRow(xid, "handle")
|
|
|
|
var handle string
|
|
|
|
var handle string
|
|
|
|
err := row.Scan(&handle)
|
|
|
|
err := row.Scan(&handle)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
info, _ := investigate(xid)
|
|
|
|
info, err := investigate(xid)
|
|
|
|
if info == nil {
|
|
|
|
if err != nil {
|
|
|
|
m := re_unurl.FindStringSubmatch(xid)
|
|
|
|
m := re_unurl.FindStringSubmatch(xid)
|
|
|
|
if len(m) > 2 {
|
|
|
|
if len(m) > 2 {
|
|
|
|
handle = m[2]
|
|
|
|
handle = m[2]
|
|
|
@ -525,21 +502,26 @@ func findhandle(xid string) string {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
handle = info.Name
|
|
|
|
handle = info.Name
|
|
|
|
}
|
|
|
|
|
|
|
|
_, err = stmtSaveXonker.Exec(xid, handle, "handle")
|
|
|
|
_, err = stmtSaveXonker.Exec(xid, handle, "handle")
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
log.Printf("error saving handle: %s", err)
|
|
|
|
log.Printf("error saving handle: %s", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return handle
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return handle, true
|
|
|
|
|
|
|
|
}})
|
|
|
|
var handleprelock sync.Mutex
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func prehandle(xid string) {
|
|
|
|
// handle, handle@host
|
|
|
|
handleprelock.Lock()
|
|
|
|
func handles(xid string) (string, string) {
|
|
|
|
defer handleprelock.Unlock()
|
|
|
|
if xid == "" {
|
|
|
|
handles(xid)
|
|
|
|
return "", ""
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
var handle string
|
|
|
|
|
|
|
|
allhandles.Get(xid, &handle)
|
|
|
|
|
|
|
|
if handle == xid {
|
|
|
|
|
|
|
|
return xid, xid
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return handle, handle + "@" + originate(xid)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func prepend(s string, x []string) []string {
|
|
|
|
func prepend(s string, x []string) []string {
|
|
|
|