예제 #1
0
파일: rpc_api.py 프로젝트: Brighty28/pgoapi
    def _parse_main_response(self, response_raw, subrequests):
        self.log.debug('Parsing main RPC response...')

        if response_raw.status_code == 403:
            raise ServerSideAccessForbiddenException("Seems your IP Address is banned or something else went badly wrong...")
        elif response_raw.status_code == 502:
            raise ServerBusyOrOfflineException("502: Bad Gateway")
        elif response_raw.status_code != 200:
            error = 'Unexpected HTTP server response - needs 200 got {}'.format(response_raw.status_code)
            self.log.warning(error)
            self.log.debug('HTTP output: \n%s', response_raw.content.decode('utf-8'))
            raise UnexpectedResponseException(error)

        if response_raw.content is None:
            self.log.warning('Empty server response!')
            return False

        response_proto = ResponseEnvelope()
        try:
            response_proto.ParseFromString(response_raw.content)
        except message.DecodeError as e:
            self.log.warning('Could not parse response: %s', e)
            return False

        self.log.debug('Protobuf structure of rpc response:\n\r%s', response_proto)
        try:
            self.log.debug('Decode raw over protoc (protoc has to be in your PATH):\n\r%s', self.decode_raw(response_raw.content).decode('utf-8'))
        except:
            self.log.debug('Error during protoc parsing - ignored.')

        response_proto_dict = protobuf_to_dict(response_proto)
        response_proto_dict = self._parse_sub_responses(response_proto, subrequests, response_proto_dict)

        return response_proto_dict
예제 #2
0
파일: rpc_api.py 프로젝트: Calcyfer/pgoapi
 def _parse_main_response(self, response_raw, subrequests):
     self.log.debug('Parsing main RPC response...')
     
     if response_raw.status_code != 200:
         self.log.warning('Unexpected HTTP server response - needs 200 got %s', response_raw.status_code)
         self.log.debug('HTTP output: \n%s', response_raw.content.decode('utf-8'))
         return False
     
     if response_raw.content is None:
         self.log.warning('Empty server response!')
         return False
 
     response_proto = ResponseEnvelope()
     try:
         response_proto.ParseFromString(response_raw.content)
     except google.protobuf.message.DecodeError as e:
         self.log.warning('Could not parse response: %s', str(e))
         return False
     
     self.log.debug('Protobuf structure of rpc response:\n\r%s', response_proto)
     try:
         self.log.debug('Decode raw over protoc (protoc has to be in your PATH):\n\r%s', self.decode_raw(response_raw.content).decode('utf-8'))
     except:
         self.log.debug('Error during protoc parsing - ignored.')
    
     response_proto_dict = protobuf_to_dict(response_proto)
     response_proto_dict = self._parse_sub_responses(response_proto, subrequests, response_proto_dict)
     
     return response_proto_dict
예제 #3
0
파일: rpc_api.py 프로젝트: Brighty28/pgoapi
    def _parse_sub_responses(self, response_proto, subrequests_list, response_proto_dict):
        self.log.debug('Parsing sub RPC responses...')
        response_proto_dict['responses'] = {}

        if response_proto_dict.get('status_code', 1) == 53:
            exception = ServerApiEndpointRedirectException()
            exception.set_redirected_endpoint(response_proto_dict['api_url'])
            raise exception

        if 'returns' in response_proto_dict:
            del response_proto_dict['returns']

        list_len = len(subrequests_list)-1
        i = 0
        for subresponse in response_proto.returns:
            if i > list_len:
                self.log.info("Error - something strange happend...")

            request_entry = subrequests_list[i]
            if isinstance(request_entry, int):
                entry_id = request_entry
            else:
                entry_id = list(request_entry.items())[0][0]

            entry_name = RequestType.Name(entry_id)
            proto_name = to_camel_case(entry_name.lower()) + 'Response'
            proto_classname = 'POGOProtos.Networking.Responses_pb2.' + proto_name

            self.log.debug("Parsing class: %s", proto_classname)

            subresponse_return = None
            try:
                subresponse_extension = self.get_class(proto_classname)()
            except Exception as e:
                subresponse_extension = None
                error = 'Protobuf definition for {} not found'.format(proto_classname)
                subresponse_return = error
                self.log.debug(error)

            if subresponse_extension:
                try:
                    subresponse_extension.ParseFromString(subresponse)
                    subresponse_return = protobuf_to_dict(subresponse_extension)
                except:
                    error = "Protobuf definition for {} seems not to match".format(proto_classname)
                    subresponse_return = error
                    self.log.debug(error)

            response_proto_dict['responses'][entry_name] = subresponse_return
            i += 1

        return response_proto_dict
예제 #4
0
파일: rpc_api.py 프로젝트: NoOne-dev/pgoapi
    def _parse_main_response(self, response_raw, subrequests):
        self.log.debug('Parsing main RPC response...')

        if response_raw.status_code == 403:
            raise ServerSideAccessForbiddenException(
                "Seems your IP Address is banned or something else went badly wrong..."
            )
        elif response_raw.status_code == 502:
            raise ServerBusyOrOfflineException("502: Bad Gateway")
        elif response_raw.status_code != 200:
            error = 'Unexpected HTTP server response - needs 200 got {}'.format(
                response_raw.status_code)
            self.log.warning(error)
            self.log.debug('HTTP output: \n%s',
                           response_raw.content.decode('utf-8'))
            raise UnexpectedResponseException(error)

        if response_raw.content is None:
            self.log.warning('Empty server response!')
            return False

        response_proto = ResponseEnvelope()
        try:
            response_proto.ParseFromString(response_raw.content)
        except message.DecodeError as e:
            self.log.warning('Could not parse response: %s', e)
            return False

        self.log.debug('Protobuf structure of rpc response:\n\r%s',
                       response_proto)
        try:
            self.log.debug(
                'Decode raw over protoc (protoc has to be in your PATH):\n\r%s',
                self.decode_raw(response_raw.content).decode('utf-8'))
        except:
            self.log.debug('Error during protoc parsing - ignored.')

        response_proto_dict = protobuf_to_dict(response_proto)
        response_proto_dict = self._parse_sub_responses(
            response_proto, subrequests, response_proto_dict)

        return response_proto_dict
예제 #5
0
파일: rpc_api.py 프로젝트: PogoDev1/pgoapi
    async def _parse_main_response(self, content, subrequests):
        self.log.debug('Parsing main RPC response...')

        response_proto = ResponseEnvelope()
        try:
            response_proto.ParseFromString(content)
        except message.DecodeError as e:
            self.log.warning('Could not parse response: %s', e)
            return False

        self.log.debug('Protobuf structure of rpc response:\n\r%s', response_proto)
        # try:
        #     decoded = await self.decode_raw(content)
        #     self.log.debug('Decode raw over protoc (protoc has to be in your PATH):\n\r%s', decoded.decode('utf-8'))
        # except:
        #     self.log.debug('Error during protoc parsing - ignored.')

        response_proto_dict = protobuf_to_dict(response_proto)
        response_proto_dict = self._parse_sub_responses(response_proto, subrequests, response_proto_dict)

        return response_proto_dict
예제 #6
0
    def _parse_main_response(self, response_raw, subrequests):
        self.log.debug('Parsing main RPC response...')

        if response_raw.status_code != 200:
            self.log.warning(
                'Unexpected HTTP server response - needs 200 got %s',
                response_raw.status_code)
            self.log.debug('HTTP output: \n%s',
                           response_raw.content.decode('utf-8'))
            return False

        if response_raw.content is None:
            self.log.warning('Empty server response!')
            return False

        response_proto = ResponseEnvelope()
        try:
            response_proto.ParseFromString(response_raw.content)
        except DecodeError as e:
            self.log.warning('Could not parse response: %s', str(e))
            return False

        self.log.debug('Protobuf structure of rpc response:\n\r%s',
                       response_proto)
        try:
            self.log.debug(
                'Decode raw over protoc (protoc has to be in your PATH):\n\r%s',
                self.decode_raw(response_raw.content).decode('utf-8'))
        except:
            self.log.debug('Error during protoc parsing - ignored.')

        response_proto_dict = protobuf_to_dict(response_proto)
        response_proto_dict = self._parse_sub_responses(
            response_proto, subrequests, response_proto_dict)

        return response_proto_dict