예제 #1
0
파일: server_lib.py 프로젝트: swipswaps/grr
def DispatchWrapped(connection: ConnectionWrapper) -> None:
    """Dispatches a request to the proper OperationHandler."""
    state = State()
    while True:
        try:
            request, att = connection.Recv()

            if state.filesystem is None and not request.HasField(
                    'init_request'):
                raise DispatchError('The first request must be Init')

            if request.HasField('init_request'):
                handler_class = InitHandler
            elif request.HasField('open_request'):
                handler_class = OpenHandler
            elif request.HasField('read_request'):
                handler_class = ReadHandler
            elif request.HasField('close_request'):
                handler_class = CloseHandler
            elif request.HasField('stat_request'):
                handler_class = StatHandler
            elif request.HasField('list_files_request'):
                handler_class = ListFilesHandler
            elif request.HasField('lookup_case_insensitive_request'):
                handler_class = LookupCaseInsensitiveHandler
            else:
                raise DispatchError('No request set.')

            handler = handler_class(state, request, connection)
            handler.Run()
        except:  # pylint: disable=bare-except
            exception = filesystem_pb2.Exception(
                message=str(sys.exc_info()[1]),
                formatted_exception=traceback.format_exc())
            connection.Send(filesystem_pb2.Response(exception=exception), b'')
예제 #2
0
 def Read(self, offset: int, size: int) -> bytes:
   device_data_request = filesystem_pb2.DeviceDataRequest(
       offset=offset, size=size)
   self._connection.Send(
       filesystem_pb2.Response(device_data_request=device_data_request), b'')
   _, attachment = self._connection.Recv()
   return attachment
예제 #3
0
 def Recv(self) -> Tuple[filesystem_pb2.Response, bytes]:
   raw_response, attachment = self._connection.Recv()
   response = filesystem_pb2.Response()
   response.ParseFromString(raw_response)
   return response, attachment
예제 #4
0
 def PackResponse(
     self, response: filesystem_pb2.LookupCaseInsensitiveResponse
 ) -> filesystem_pb2.Response:
   return filesystem_pb2.Response(lookup_case_insensitive_response=response)
예제 #5
0
 def PackResponse(
     self, response: filesystem_pb2.CloseResponse) -> filesystem_pb2.Response:
   return filesystem_pb2.Response(close_response=response)
예제 #6
0
 def PackResponse(
     self,
     response: filesystem_pb2.ListFilesResponse) -> filesystem_pb2.Response:
   return filesystem_pb2.Response(list_files_response=response)
예제 #7
0
 def PackResponse(
     self, response: filesystem_pb2.StatResponse) -> filesystem_pb2.Response:
   return filesystem_pb2.Response(stat_response=response)
예제 #8
0
 def PackResponse(
     self, response: filesystem_pb2.ReadResponse) -> filesystem_pb2.Response:
   return filesystem_pb2.Response(read_response=response)
예제 #9
0
 def PackResponse(
     self, response: filesystem_pb2.OpenResponse) -> filesystem_pb2.Response:
   return filesystem_pb2.Response(open_response=response)
예제 #10
0
 def PackResponse(
     self, response: filesystem_pb2.InitResponse) -> filesystem_pb2.Response:
   return filesystem_pb2.Response(init_response=response)