diff --git a/pkg/packet/packet.go b/pkg/packet/packet.go index 5fef24a7..2def2c90 100644 --- a/pkg/packet/packet.go +++ b/pkg/packet/packet.go @@ -26,6 +26,8 @@ import ( // >cd, >getcmd, >untailcmd, >input, error, <>message, <>ping, 0 && parts[len(parts)-1] == "" { + parts = parts[0 : len(parts)-1] + } + m.Sender.SendResponse(reqId, map[string]interface{}{"comps": parts}) + return +} + +func (m *MServer) ProcessRpcPacket(pk packet.RpcPacketType) { + reqId := pk.GetReqId() + if cdPk, ok := pk.(*packet.CdPacketType); ok { + err := os.Chdir(cdPk.Dir) + if err != nil { + m.Sender.SendErrorResponse(reqId, fmt.Errorf("cannot change directory: %w", err)) + return + } + m.Sender.SendResponse(reqId, true) + return + } + if compPk, ok := pk.(*packet.CompGenPacketType); ok { + go m.runCompGen(compPk) + return + } + m.Sender.SendErrorResponse(reqId, fmt.Errorf("invalid rpc type '%s'", pk.GetType())) + return +} + func (m *MServer) runCommand(runPacket *packet.RunPacketType) { if err := runPacket.CK.Validate("packet"); err != nil { m.Sender.SendErrorResponse(runPacket.ReqId, fmt.Errorf("server run packets require valid ck: %s", err)) @@ -117,6 +161,10 @@ func RunServer() (int, error) { server.ProcessCommandPacket(cmdPk) continue } + if rpcPk, ok := pk.(packet.RpcPacketType); ok { + server.ProcessRpcPacket(rpcPk) + continue + } server.Sender.SendMessage(fmt.Sprintf("invalid packet '%s' sent to mshell server", packet.AsString(pk))) continue }