Refactor dispatcher.go

pull/132/head
Andy Wang 4 years ago
parent c6d6f40021
commit e092e280c1

@ -191,21 +191,20 @@ func dispatchConnection(conn net.Conn, sta *State) {
// added to the userinfo database. The distinction between going into the admin mode
// and normal proxy mode is that sessionID needs == 0 for admin mode
if bytes.Equal(ci.UID, sta.AdminUID) && ci.SessionId == 0 {
sesh := mux.MakeSession(0, seshConfig)
preparedConn, err := finishHandshake(conn, sessionKey, sta.WorldState.Rand)
if err != nil {
log.Error(err)
return
}
log.Trace("finished handshake")
sesh := mux.MakeSession(0, seshConfig)
sesh.AddConnection(preparedConn)
//TODO: Router could be nil in cnc mode
log.WithField("remoteAddr", preparedConn.RemoteAddr()).Info("New admin session")
err = http.Serve(sesh, usermanager.APIRouterOf(sta.Panel.Manager))
if err != nil {
log.Error(err)
return
}
// http.Serve never returns with non-nil error
log.Error(err)
return
}
var user *ActiveUser
@ -231,30 +230,26 @@ func dispatchConnection(conn net.Conn, sta *State) {
return
}
if existing {
preparedConn, err := finishHandshake(conn, sesh.SessionKey, sta.WorldState.Rand)
if err != nil {
log.Error(err)
return
}
log.Trace("finished handshake")
sesh.AddConnection(preparedConn)
return
}
preparedConn, err := finishHandshake(conn, sessionKey, sta.WorldState.Rand)
preparedConn, err := finishHandshake(conn, sesh.SessionKey, sta.WorldState.Rand)
if err != nil {
log.Error(err)
return
}
log.Trace("finished handshake")
log.WithFields(log.Fields{
"UID": b64(ci.UID),
"sessionID": ci.SessionId,
}).Info("New session")
sesh.AddConnection(preparedConn)
if !existing {
// if the session was newly made, we serve connections from the session streams to the proxy server
log.WithFields(log.Fields{
"UID": b64(ci.UID),
"sessionID": ci.SessionId,
}).Info("New session")
serveSession(sesh, ci, user, sta)
}
}
func serveSession(sesh *mux.Session, ci ClientInfo, user *ActiveUser, sta *State) error {
for {
newStream, err := sesh.Accept()
if err != nil {
@ -265,9 +260,9 @@ func dispatchConnection(conn net.Conn, sta *State) {
"reason": sesh.TerminalMsg(),
}).Info("Session closed")
user.CloseSession(ci.SessionId, "")
return
return nil
} else {
// TODO: other errors
log.Errorf("unhandled error on session.Accept(): %v", err)
continue
}
}
@ -276,7 +271,7 @@ func dispatchConnection(conn net.Conn, sta *State) {
if err != nil {
log.Errorf("Failed to connect to %v: %v", ci.ProxyMethod, err)
user.CloseSession(ci.SessionId, "Failed to connect to proxy server")
continue
return err
}
log.Tracef("%v endpoint has been successfully connected", ci.ProxyMethod)
@ -294,5 +289,4 @@ func dispatchConnection(conn net.Conn, sta *State) {
}
}()
}
}

Loading…
Cancel
Save