Skip to content

Commit 8178fcf

Browse files
authored
Add support for setting an extension to the User Agent http header. (#25)
Add support for setting an extension to the User Agent http header.
1 parent 5c8d83b commit 8178fcf

File tree

4 files changed

+59
-11
lines changed

4 files changed

+59
-11
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ query in an iterable/iterator format. The returned QueryIterableResult should
1010
be used in a try-with-resources statement to ensure proper closing of
1111
resources.
1212
- updated NoSQLHandle and QueryRequest interfaces to extend AutoClosable
13+
- added support for setting an extension to the User Agent http header by
14+
setting the ExtensionUserAgent property on NoSQLHandlerConfig.
1315

1416
### Changed
1517
- Cloud only: Updated OCI regions: CDG, MAD, QRO

driver/src/main/java/oracle/nosql/driver/NoSQLHandleConfig.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,10 @@ public class NoSQLHandleConfig implements Cloneable {
237237
* Hidden flag to control automatic auth refresh in cloud service
238238
*/
239239
private boolean authRefresh;
240+
/**
241+
* Additional extension to user agent http header.
242+
*/
243+
private String extensionUserAgent;
240244

241245
/**
242246
* Specifies an endpoint or region id to use to connect to the Oracle
@@ -1579,4 +1583,33 @@ private void setConfigFromEnvironment() {
15791583
statsEnableLog = Boolean.FALSE;
15801584
}
15811585
}
1586+
1587+
/**
1588+
* Returns the set extension to the user agent http header or null if
1589+
* unset.
1590+
*
1591+
* @return the extension to the user agent http header
1592+
*
1593+
* @since 5.3.3
1594+
*/
1595+
public String getExtensionUserAgent() {
1596+
return extensionUserAgent;
1597+
}
1598+
1599+
/**
1600+
* Sets an extension to the user agent http header. Extension can be
1601+
* up to 64 bytes in length.
1602+
*
1603+
* @param extensionUserAgent the new extension
1604+
*
1605+
* @since 5.3.3
1606+
*/
1607+
public void setExtensionUserAgent(String extensionUserAgent) {
1608+
if (extensionUserAgent != null && extensionUserAgent.length() > 64) {
1609+
throw new IllegalArgumentException("Extension to the user agent " +
1610+
"http header too long, it can be up to 64 bytes. Length: " +
1611+
extensionUserAgent.length());
1612+
}
1613+
this.extensionUserAgent = extensionUserAgent;
1614+
}
15821615
}

driver/src/main/java/oracle/nosql/driver/Version.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public byte[] getBytes() {
3939
/**
4040
* @hidden
4141
* @param version the version to use
42-
* @return a new Version intance
42+
* @return a new Version instance
4343
*/
4444
public static Version createVersion(byte[] version) {
4545
if (version == null) {

driver/src/main/java/oracle/nosql/driver/http/Client.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@
1515
import static oracle.nosql.driver.util.BinaryProtocol.V2;
1616
import static oracle.nosql.driver.util.BinaryProtocol.V3;
1717
import static oracle.nosql.driver.util.CheckNull.requireNonNull;
18-
import static oracle.nosql.driver.util.LogUtil.isLoggable;
19-
import static oracle.nosql.driver.util.LogUtil.logFine;
20-
import static oracle.nosql.driver.util.LogUtil.logInfo;
21-
import static oracle.nosql.driver.util.LogUtil.logTrace;
22-
import static oracle.nosql.driver.util.LogUtil.logWarning;
2318
import static oracle.nosql.driver.util.HttpConstants.ACCEPT;
2419
import static oracle.nosql.driver.util.HttpConstants.CONNECTION;
2520
import static oracle.nosql.driver.util.HttpConstants.CONTENT_LENGTH;
@@ -28,11 +23,16 @@
2823
import static oracle.nosql.driver.util.HttpConstants.NOSQL_DATA_PATH;
2924
import static oracle.nosql.driver.util.HttpConstants.REQUEST_ID_HEADER;
3025
import static oracle.nosql.driver.util.HttpConstants.USER_AGENT;
26+
import static oracle.nosql.driver.util.LogUtil.isLoggable;
27+
import static oracle.nosql.driver.util.LogUtil.logFine;
28+
import static oracle.nosql.driver.util.LogUtil.logInfo;
29+
import static oracle.nosql.driver.util.LogUtil.logTrace;
30+
import static oracle.nosql.driver.util.LogUtil.logWarning;
3131

3232
import java.io.IOException;
3333
import java.net.URL;
34-
import java.util.Iterator;
3534
import java.util.HashSet;
35+
import java.util.Iterator;
3636
import java.util.Map;
3737
import java.util.concurrent.ConcurrentHashMap;
3838
import java.util.concurrent.ConcurrentLinkedQueue;
@@ -61,8 +61,8 @@
6161
import oracle.nosql.driver.SecurityInfoNotReadyException;
6262
import oracle.nosql.driver.StatsControl;
6363
import oracle.nosql.driver.TableNotFoundException;
64-
import oracle.nosql.driver.WriteThrottlingException;
6564
import oracle.nosql.driver.UnsupportedProtocolException;
65+
import oracle.nosql.driver.WriteThrottlingException;
6666
import oracle.nosql.driver.httpclient.HttpClient;
6767
import oracle.nosql.driver.httpclient.ResponseHandler;
6868
import oracle.nosql.driver.kv.AuthenticationException;
@@ -85,13 +85,13 @@
8585
import oracle.nosql.driver.ops.serde.BinarySerializerFactory;
8686
import oracle.nosql.driver.ops.serde.SerializerFactory;
8787
import oracle.nosql.driver.query.QueryDriver;
88-
import oracle.nosql.driver.values.MapValue;
8988
import oracle.nosql.driver.util.ByteInputStream;
9089
import oracle.nosql.driver.util.HttpConstants;
9190
import oracle.nosql.driver.util.NettyByteInputStream;
9291
import oracle.nosql.driver.util.NettyByteOutputStream;
9392
import oracle.nosql.driver.util.RateLimiterMap;
9493
import oracle.nosql.driver.util.SerializationUtil;
94+
import oracle.nosql.driver.values.MapValue;
9595

9696
import io.netty.buffer.ByteBuf;
9797
import io.netty.channel.Channel;
@@ -197,6 +197,9 @@ public class Client {
197197
/* note this must end with '=' */
198198
private final String SESSION_COOKIE_FIELD = "session=";
199199

200+
/* for keeping track of SDKs usage */
201+
private String userAgent;
202+
200203
public Client(Logger logger,
201204
NoSQLHandleConfig httpConfig) {
202205

@@ -271,6 +274,16 @@ public Client(Logger logger,
271274
oneTimeMessages = new HashSet<String>();
272275
statsControl = new StatsControlImpl(config,
273276
logger, httpClient, httpConfig.getRateLimitingEnabled());
277+
278+
String extensionUserAgent = httpConfig.getExtensionUserAgent();
279+
if (extensionUserAgent != null) {
280+
userAgent = new StringBuilder(HttpConstants.userAgent)
281+
.append(" ")
282+
.append(extensionUserAgent)
283+
.toString();
284+
} else {
285+
this.userAgent = HttpConstants.userAgent;
286+
}
274287
}
275288

276289
/**
@@ -1297,8 +1310,8 @@ private void addCommonHeaders(HttpHeaders headers) {
12971310
.set(USER_AGENT, getUserAgent());
12981311
}
12991312

1300-
private static String getUserAgent() {
1301-
return HttpConstants.userAgent;
1313+
private String getUserAgent() {
1314+
return userAgent;
13021315
}
13031316

13041317
public static void trace(String msg, int level) {

0 commit comments

Comments
 (0)