|
1 | 1 | package com.bugsnag.android.okhttp |
2 | 2 |
|
| 3 | +import android.net.Uri |
3 | 4 | import android.os.SystemClock |
4 | 5 | import android.util.Base64 |
5 | 6 | import com.bugsnag.android.BreadcrumbType |
6 | 7 | import com.bugsnag.android.Client |
7 | 8 | import com.bugsnag.android.ErrorCaptureOptions |
8 | 9 | import com.bugsnag.android.ErrorOptions |
9 | 10 | import com.bugsnag.android.Logger |
| 11 | +import com.bugsnag.android.OnErrorCallback |
10 | 12 | import com.bugsnag.android.http.HttpInstrumentedRequest |
11 | 13 | import com.bugsnag.android.http.HttpInstrumentedResponse |
12 | 14 | import com.bugsnag.android.http.HttpRequestCallback |
@@ -128,15 +130,29 @@ internal class BugsnagOkHttpInterceptor( |
128 | 130 | val okHttpRequest = resp.request |
129 | 131 | val okHttpResponse = resp.response |
130 | 132 |
|
131 | | - val domain = okHttpRequest.url.host |
132 | | - |
133 | 133 | event.errors.clear() |
134 | | - event.addError("HTTPError", "${okHttpResponse?.code}: ${okHttpRequest.url}") |
135 | | - event.context = "${okHttpRequest.method} $domain" |
| 134 | + event.addError("HTTPError", "${okHttpResponse?.code}: ${req.reportedUrl}") |
| 135 | + event.context = "${okHttpRequest.method} ${extractDomain(req)}" |
136 | 136 | event.setHttpInfo(req, resp) |
137 | | - true |
| 137 | + |
| 138 | + return@notify resp.errorCallback?.onError(event) != false |
| 139 | + } |
| 140 | + } |
| 141 | + } |
| 142 | + |
| 143 | + private fun extractDomain(req: OkHttpInstrumentedRequest): String { |
| 144 | + val reportedUrl = req.reportedUrl |
| 145 | + if (reportedUrl != null) { |
| 146 | + try { |
| 147 | + val host = Uri.parse(reportedUrl).host |
| 148 | + if (host != null) { |
| 149 | + return host |
| 150 | + } |
| 151 | + } catch (_: Exception) { |
138 | 152 | } |
139 | 153 | } |
| 154 | + |
| 155 | + return req.request.url.host |
140 | 156 | } |
141 | 157 |
|
142 | 158 | private fun collateMetadata( |
@@ -265,6 +281,8 @@ private class OkHttpInstrumentedResponse( |
265 | 281 |
|
266 | 282 | private var isErrorReported = response != null && errorCodes[response.code] |
267 | 283 |
|
| 284 | + private var errorCallback: OnErrorCallback? = null |
| 285 | + |
268 | 286 | override fun getRequest(): Request = request |
269 | 287 | override fun getResponse(): Response? = response |
270 | 288 |
|
@@ -299,6 +317,14 @@ private class OkHttpInstrumentedResponse( |
299 | 317 | isResponseBodySet = true |
300 | 318 | } |
301 | 319 |
|
| 320 | + override fun setErrorCallback(onErrorCallback: OnErrorCallback?) { |
| 321 | + this.errorCallback = onErrorCallback |
| 322 | + } |
| 323 | + |
| 324 | + override fun getErrorCallback(): OnErrorCallback? { |
| 325 | + return errorCallback |
| 326 | + } |
| 327 | + |
302 | 328 | private fun extractResponseBody(): String? { |
303 | 329 | if (maxResponseBodyCapture <= 0) { |
304 | 330 | return null |
|
0 commit comments