diff --git a/pkg/packet/packet.go b/pkg/packet/packet.go index 074b7175..17a5638e 100644 --- a/pkg/packet/packet.go +++ b/pkg/packet/packet.go @@ -477,10 +477,18 @@ type ErrorPacketType struct { Error string `json:"error"` } -func (et *ErrorPacketType) GetType() string { +func (*ErrorPacketType) GetType() string { return ErrorPacketStr } +func (p *ErrorPacketType) String() string { + ckStr := "" + if p.CK != "" { + ckStr = fmt.Sprintf(", ck=%s", p.CK) + } + return fmt.Sprintf("error[%s%s]", p.Error, ckStr) +} + func MakeErrorPacket(errorStr string) *ErrorPacketType { return &ErrorPacketType{Type: ErrorPacketStr, Error: errorStr} } diff --git a/pkg/server/server.go b/pkg/server/server.go index b7996b05..cc0c84f3 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -147,20 +147,24 @@ func RunServer() (int, error) { initPacket := packet.MakeInitPacket() initPacket.Version = base.MShellVersion server.Sender.SendPacket(initPacket) + builder := packet.MakeRunPacketBuilder() for pk := range server.MainInput.MainCh { if server.Debug { fmt.Printf("PK> %s\n", packet.AsString(pk)) } - if pk.GetType() == packet.RunPacketStr { - runPacket := pk.(*packet.RunPacketType) - server.runCommand(runPacket) + ok, runPacket := builder.ProcessPacket(pk) + if ok { + if runPacket != nil { + server.runCommand(runPacket) + continue + } continue } if cmdPk, ok := pk.(packet.CommandPacketType); ok { server.ProcessCommandPacket(cmdPk) continue } - server.Sender.SendErrorPacket(fmt.Sprintf("invalid packet '%s' sent to mshell", packet.AsExtType(pk))) + server.Sender.SendErrorPacket(fmt.Sprintf("invalid packet '%s' sent to mshell", packet.AsString(pk))) continue } return 0, nil