Exemple #1
0
 def _MakeRequestSyncOrAsync(self, request, typ, sync):
   subject = request.subject[0]
   server = self.GetServer(subject)
   cmd = rdf_data_server.DataStoreCommand(command=typ, request=request)
   if sync:
     return server.SyncAndMakeRequest(cmd)
   else:
     return server.MakeRequestAndContinue(cmd, subject)
Exemple #2
0
    def HandleClient(self, sock, permissions):
        """Handles new client requests readable from 'read'."""
        # Use a long timeout here.
        sock.settimeout(self.CLIENT_TIMEOUT_TIME)
        cmdlen_str = self._ReadExactlyFailAfterFirst(sock,
                                                     sutils.SIZE_PACKER.size)
        if not cmdlen_str:
            return ""
        cmdlen = sutils.SIZE_PACKER.unpack(cmdlen_str)[0]
        # Full request must be here.
        sock.settimeout(self.READ_TIMEOUT)
        try:
            cmd_str = self._ReadExactly(sock, cmdlen)
        except (socket.timeout, socket.error):
            return ""
        cmd = rdf_data_server.DataStoreCommand(cmd_str)

        request = cmd.request
        op = cmd.command

        cmdinfo = self.CMDTABLE.get(op)
        if not cmdinfo:
            logging.error("Unrecognized command %d", op)
            return ""
        method, perm = cmdinfo
        if perm in permissions:
            response = method(request)
        else:
            status_desc = ("Operation not allowed: required %s but only have "
                           "%s permissions" % (perm, permissions))
            resp = rdf_data_store.DataStoreResponse(
                request=cmd.request,
                status_desc=status_desc,
                status=rdf_data_store.DataStoreResponse.Status.
                AUTHORIZATION_DENIED)
            response = resp.SerializeToString()

        return sutils.SIZE_PACKER.pack(len(response)) + response
Exemple #3
0
 def _MakeRequestsForPrefix(self, prefix, typ, request):
   cmd = rdf_data_server.DataStoreCommand(command=typ, request=request)
   for server in self.GetServersForPrefix(prefix):
     yield server.SyncAndMakeRequest(cmd)