private UserAgentInterceptor(UserAgent userAgent) { this.userAgent = UserAgents.format(userAgent); }
/** * Deprecated variant of {@link #create(ClientConfiguration, UserAgent, Class)}. * * @deprecated Use {@link #create(ClientConfiguration, UserAgent, Class)} */ @Deprecated public static OkHttpClient create(ClientConfiguration config, String userAgent, Class<?> serviceClass) { return create(config, UserAgents.tryParse(userAgent), serviceClass); }
/** * Like {@link #parse}, but never fails and returns the primary agent {@code unknown/0.0.0} if no valid primary * agent can be parsed. */ public static UserAgent tryParse(String userAgent) { return parseInternal(Strings.nullToEmpty(userAgent), true /* lenient */); }
@Value.Check default void check() { checkArgument(UserAgents.isValidName(name()), "Illegal agent name format: %s", name()); // Should never hit the following. checkArgument(UserAgents.isValidVersion(version()), "Illegal version format: %s. This is a bug", version()); }
/** Returns the canonical string format for the given {@link UserAgent}. */ public static String format(UserAgent userAgent) { Map<String, String> primaryComments = userAgent.nodeId().isPresent() ? ImmutableMap.of("nodeId", userAgent.nodeId().get()) : ImmutableMap.of(); return SPACE_JOINER.join(Iterables.concat( ImmutableList.of(formatSingleAgent(userAgent.primary(), primaryComments)), Lists.transform(userAgent.informational(), a -> formatSingleAgent(a, ImmutableMap.of())))); }
@Value.Check default void check() { if (nodeId().isPresent()) { checkArgument(UserAgents.isValidNodeId(nodeId().get()), "Illegal node id format: %s", nodeId().get()); } }
Map<String, String> parsedComments = parseComments(c); if (parsedComments.containsKey("nodeId")) { builder.nodeId(parsedComments.get("nodeId"));
static Agent of(String name, String version) { return ImmutableAgent.builder() .name(name) .version(UserAgents.isValidVersion(version) ? version : DEFAULT_VERSION) .build(); } }
/** * @deprecated Use {@link #build(Class, UserAgent)}. */ @Deprecated public final <T> T build(Class<T> serviceClass, String userAgent) { return build(serviceClass, UserAgents.tryParse(userAgent)); }
/** * Similar to {@link #create(Class, UserAgent, ClientConfiguration)}, but creates a mutable client that updates its * configuration transparently whenever the given {@link Refreshable refreshable} {@link ClientConfiguration} * changes. */ public static <T> T create(Class<T> serviceClass, UserAgent userAgent, Refreshable<ClientConfiguration> config) { // TODO(rfink): Add http-remoting agent as informational return create(serviceClass, UserAgents.format(userAgent), config); }
/** * Parses the given string into a {@link UserAgent} or throws an {@link IllegalArgumentException} if no correctly * formatted primary user agent can be found. Incorrectly formatted informational agents are omitted. * <p> * Valid user agent strings loosely follow RFC 7230 (https://tools.ietf.org/html/rfc7230#section-3.2.6). */ public static UserAgent parse(String userAgent) { Preconditions.checkNotNull(userAgent, "userAgent must not be null"); return parseInternal(userAgent, false /* strict */); }