Skip to content

Commit cc0f647

Browse files
authored
Merge pull request #3064 from DataDog/tvaleev/feature/RUM-13441
RUM-13441: Moving HttpSpec, RequestInfo/ResponseInfo into `internal` module
2 parents 9b80008 + e536a5a commit cc0f647

File tree

4 files changed

+159
-0
lines changed

4 files changed

+159
-0
lines changed

dd-sdk-android-internal/api/apiSurface

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,29 @@ enum com.datadog.android.internal.network.GraphQLHeaders
3030
- DD_GRAPHQL_VARIABLES_HEADER
3131
- DD_GRAPHQL_TYPE_HEADER
3232
- DD_GRAPHQL_PAYLOAD_HEADER
33+
object com.datadog.android.internal.network.HttpSpec
34+
object Method
35+
const val GET: String
36+
const val POST: String
37+
const val PATCH: String
38+
const val PUT: String
39+
const val HEAD: String
40+
const val DELETE: String
41+
const val TRACE: String
42+
const val OPTIONS: String
43+
const val CONNECT: String
44+
fun values()
45+
object Headers
46+
const val CONTENT_TYPE: String
47+
const val CONTENT_LENGTH: String
48+
const val WEBSOCKET_ACCEPT_HEADER: String
49+
object ContentType
50+
const val TEXT_PLAIN: String
51+
const val TEXT_EVENT_STREAM: String
52+
const val APPLICATION_GRPC: String
53+
const val APPLICATION_GRPC_PROTO: String
54+
const val APPLICATION_GRPC_JSON: String
55+
fun isStream(String?): Boolean
3356
interface com.datadog.android.internal.profiler.BenchmarkCounter
3457
fun add(Long, Map<String, String>)
3558
interface com.datadog.android.internal.profiler.BenchmarkMeter

dd-sdk-android-internal/api/dd-sdk-android-internal.api

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,41 @@ public final class com/datadog/android/internal/network/GraphQLHeaders : java/la
7777
public static fun values ()[Lcom/datadog/android/internal/network/GraphQLHeaders;
7878
}
7979

80+
public final class com/datadog/android/internal/network/HttpSpec {
81+
public static final field INSTANCE Lcom/datadog/android/internal/network/HttpSpec;
82+
}
83+
84+
public final class com/datadog/android/internal/network/HttpSpec$ContentType {
85+
public static final field APPLICATION_GRPC Ljava/lang/String;
86+
public static final field APPLICATION_GRPC_JSON Ljava/lang/String;
87+
public static final field APPLICATION_GRPC_PROTO Ljava/lang/String;
88+
public static final field INSTANCE Lcom/datadog/android/internal/network/HttpSpec$ContentType;
89+
public static final field TEXT_EVENT_STREAM Ljava/lang/String;
90+
public static final field TEXT_PLAIN Ljava/lang/String;
91+
public final fun isStream (Ljava/lang/String;)Z
92+
}
93+
94+
public final class com/datadog/android/internal/network/HttpSpec$Headers {
95+
public static final field CONTENT_LENGTH Ljava/lang/String;
96+
public static final field CONTENT_TYPE Ljava/lang/String;
97+
public static final field INSTANCE Lcom/datadog/android/internal/network/HttpSpec$Headers;
98+
public static final field WEBSOCKET_ACCEPT_HEADER Ljava/lang/String;
99+
}
100+
101+
public final class com/datadog/android/internal/network/HttpSpec$Method {
102+
public static final field CONNECT Ljava/lang/String;
103+
public static final field DELETE Ljava/lang/String;
104+
public static final field GET Ljava/lang/String;
105+
public static final field HEAD Ljava/lang/String;
106+
public static final field INSTANCE Lcom/datadog/android/internal/network/HttpSpec$Method;
107+
public static final field OPTIONS Ljava/lang/String;
108+
public static final field PATCH Ljava/lang/String;
109+
public static final field POST Ljava/lang/String;
110+
public static final field PUT Ljava/lang/String;
111+
public static final field TRACE Ljava/lang/String;
112+
public final fun values ()Ljava/util/List;
113+
}
114+
80115
public abstract interface class com/datadog/android/internal/profiler/BenchmarkCounter {
81116
public abstract fun add (JLjava/util/Map;)V
82117
}

dd-sdk-android-internal/src/main/java/com/datadog/android/internal/network/GraphQLHeaders.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package com.datadog.android.internal.network
1010
* Headers used internally for intercepting GraphQL requests.
1111
* @param headerValue name of the header.
1212
*/
13+
// TODO RUM-13454 - move these headers to [HttpSpec]
1314
enum class GraphQLHeaders(val headerValue: String) {
1415
DD_GRAPHQL_NAME_HEADER("_dd-custom-header-graph-ql-operation-name"),
1516
DD_GRAPHQL_VARIABLES_HEADER("_dd-custom-header-graph-ql-variables"),
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2016-Present Datadog, Inc.
5+
*/
6+
package com.datadog.android.internal.network
7+
8+
/**
9+
* HTTP specification constants and utilities.
10+
*/
11+
object HttpSpec {
12+
13+
/**
14+
* Standard HTTP request methods.
15+
*/
16+
object Method {
17+
/** HTTP GET method. */
18+
const val GET: String = "GET"
19+
20+
/** HTTP POST method. */
21+
const val POST: String = "POST"
22+
23+
/** HTTP PATCH method. */
24+
const val PATCH: String = "PATCH"
25+
26+
/** HTTP PUT method. */
27+
const val PUT: String = "PUT"
28+
29+
/** HTTP HEAD method. */
30+
const val HEAD: String = "HEAD"
31+
32+
/** HTTP DELETE method. */
33+
const val DELETE: String = "DELETE"
34+
35+
/** HTTP TRACE method. */
36+
const val TRACE: String = "TRACE"
37+
38+
/** HTTP OPTIONS method. */
39+
const val OPTIONS: String = "OPTIONS"
40+
41+
/** HTTP CONNECT method. */
42+
const val CONNECT: String = "CONNECT"
43+
44+
/**
45+
* Returns a list of all HTTP methods.
46+
*/
47+
fun values() = listOf(GET, POST, PATCH, PUT, HEAD, DELETE, TRACE, OPTIONS, CONNECT)
48+
}
49+
50+
/**
51+
* Standard HTTP header names.
52+
*/
53+
object Headers {
54+
/** Content-Type header name. */
55+
const val CONTENT_TYPE: String = "Content-Type"
56+
57+
/** Content-Length header name. */
58+
const val CONTENT_LENGTH: String = "Content-Length"
59+
60+
/** Sec-WebSocket-Accept header name. */
61+
const val WEBSOCKET_ACCEPT_HEADER: String = "Sec-WebSocket-Accept"
62+
}
63+
64+
/**
65+
* HTTP content type values and utilities.
66+
*/
67+
object ContentType {
68+
69+
/** Plain text content type. */
70+
const val TEXT_PLAIN: String = "text/plain"
71+
72+
/** Server-Sent Events content type. */
73+
const val TEXT_EVENT_STREAM: String = "text/event-stream"
74+
75+
/** gRPC content type. */
76+
const val APPLICATION_GRPC: String = "application/grpc"
77+
78+
/** gRPC with Protocol Buffers content type. */
79+
const val APPLICATION_GRPC_PROTO: String = "application/grpc+proto"
80+
81+
/** gRPC with JSON content type. */
82+
const val APPLICATION_GRPC_JSON: String = "application/grpc+json"
83+
84+
/**
85+
* Checks if the given content type represents a streaming protocol.
86+
* @param contentType the content type to check
87+
* @return true if the content type is a stream type, false otherwise
88+
*/
89+
fun isStream(contentType: String?): Boolean {
90+
return contentType != null && contentType in STREAM_CONTENT_TYPES
91+
}
92+
93+
private val STREAM_CONTENT_TYPES = setOf(
94+
TEXT_EVENT_STREAM,
95+
APPLICATION_GRPC,
96+
APPLICATION_GRPC_PROTO,
97+
APPLICATION_GRPC_JSON
98+
)
99+
}
100+
}

0 commit comments

Comments
 (0)