Create response at beginning and populate it with corresponding bytes
This commit is contained in:
@ -294,44 +294,61 @@ func (s *serverReflectionServer) ServerReflectionInfo(stream rpb.ServerReflectio
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var response *rpb.FileDescriptorResponse
|
out := &rpb.ServerReflectionResponse{
|
||||||
|
ValidHost: in.Host,
|
||||||
|
OriginalRequest: in,
|
||||||
|
}
|
||||||
switch req := in.MessageRequest.(type) {
|
switch req := in.MessageRequest.(type) {
|
||||||
case *rpb.ServerReflectionRequest_FileByFilename:
|
case *rpb.ServerReflectionRequest_FileByFilename:
|
||||||
b, err := s.fileDescWireFormatByFilename(req.FileByFilename)
|
b, err := s.fileDescWireFormatByFilename(req.FileByFilename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO grpc error or send message back
|
out.MessageResponse = &rpb.ServerReflectionResponse_ErrorResponse{
|
||||||
return err
|
ErrorResponse: &rpb.ErrorResponse{
|
||||||
|
ErrorCode: int32(codes.NotFound),
|
||||||
|
ErrorMessage: err.Error(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.MessageResponse = &rpb.ServerReflectionResponse_FileDescriptorResponse{
|
||||||
|
FileDescriptorResponse: &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
response = &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}}
|
|
||||||
case *rpb.ServerReflectionRequest_FileContainingSymbol:
|
case *rpb.ServerReflectionRequest_FileContainingSymbol:
|
||||||
b, err := s.fileDescWireFormatContainingSymbol(req.FileContainingSymbol)
|
b, err := s.fileDescWireFormatContainingSymbol(req.FileContainingSymbol)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO grpc error or send message back
|
out.MessageResponse = &rpb.ServerReflectionResponse_ErrorResponse{
|
||||||
return err
|
ErrorResponse: &rpb.ErrorResponse{
|
||||||
|
ErrorCode: int32(codes.NotFound),
|
||||||
|
ErrorMessage: err.Error(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.MessageResponse = &rpb.ServerReflectionResponse_FileDescriptorResponse{
|
||||||
|
FileDescriptorResponse: &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
response = &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}}
|
|
||||||
case *rpb.ServerReflectionRequest_FileContainingExtension:
|
case *rpb.ServerReflectionRequest_FileContainingExtension:
|
||||||
typeName := req.FileContainingExtension.ContainingType
|
typeName := req.FileContainingExtension.ContainingType
|
||||||
extNum := req.FileContainingExtension.ExtensionNumber
|
extNum := req.FileContainingExtension.ExtensionNumber
|
||||||
b, err := s.fileDescWireFormatContainingExtension(typeName, extNum)
|
b, err := s.fileDescWireFormatContainingExtension(typeName, extNum)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO grpc error or send message back
|
out.MessageResponse = &rpb.ServerReflectionResponse_ErrorResponse{
|
||||||
return err
|
ErrorResponse: &rpb.ErrorResponse{
|
||||||
|
ErrorCode: int32(codes.NotFound),
|
||||||
|
ErrorMessage: err.Error(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.MessageResponse = &rpb.ServerReflectionResponse_FileDescriptorResponse{
|
||||||
|
FileDescriptorResponse: &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
response = &rpb.FileDescriptorResponse{FileDescriptorProto: [][]byte{b}}
|
|
||||||
case *rpb.ServerReflectionRequest_AllExtensionNumbersOfType:
|
case *rpb.ServerReflectionRequest_AllExtensionNumbersOfType:
|
||||||
case *rpb.ServerReflectionRequest_ListServices:
|
case *rpb.ServerReflectionRequest_ListServices:
|
||||||
default:
|
default:
|
||||||
return grpc.Errorf(codes.InvalidArgument, "invalid MessageRequest: %v", in.MessageRequest)
|
return grpc.Errorf(codes.InvalidArgument, "invalid MessageRequest: %v", in.MessageRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
out := &rpb.ServerReflectionResponse{
|
|
||||||
ValidHost: in.Host,
|
|
||||||
OriginalRequest: in,
|
|
||||||
MessageResponse: &rpb.ServerReflectionResponse_FileDescriptorResponse{
|
|
||||||
FileDescriptorResponse: response,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
if err := stream.Send(out); err != nil {
|
if err := stream.Send(out); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user