2016-01-02 05:44:52 +03:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"net"
|
|
|
|
|
|
|
|
"li.lan/labs/plasma/lnwire"
|
|
|
|
)
|
|
|
|
|
|
|
|
// it listens for incoming messages on the lndc and hands it over
|
|
|
|
// to the OmniHandler via omnichan
|
|
|
|
func LNDCReceiver(l net.Conn, id [16]byte, r *rpcServer) error {
|
|
|
|
for {
|
|
|
|
msg := make([]byte, 65535)
|
|
|
|
// fmt.Printf("read message from %x\n", l.RemoteLNId)
|
|
|
|
n, err := l.Read(msg)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Printf("read error with %x: %s\n",
|
|
|
|
id, err.Error())
|
|
|
|
delete(r.CnMap, id)
|
|
|
|
return l.Close()
|
|
|
|
}
|
|
|
|
msg = msg[:n]
|
|
|
|
msg = append(id[:], msg...)
|
|
|
|
r.OmniChan <- msg
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// handles stuff that comes in over the wire. Not user-initiated.
|
|
|
|
func OmniHandler(r *rpcServer) {
|
|
|
|
// var err error
|
|
|
|
var from [16]byte
|
|
|
|
for {
|
|
|
|
newdata := <-r.OmniChan // blocks here
|
|
|
|
if len(newdata) < 17 {
|
|
|
|
fmt.Printf("got too short message")
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
copy(from[:], newdata[:16])
|
|
|
|
msg := newdata[16:]
|
|
|
|
msgid := msg[0]
|
|
|
|
_, ok := r.CnMap[from]
|
|
|
|
if !ok {
|
|
|
|
fmt.Printf("not connected to %x\n", from)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
// TEXT MESSAGE. SIMPLE
|
|
|
|
if msgid == lnwire.MSGID_TEXTCHAT { //it's text
|
|
|
|
fmt.Printf("msg from %x: %s\n", from, msg[1:])
|
|
|
|
continue
|
|
|
|
}
|
2016-01-02 07:27:40 +03:00
|
|
|
// Based on MSGID, hand it off to functions
|
2016-01-02 05:44:52 +03:00
|
|
|
fmt.Printf("Unknown message id byte %x", msgid)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|