Create response at beginning and populate it with corresponding bytes

This commit is contained in:
Menghan Li
2016-06-07 11:40:21 -07:00
parent d578ccfa12
commit 54fd6c1ea3

View File

@ -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
} }