reverse complete
This commit is contained in:
parent
9f6a251ceb
commit
c39efa7fe7
19
reverse.go
19
reverse.go
@ -9,6 +9,14 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var startTime int64
|
||||||
|
|
||||||
|
func ts() int64 {
|
||||||
|
if startTime == 0 {
|
||||||
|
startTime = time.Now().Unix()
|
||||||
|
}
|
||||||
|
return time.Now().Unix() - startTime
|
||||||
|
}
|
||||||
const MAXPACKET = 999
|
const MAXPACKET = 999
|
||||||
|
|
||||||
func b(s string) []byte {
|
func b(s string) []byte {
|
||||||
@ -105,7 +113,7 @@ func (s *ReverseServer) Run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *ReverseServer) handleSession(ses *LrcpSession) {
|
func (s *ReverseServer) handleSession(ses *LrcpSession) {
|
||||||
r := bufio.NewReader(ses)
|
r := bufio.NewReaderSize(ses, 1024*1024)
|
||||||
for {
|
for {
|
||||||
data, err := r.ReadBytes('\n')
|
data, err := r.ReadBytes('\n')
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
@ -155,7 +163,7 @@ func NewLrcpSession(sessionId uint32, pc net.PacketConn, addr net.Addr) *LrcpSes
|
|||||||
|
|
||||||
func (s *LrcpSession) snd(buf []byte) error {
|
func (s *LrcpSession) snd(buf []byte) error {
|
||||||
var err error
|
var err error
|
||||||
fmt.Printf("> %s\n", bytes.Replace(buf, b("\n"), b("\\n"), -1))
|
fmt.Printf("> %d %s\n", ts(), bytes.Replace(buf, b("\n"), b("\\n"), -1))
|
||||||
_, err = s.pc.WriteTo(buf, s.addr)
|
_, err = s.pc.WriteTo(buf, s.addr)
|
||||||
return err
|
return err
|
||||||
|
|
||||||
@ -196,7 +204,7 @@ func (s *LrcpSession) waitAck() bool {
|
|||||||
for ! acked {
|
for ! acked {
|
||||||
select {
|
select {
|
||||||
case <- s.ackQ: acked = s.seq <= s.acked
|
case <- s.ackQ: acked = s.seq <= s.acked
|
||||||
case <-time.After(3 * time.Second): return false
|
case <-time.After(1 * time.Second): return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -346,7 +354,7 @@ func (s *LrcpServer) Accept() *LrcpSession {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *LrcpServer) handle(addr net.Addr, req []byte) {
|
func (s *LrcpServer) handle(addr net.Addr, req []byte) {
|
||||||
fmt.Printf("< %s\n", bytes.Replace(req, b("\n"), []byte("\\n"), -1))
|
fmt.Printf("< %d %s\n", ts(), bytes.Replace(req, b("\n"), []byte("\\n"), -1))
|
||||||
if ! bytes.HasPrefix(req, b("/")) || ! bytes.HasSuffix(req, b("/")) {
|
if ! bytes.HasPrefix(req, b("/")) || ! bytes.HasSuffix(req, b("/")) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -414,6 +422,9 @@ func (s *LrcpServer) hdlAck(sessionId uint32, req []byte) error {
|
|||||||
strPos, req := splitSlash(req)
|
strPos, req := splitSlash(req)
|
||||||
pos, err:= b2i(strPos)
|
pos, err:= b2i(strPos)
|
||||||
if err != nil { return err }
|
if err != nil { return err }
|
||||||
|
if pos > ses.seq {
|
||||||
|
return s.hdlClose(sessionId)
|
||||||
|
}
|
||||||
ses.acked = Max(ses.acked, pos)
|
ses.acked = Max(ses.acked, pos)
|
||||||
ses.ackQ <- pos
|
ses.ackQ <- pos
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user