Check this route for matching the given request. If this route is matched, then target route is
		returned.

		:param request: request to match
		:param service: source service
		:return: WWebTargetRoute or None

def match(self, request, service):
		""" Check this route for matching the given request. If this route is matched, then target route is
		returned.

		:param request: request to match
		:param service: source service
		:return: WWebTargetRoute or None
		"""
		uri = self.normalize_uri(request.path())

		if request.session().protocol() not in self.protocols:
			return

		if request.method() not in self.methods:
			return

		if self.virtual_hosts and request.virtual_host() not in self.virtual_hosts:
			return

		if self.ports and int(request.session().server_address().port()) not in self.ports:
			return

		match_obj = self.re_pattern.match(uri)

		if not match_obj:
			return

		presenter_action = self.action
		presenter_args = self.presenter_args.copy()

		for i in range(len(self.route_args)):
			if self.route_args[i] == 'action':
				presenter_action = match_obj.group(i + 1)
			else:
				presenter_args[self.route_args[i]] = match_obj.group(i + 1)

		return WWebTargetRoute(self.presenter, presenter_action, self, service.route_map(), **presenter_args)