diff --git a/README.md b/README.md
index ac43c7e3..f00b7e23 100644
--- a/README.md
+++ b/README.md
@@ -91,6 +91,7 @@ Class | Method | HTTP request | Description
*AnalysesCommentsApi* | [**deleteAnalysisComment**](docs/AnalysesCommentsApi.md#deleteAnalysisComment) | **DELETE** /v2/analyses/{analysis_id}/comments/{comment_id} | Delete a comment
*AnalysesCommentsApi* | [**getAnalysisComments**](docs/AnalysesCommentsApi.md#getAnalysisComments) | **GET** /v2/analyses/{analysis_id}/comments | Get comments for this analysis
*AnalysesCommentsApi* | [**updateAnalysisComment**](docs/AnalysesCommentsApi.md#updateAnalysisComment) | **PATCH** /v2/analyses/{analysis_id}/comments/{comment_id} | Update a comment
+*AnalysesCoreApi* | [**addUserStringToAnalysis**](docs/AnalysesCoreApi.md#addUserStringToAnalysis) | **POST** /v3/analyses/{analysis_id}/user-provided-strings | Add a user-provided string to an analysis.
*AnalysesCoreApi* | [**createAnalysis**](docs/AnalysesCoreApi.md#createAnalysis) | **POST** /v2/analyses | Create Analysis
*AnalysesCoreApi* | [**deleteAnalysis**](docs/AnalysesCoreApi.md#deleteAnalysis) | **DELETE** /v2/analyses/{analysis_id} | Delete Analysis
*AnalysesCoreApi* | [**getAnalysisBasicInfo**](docs/AnalysesCoreApi.md#getAnalysisBasicInfo) | **GET** /v2/analyses/{analysis_id}/basic | Gets basic analysis information
@@ -100,6 +101,8 @@ Class | Method | HTTP request | Description
*AnalysesCoreApi* | [**getAnalysisParams**](docs/AnalysesCoreApi.md#getAnalysisParams) | **GET** /v2/analyses/{analysis_id}/params | Gets analysis param information
*AnalysesCoreApi* | [**getAnalysisQueuePosition**](docs/AnalysesCoreApi.md#getAnalysisQueuePosition) | **GET** /v2/analyses/{analysis_id}/queue-position | Get the queue position of an analysis
*AnalysesCoreApi* | [**getAnalysisStatus**](docs/AnalysesCoreApi.md#getAnalysisStatus) | **GET** /v2/analyses/{analysis_id}/status | Gets the status of an analysis
+*AnalysesCoreApi* | [**getAnalysisStrings**](docs/AnalysesCoreApi.md#getAnalysisStrings) | **GET** /v3/analyses/{analysis_id}/functions/strings | List strings for an analysis.
+*AnalysesCoreApi* | [**getAnalysisStringsStatus**](docs/AnalysesCoreApi.md#getAnalysisStringsStatus) | **GET** /v3/analyses/{analysis_id}/functions/strings/status | Get the string-extraction status for an analysis.
*AnalysesCoreApi* | [**insertAnalysisLog**](docs/AnalysesCoreApi.md#insertAnalysisLog) | **POST** /v2/analyses/{analysis_id}/logs | Insert a log entry for an analysis
*AnalysesCoreApi* | [**listAnalyses**](docs/AnalysesCoreApi.md#listAnalyses) | **GET** /v2/analyses/list | Gets the most recent analyses
*AnalysesCoreApi* | [**lookupBinaryId**](docs/AnalysesCoreApi.md#lookupBinaryId) | **GET** /v2/analyses/lookup/{binary_id} | Gets the analysis ID from binary ID
@@ -169,6 +172,8 @@ Class | Method | HTTP request | Description
*FunctionsAiDecompilationApi* | [**updateAiDecompilationComment**](docs/FunctionsAiDecompilationApi.md#updateAiDecompilationComment) | **PATCH** /v2/functions/{function_id}/ai-decompilation/comments/{comment_id} | Update a comment
*FunctionsAiDecompilationApi* | [**upsertAiDecompilationOverrides**](docs/FunctionsAiDecompilationApi.md#upsertAiDecompilationOverrides) | **PATCH** /v3/functions/{function_id}/ai-decompilation/overrides | Upsert variable/function name overrides
*FunctionsAiDecompilationApi* | [**upsertAiDecompilationRating**](docs/FunctionsAiDecompilationApi.md#upsertAiDecompilationRating) | **PATCH** /v2/functions/{function_id}/ai-decompilation/rating | Upsert rating for AI decompilation
+*FunctionsCoreApi* | [**addFunctionCallee**](docs/FunctionsCoreApi.md#addFunctionCallee) | **POST** /v3/functions/{function_id}/callees | Add a callee to a function
+*FunctionsCoreApi* | [**addUserStringToFunction**](docs/FunctionsCoreApi.md#addUserStringToFunction) | **POST** /v3/functions/{function_id}/user-provided-strings | Add a user-provided string to a function.
*FunctionsCoreApi* | [**aiUnstrip**](docs/FunctionsCoreApi.md#aiUnstrip) | **POST** /v2/analyses/{analysis_id}/functions/ai-unstrip | Performs matching and auto-unstrip for an analysis and its functions
*FunctionsCoreApi* | [**analysisFunctionMatching**](docs/FunctionsCoreApi.md#analysisFunctionMatching) | **POST** /v2/analyses/{analysis_id}/functions/matches | Perform matching for the functions of an analysis
*FunctionsCoreApi* | [**autoUnstrip**](docs/FunctionsCoreApi.md#autoUnstrip) | **POST** /v2/analyses/{analysis_id}/functions/auto-unstrip | Performs matching and auto-unstrip for an analysis and its functions
@@ -183,6 +188,7 @@ Class | Method | HTTP request | Description
*FunctionsCoreApi* | [**getFunctionCapabilities**](docs/FunctionsCoreApi.md#getFunctionCapabilities) | **GET** /v2/functions/{function_id}/capabilities | Retrieve a functions capabilities
*FunctionsCoreApi* | [**getFunctionDetails**](docs/FunctionsCoreApi.md#getFunctionDetails) | **GET** /v2/functions/{function_id} | Get function details
*FunctionsCoreApi* | [**getFunctionStrings**](docs/FunctionsCoreApi.md#getFunctionStrings) | **GET** /v2/functions/{function_id}/strings | Get string information found in the function
+*FunctionsCoreApi* | [**getFunctionStrings_0**](docs/FunctionsCoreApi.md#getFunctionStrings_0) | **GET** /v3/functions/{function_id}/strings | List strings for a function.
*FunctionsDataTypesApi* | [**generateFunctionDataTypesForAnalysis**](docs/FunctionsDataTypesApi.md#generateFunctionDataTypesForAnalysis) | **POST** /v2/analyses/{analysis_id}/functions/data_types | Generate Function Data Types
*FunctionsDataTypesApi* | [**generateFunctionDataTypesForFunctions**](docs/FunctionsDataTypesApi.md#generateFunctionDataTypesForFunctions) | **POST** /v2/functions/data_types | Generate Function Data Types for an arbitrary list of functions
*FunctionsDataTypesApi* | [**getFunctionDataTypes**](docs/FunctionsDataTypesApi.md#getFunctionDataTypes) | **GET** /v2/analyses/{analysis_id}/functions/{function_id}/data_types | Get Function Data Types
@@ -205,13 +211,12 @@ Class | Method | HTTP request | Description
*SearchApi* | [**searchCollections**](docs/SearchApi.md#searchCollections) | **GET** /v2/search/collections | Collections search
*SearchApi* | [**searchFunctions**](docs/SearchApi.md#searchFunctions) | **GET** /v2/search/functions | Functions search
*SearchApi* | [**searchTags**](docs/SearchApi.md#searchTags) | **GET** /v2/search/tags | Tags search
-*StringsApi* | [**addUserStringToAnalysis**](docs/StringsApi.md#addUserStringToAnalysis) | **POST** /v3/analyses/{analysis_id}/user-provided-strings | Add a user-provided string to an analysis.
-*StringsApi* | [**addUserStringToFunction**](docs/StringsApi.md#addUserStringToFunction) | **POST** /v3/functions/{function_id}/user-provided-strings | Add a user-provided string to a function.
## Documentation for Models
- [APIError](docs/APIError.md)
+ - [AddCalleeInputBody](docs/AddCalleeInputBody.md)
- [AddUserStringInputBody](docs/AddUserStringInputBody.md)
- [AddUserStringToFunctionInputBody](docs/AddUserStringToFunctionInputBody.md)
- [AdditionalDetailsStatusResponse](docs/AdditionalDetailsStatusResponse.md)
@@ -231,10 +236,14 @@ Class | Method | HTTP request | Description
- [AnalysisFunctionMatchingRequest](docs/AnalysisFunctionMatchingRequest.md)
- [AnalysisFunctions](docs/AnalysisFunctions.md)
- [AnalysisFunctionsList](docs/AnalysisFunctionsList.md)
+ - [AnalysisLogMessage](docs/AnalysisLogMessage.md)
+ - [AnalysisLogs](docs/AnalysisLogs.md)
- [AnalysisRecord](docs/AnalysisRecord.md)
- [AnalysisReport](docs/AnalysisReport.md)
- [AnalysisScope](docs/AnalysisScope.md)
+ - [AnalysisStringFunction](docs/AnalysisStringFunction.md)
- [AnalysisStringInput](docs/AnalysisStringInput.md)
+ - [AnalysisStringItem](docs/AnalysisStringItem.md)
- [AnalysisStringsResponse](docs/AnalysisStringsResponse.md)
- [AnalysisStringsStatusResponse](docs/AnalysisStringsStatusResponse.md)
- [AnalysisTags](docs/AnalysisTags.md)
@@ -457,6 +466,7 @@ Class | Method | HTTP request | Description
- [FunctionSearchResult](docs/FunctionSearchResult.md)
- [FunctionSourceType](docs/FunctionSourceType.md)
- [FunctionString](docs/FunctionString.md)
+ - [FunctionStringItem](docs/FunctionStringItem.md)
- [FunctionStringsResponse](docs/FunctionStringsResponse.md)
- [FunctionTaskResponse](docs/FunctionTaskResponse.md)
- [FunctionTaskStatus](docs/FunctionTaskStatus.md)
@@ -469,6 +479,7 @@ Class | Method | HTTP request | Description
- [GenerationStatusList](docs/GenerationStatusList.md)
- [GetAiDecompilationRatingResponse](docs/GetAiDecompilationRatingResponse.md)
- [GetAiDecompilationTask](docs/GetAiDecompilationTask.md)
+ - [GetAnalysisStringsStatusOutputBody](docs/GetAnalysisStringsStatusOutputBody.md)
- [GetPublicUserResponse](docs/GetPublicUserResponse.md)
- [GlobalVariable](docs/GlobalVariable.md)
- [HistoryEntry](docs/HistoryEntry.md)
@@ -482,7 +493,9 @@ Class | Method | HTTP request | Description
- [InverseFunctionMapItem](docs/InverseFunctionMapItem.md)
- [InverseStringMapItem](docs/InverseStringMapItem.md)
- [InverseValue](docs/InverseValue.md)
+ - [ListAnalysisStringsOutputBody](docs/ListAnalysisStringsOutputBody.md)
- [ListCollectionResults](docs/ListCollectionResults.md)
+ - [ListFunctionStringsOutputBody](docs/ListFunctionStringsOutputBody.md)
- [Logs](docs/Logs.md)
- [MITRETechnique](docs/MITRETechnique.md)
- [MatchedFunction](docs/MatchedFunction.md)
diff --git a/docs/AddCalleeInputBody.md b/docs/AddCalleeInputBody.md
new file mode 100644
index 00000000..fc0a922e
--- /dev/null
+++ b/docs/AddCalleeInputBody.md
@@ -0,0 +1,17 @@
+
+
+# AddCalleeInputBody
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**calleeFunctionId** | **Long** | Internal callee function ID; 0 means not provided | [optional] |
+|**calleeName** | **String** | Callee name (for external calls) | [optional] |
+|**calleeVaddr** | **Long** | Virtual address of the callee | |
+|**isExternal** | **Boolean** | Whether the callee is outside the binary | |
+|**thunkedVaddr** | **Long** | Thunked virtual address | [optional] |
+
+
+
diff --git a/docs/AnalysesCoreApi.md b/docs/AnalysesCoreApi.md
index 05680048..e4de8afb 100644
--- a/docs/AnalysesCoreApi.md
+++ b/docs/AnalysesCoreApi.md
@@ -4,6 +4,7 @@ All URIs are relative to *https://api.reveng.ai*
| Method | HTTP request | Description |
|------------- | ------------- | -------------|
+| [**addUserStringToAnalysis**](AnalysesCoreApi.md#addUserStringToAnalysis) | **POST** /v3/analyses/{analysis_id}/user-provided-strings | Add a user-provided string to an analysis. |
| [**createAnalysis**](AnalysesCoreApi.md#createAnalysis) | **POST** /v2/analyses | Create Analysis |
| [**deleteAnalysis**](AnalysesCoreApi.md#deleteAnalysis) | **DELETE** /v2/analyses/{analysis_id} | Delete Analysis |
| [**getAnalysisBasicInfo**](AnalysesCoreApi.md#getAnalysisBasicInfo) | **GET** /v2/analyses/{analysis_id}/basic | Gets basic analysis information |
@@ -13,6 +14,8 @@ All URIs are relative to *https://api.reveng.ai*
| [**getAnalysisParams**](AnalysesCoreApi.md#getAnalysisParams) | **GET** /v2/analyses/{analysis_id}/params | Gets analysis param information |
| [**getAnalysisQueuePosition**](AnalysesCoreApi.md#getAnalysisQueuePosition) | **GET** /v2/analyses/{analysis_id}/queue-position | Get the queue position of an analysis |
| [**getAnalysisStatus**](AnalysesCoreApi.md#getAnalysisStatus) | **GET** /v2/analyses/{analysis_id}/status | Gets the status of an analysis |
+| [**getAnalysisStrings**](AnalysesCoreApi.md#getAnalysisStrings) | **GET** /v3/analyses/{analysis_id}/functions/strings | List strings for an analysis. |
+| [**getAnalysisStringsStatus**](AnalysesCoreApi.md#getAnalysisStringsStatus) | **GET** /v3/analyses/{analysis_id}/functions/strings/status | Get the string-extraction status for an analysis. |
| [**insertAnalysisLog**](AnalysesCoreApi.md#insertAnalysisLog) | **POST** /v2/analyses/{analysis_id}/logs | Insert a log entry for an analysis |
| [**listAnalyses**](AnalysesCoreApi.md#listAnalyses) | **GET** /v2/analyses/list | Gets the most recent analyses |
| [**lookupBinaryId**](AnalysesCoreApi.md#lookupBinaryId) | **GET** /v2/analyses/lookup/{binary_id} | Gets the analysis ID from binary ID |
@@ -23,6 +26,81 @@ All URIs are relative to *https://api.reveng.ai*
| [**uploadFile**](AnalysesCoreApi.md#uploadFile) | **POST** /v2/upload | Upload File |
+
+# **addUserStringToAnalysis**
+> Map<String, Object> addUserStringToAnalysis(analysisId, addUserStringInputBody)
+
+Add a user-provided string to an analysis.
+
+Attaches a user-provided string to an analysis at the given virtual address. The string is stored with source `USER` and complements strings discovered automatically during analysis. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+
+### Example
+```java
+// Import classes:
+import ai.reveng.invoker.ApiClient;
+import ai.reveng.invoker.ApiException;
+import ai.reveng.invoker.Configuration;
+import ai.reveng.invoker.auth.*;
+import ai.reveng.invoker.models.*;
+import ai.reveng.api.AnalysesCoreApi;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = Configuration.getDefaultApiClient();
+ defaultClient.setBasePath("https://api.reveng.ai");
+
+ // Configure API key authorization: APIKey
+ ApiKeyAuth APIKey = (ApiKeyAuth) defaultClient.getAuthentication("APIKey");
+ APIKey.setApiKey("YOUR API KEY");
+ // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+ //APIKey.setApiKeyPrefix("Token");
+
+ AnalysesCoreApi apiInstance = new AnalysesCoreApi(defaultClient);
+ Long analysisId = 56L; // Long | Analysis ID
+ AddUserStringInputBody addUserStringInputBody = new AddUserStringInputBody(); // AddUserStringInputBody |
+ try {
+ Map result = apiInstance.addUserStringToAnalysis(analysisId, addUserStringInputBody);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling AnalysesCoreApi#addUserStringToAnalysis");
+ System.err.println("Status code: " + e.getCode());
+ System.err.println("Reason: " + e.getResponseBody());
+ System.err.println("Response headers: " + e.getResponseHeaders());
+ e.printStackTrace();
+ }
+ }
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **analysisId** | **Long**| Analysis ID | |
+| **addUserStringInputBody** | [**AddUserStringInputBody**](AddUserStringInputBody.md)| | |
+
+### Return type
+
+**Map<String, Object>**
+
+### Authorization
+
+[APIKey](../README.md#APIKey)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | Created | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **422** | Unprocessable Entity | - |
+| **500** | Internal Server Error | - |
+
# **createAnalysis**
> BaseResponseAnalysisCreateResponse createAnalysis(analysisCreateRequest, xRevEngApplication)
@@ -667,6 +745,164 @@ public class Example {
| **200** | Successful Response | - |
| **422** | Invalid request parameters | - |
+
+# **getAnalysisStrings**
+> ListAnalysisStringsOutputBody getAnalysisStrings(analysisId, page, pageSize, search, functionSearch, orderBy, sortOrder)
+
+List strings for an analysis.
+
+Returns the strings discovered in an analysis, combining function-level and analysis-level strings. Supports value/function-name search, sorting and pagination. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+
+### Example
+```java
+// Import classes:
+import ai.reveng.invoker.ApiClient;
+import ai.reveng.invoker.ApiException;
+import ai.reveng.invoker.Configuration;
+import ai.reveng.invoker.auth.*;
+import ai.reveng.invoker.models.*;
+import ai.reveng.api.AnalysesCoreApi;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = Configuration.getDefaultApiClient();
+ defaultClient.setBasePath("https://api.reveng.ai");
+
+ // Configure API key authorization: APIKey
+ ApiKeyAuth APIKey = (ApiKeyAuth) defaultClient.getAuthentication("APIKey");
+ APIKey.setApiKey("YOUR API KEY");
+ // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+ //APIKey.setApiKeyPrefix("Token");
+
+ AnalysesCoreApi apiInstance = new AnalysesCoreApi(defaultClient);
+ Long analysisId = 56L; // Long | Analysis ID
+ Long page = 1L; // Long | Page number (1-indexed).
+ Long pageSize = 100L; // Long | Number of results per page.
+ String search = "search_example"; // String | Filter by string value (case-insensitive substring match).
+ String functionSearch = "functionSearch_example"; // String | Filter by function name (case-insensitive substring match).
+ String orderBy = "value"; // String | Field to order results by.
+ String sortOrder = "ASC"; // String | Sort direction.
+ try {
+ ListAnalysisStringsOutputBody result = apiInstance.getAnalysisStrings(analysisId, page, pageSize, search, functionSearch, orderBy, sortOrder);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling AnalysesCoreApi#getAnalysisStrings");
+ System.err.println("Status code: " + e.getCode());
+ System.err.println("Reason: " + e.getResponseBody());
+ System.err.println("Response headers: " + e.getResponseHeaders());
+ e.printStackTrace();
+ }
+ }
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **analysisId** | **Long**| Analysis ID | |
+| **page** | **Long**| Page number (1-indexed). | [optional] [default to 1] |
+| **pageSize** | **Long**| Number of results per page. | [optional] [default to 100] |
+| **search** | **String**| Filter by string value (case-insensitive substring match). | [optional] |
+| **functionSearch** | **String**| Filter by function name (case-insensitive substring match). | [optional] |
+| **orderBy** | **String**| Field to order results by. | [optional] [default to value] [enum: value, length] |
+| **sortOrder** | **String**| Sort direction. | [optional] [default to ASC] [enum: ASC, DESC] |
+
+### Return type
+
+[**ListAnalysisStringsOutputBody**](ListAnalysisStringsOutputBody.md)
+
+### Authorization
+
+[APIKey](../README.md#APIKey)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | OK | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **422** | Unprocessable Entity | - |
+| **500** | Internal Server Error | - |
+
+
+# **getAnalysisStringsStatus**
+> GetAnalysisStringsStatusOutputBody getAnalysisStringsStatus(analysisId)
+
+Get the string-extraction status for an analysis.
+
+Returns the status of the string-extraction task for the binary backing the analysis. One of UNINITIALISED, PENDING, RUNNING, COMPLETED, FAILED. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+
+### Example
+```java
+// Import classes:
+import ai.reveng.invoker.ApiClient;
+import ai.reveng.invoker.ApiException;
+import ai.reveng.invoker.Configuration;
+import ai.reveng.invoker.auth.*;
+import ai.reveng.invoker.models.*;
+import ai.reveng.api.AnalysesCoreApi;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = Configuration.getDefaultApiClient();
+ defaultClient.setBasePath("https://api.reveng.ai");
+
+ // Configure API key authorization: APIKey
+ ApiKeyAuth APIKey = (ApiKeyAuth) defaultClient.getAuthentication("APIKey");
+ APIKey.setApiKey("YOUR API KEY");
+ // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+ //APIKey.setApiKeyPrefix("Token");
+
+ AnalysesCoreApi apiInstance = new AnalysesCoreApi(defaultClient);
+ Long analysisId = 56L; // Long | Analysis ID
+ try {
+ GetAnalysisStringsStatusOutputBody result = apiInstance.getAnalysisStringsStatus(analysisId);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling AnalysesCoreApi#getAnalysisStringsStatus");
+ System.err.println("Status code: " + e.getCode());
+ System.err.println("Reason: " + e.getResponseBody());
+ System.err.println("Response headers: " + e.getResponseHeaders());
+ e.printStackTrace();
+ }
+ }
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **analysisId** | **Long**| Analysis ID | |
+
+### Return type
+
+[**GetAnalysisStringsStatusOutputBody**](GetAnalysisStringsStatusOutputBody.md)
+
+### Authorization
+
+[APIKey](../README.md#APIKey)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | OK | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **422** | Unprocessable Entity | - |
+| **500** | Internal Server Error | - |
+
# **insertAnalysisLog**
> BaseResponse insertAnalysisLog(analysisId, insertAnalysisLogRequest)
diff --git a/docs/AnalysisLogMessage.md b/docs/AnalysisLogMessage.md
new file mode 100644
index 00000000..519d1969
--- /dev/null
+++ b/docs/AnalysisLogMessage.md
@@ -0,0 +1,14 @@
+
+
+# AnalysisLogMessage
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**message** | **String** | | |
+|**time** | **String** | | |
+
+
+
diff --git a/docs/AnalysisLogs.md b/docs/AnalysisLogs.md
new file mode 100644
index 00000000..f3bc5f5d
--- /dev/null
+++ b/docs/AnalysisLogs.md
@@ -0,0 +1,14 @@
+
+
+# AnalysisLogs
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**messageCount** | **Long** | | |
+|**messages** | **List<AnalysisLogMessage>** | | |
+
+
+
diff --git a/docs/AnalysisStringFunction.md b/docs/AnalysisStringFunction.md
new file mode 100644
index 00000000..2be1dd95
--- /dev/null
+++ b/docs/AnalysisStringFunction.md
@@ -0,0 +1,14 @@
+
+
+# AnalysisStringFunction
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**functionId** | **Long** | | |
+|**functionVaddr** | **Long** | | |
+
+
+
diff --git a/docs/AnalysisStringItem.md b/docs/AnalysisStringItem.md
new file mode 100644
index 00000000..43c049de
--- /dev/null
+++ b/docs/AnalysisStringItem.md
@@ -0,0 +1,15 @@
+
+
+# AnalysisStringItem
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**functions** | **List<AnalysisStringFunction>** | | |
+|**source** | **String** | | |
+|**value** | **String** | | |
+
+
+
diff --git a/docs/DynamicExecutionStatusResponse.md b/docs/DynamicExecutionStatusResponse.md
index f25bf765..b45a0be8 100644
--- a/docs/DynamicExecutionStatusResponse.md
+++ b/docs/DynamicExecutionStatusResponse.md
@@ -8,6 +8,7 @@
| Name | Type | Description | Notes |
|------------ | ------------- | ------------- | -------------|
|**errorMessage** | **String** | Error detail, set when status is ERROR | [optional] |
+|**logs** | **AnalysisLogs** | Sandbox status log messages captured during the run. Contains a single \"No logs available\" message when none have been captured yet. | |
|**status** | **String** | Task status: UNINITIALISED, PENDING, RUNNING, COMPLETED, or ERROR | |
diff --git a/docs/FunctionStringItem.md b/docs/FunctionStringItem.md
new file mode 100644
index 00000000..21b39dff
--- /dev/null
+++ b/docs/FunctionStringItem.md
@@ -0,0 +1,15 @@
+
+
+# FunctionStringItem
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**source** | **String** | | |
+|**vaddr** | **Long** | | |
+|**value** | **String** | | |
+
+
+
diff --git a/docs/FunctionsCoreApi.md b/docs/FunctionsCoreApi.md
index 0efafc7c..0197a3e4 100644
--- a/docs/FunctionsCoreApi.md
+++ b/docs/FunctionsCoreApi.md
@@ -4,6 +4,8 @@ All URIs are relative to *https://api.reveng.ai*
| Method | HTTP request | Description |
|------------- | ------------- | -------------|
+| [**addFunctionCallee**](FunctionsCoreApi.md#addFunctionCallee) | **POST** /v3/functions/{function_id}/callees | Add a callee to a function |
+| [**addUserStringToFunction**](FunctionsCoreApi.md#addUserStringToFunction) | **POST** /v3/functions/{function_id}/user-provided-strings | Add a user-provided string to a function. |
| [**aiUnstrip**](FunctionsCoreApi.md#aiUnstrip) | **POST** /v2/analyses/{analysis_id}/functions/ai-unstrip | Performs matching and auto-unstrip for an analysis and its functions |
| [**analysisFunctionMatching**](FunctionsCoreApi.md#analysisFunctionMatching) | **POST** /v2/analyses/{analysis_id}/functions/matches | Perform matching for the functions of an analysis |
| [**autoUnstrip**](FunctionsCoreApi.md#autoUnstrip) | **POST** /v2/analyses/{analysis_id}/functions/auto-unstrip | Performs matching and auto-unstrip for an analysis and its functions |
@@ -18,8 +20,160 @@ All URIs are relative to *https://api.reveng.ai*
| [**getFunctionCapabilities**](FunctionsCoreApi.md#getFunctionCapabilities) | **GET** /v2/functions/{function_id}/capabilities | Retrieve a functions capabilities |
| [**getFunctionDetails**](FunctionsCoreApi.md#getFunctionDetails) | **GET** /v2/functions/{function_id} | Get function details |
| [**getFunctionStrings**](FunctionsCoreApi.md#getFunctionStrings) | **GET** /v2/functions/{function_id}/strings | Get string information found in the function |
+| [**getFunctionStrings_0**](FunctionsCoreApi.md#getFunctionStrings_0) | **GET** /v3/functions/{function_id}/strings | List strings for a function. |
+
+# **addFunctionCallee**
+> Map<String, Object> addFunctionCallee(functionId, addCalleeInputBody)
+
+Add a callee to a function
+
+Records an outgoing call edge from the given function to a callee. **Error codes:** - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `400` [`BAD_REQUEST`](/errors/BAD_REQUEST) — Bad Request
+
+### Example
+```java
+// Import classes:
+import ai.reveng.invoker.ApiClient;
+import ai.reveng.invoker.ApiException;
+import ai.reveng.invoker.Configuration;
+import ai.reveng.invoker.auth.*;
+import ai.reveng.invoker.models.*;
+import ai.reveng.api.FunctionsCoreApi;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = Configuration.getDefaultApiClient();
+ defaultClient.setBasePath("https://api.reveng.ai");
+
+ // Configure API key authorization: APIKey
+ ApiKeyAuth APIKey = (ApiKeyAuth) defaultClient.getAuthentication("APIKey");
+ APIKey.setApiKey("YOUR API KEY");
+ // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+ //APIKey.setApiKeyPrefix("Token");
+
+ FunctionsCoreApi apiInstance = new FunctionsCoreApi(defaultClient);
+ Long functionId = 56L; // Long | Function ID
+ AddCalleeInputBody addCalleeInputBody = new AddCalleeInputBody(); // AddCalleeInputBody |
+ try {
+ Map result = apiInstance.addFunctionCallee(functionId, addCalleeInputBody);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling FunctionsCoreApi#addFunctionCallee");
+ System.err.println("Status code: " + e.getCode());
+ System.err.println("Reason: " + e.getResponseBody());
+ System.err.println("Response headers: " + e.getResponseHeaders());
+ e.printStackTrace();
+ }
+ }
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **functionId** | **Long**| Function ID | |
+| **addCalleeInputBody** | [**AddCalleeInputBody**](AddCalleeInputBody.md)| | |
+
+### Return type
+
+**Map<String, Object>**
+
+### Authorization
+
+[APIKey](../README.md#APIKey)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | Created | - |
+| **400** | Bad Request | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **422** | Unprocessable Entity | - |
+| **500** | Internal Server Error | - |
+
+
+# **addUserStringToFunction**
+> Map<String, Object> addUserStringToFunction(functionId, addUserStringToFunctionInputBody)
+
+Add a user-provided string to a function.
+
+Attaches a user-provided string to a function at the given virtual address. The string is stored with source `USER` and complements strings discovered automatically during analysis. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+
+### Example
+```java
+// Import classes:
+import ai.reveng.invoker.ApiClient;
+import ai.reveng.invoker.ApiException;
+import ai.reveng.invoker.Configuration;
+import ai.reveng.invoker.auth.*;
+import ai.reveng.invoker.models.*;
+import ai.reveng.api.FunctionsCoreApi;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = Configuration.getDefaultApiClient();
+ defaultClient.setBasePath("https://api.reveng.ai");
+
+ // Configure API key authorization: APIKey
+ ApiKeyAuth APIKey = (ApiKeyAuth) defaultClient.getAuthentication("APIKey");
+ APIKey.setApiKey("YOUR API KEY");
+ // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+ //APIKey.setApiKeyPrefix("Token");
+
+ FunctionsCoreApi apiInstance = new FunctionsCoreApi(defaultClient);
+ Long functionId = 56L; // Long | Function ID
+ AddUserStringToFunctionInputBody addUserStringToFunctionInputBody = new AddUserStringToFunctionInputBody(); // AddUserStringToFunctionInputBody |
+ try {
+ Map result = apiInstance.addUserStringToFunction(functionId, addUserStringToFunctionInputBody);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling FunctionsCoreApi#addUserStringToFunction");
+ System.err.println("Status code: " + e.getCode());
+ System.err.println("Reason: " + e.getResponseBody());
+ System.err.println("Response headers: " + e.getResponseHeaders());
+ e.printStackTrace();
+ }
+ }
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **functionId** | **Long**| Function ID | |
+| **addUserStringToFunctionInputBody** | [**AddUserStringToFunctionInputBody**](AddUserStringToFunctionInputBody.md)| | |
+
+### Return type
+
+**Map<String, Object>**
+
+### Authorization
+
+[APIKey](../README.md#APIKey)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | Created | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **422** | Unprocessable Entity | - |
+| **500** | Internal Server Error | - |
+
# **aiUnstrip**
> AutoUnstripResponse aiUnstrip(analysisId, aiUnstripRequest)
@@ -1018,3 +1172,82 @@ public class Example {
| **200** | Successful Response | - |
| **422** | Invalid request parameters | - |
+
+# **getFunctionStrings_0**
+> ListFunctionStringsOutputBody getFunctionStrings_0(functionId, page, pageSize, search)
+
+List strings for a function.
+
+Returns the strings discovered in a function. Supports value search and pagination. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+
+### Example
+```java
+// Import classes:
+import ai.reveng.invoker.ApiClient;
+import ai.reveng.invoker.ApiException;
+import ai.reveng.invoker.Configuration;
+import ai.reveng.invoker.auth.*;
+import ai.reveng.invoker.models.*;
+import ai.reveng.api.FunctionsCoreApi;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = Configuration.getDefaultApiClient();
+ defaultClient.setBasePath("https://api.reveng.ai");
+
+ // Configure API key authorization: APIKey
+ ApiKeyAuth APIKey = (ApiKeyAuth) defaultClient.getAuthentication("APIKey");
+ APIKey.setApiKey("YOUR API KEY");
+ // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+ //APIKey.setApiKeyPrefix("Token");
+
+ FunctionsCoreApi apiInstance = new FunctionsCoreApi(defaultClient);
+ Long functionId = 56L; // Long | Function ID
+ Long page = 1L; // Long | Page number (1-indexed).
+ Long pageSize = 100L; // Long | Number of results per page.
+ String search = "search_example"; // String | Filter by string value (case-insensitive substring match).
+ try {
+ ListFunctionStringsOutputBody result = apiInstance.getFunctionStrings_0(functionId, page, pageSize, search);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling FunctionsCoreApi#getFunctionStrings_0");
+ System.err.println("Status code: " + e.getCode());
+ System.err.println("Reason: " + e.getResponseBody());
+ System.err.println("Response headers: " + e.getResponseHeaders());
+ e.printStackTrace();
+ }
+ }
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **functionId** | **Long**| Function ID | |
+| **page** | **Long**| Page number (1-indexed). | [optional] [default to 1] |
+| **pageSize** | **Long**| Number of results per page. | [optional] [default to 100] |
+| **search** | **String**| Filter by string value (case-insensitive substring match). | [optional] |
+
+### Return type
+
+[**ListFunctionStringsOutputBody**](ListFunctionStringsOutputBody.md)
+
+### Authorization
+
+[APIKey](../README.md#APIKey)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | OK | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **422** | Unprocessable Entity | - |
+| **500** | Internal Server Error | - |
+
diff --git a/docs/GetAnalysisStringsStatusOutputBody.md b/docs/GetAnalysisStringsStatusOutputBody.md
new file mode 100644
index 00000000..5bd4a582
--- /dev/null
+++ b/docs/GetAnalysisStringsStatusOutputBody.md
@@ -0,0 +1,13 @@
+
+
+# GetAnalysisStringsStatusOutputBody
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | **String** | | |
+
+
+
diff --git a/docs/ListAnalysisStringsOutputBody.md b/docs/ListAnalysisStringsOutputBody.md
new file mode 100644
index 00000000..3c7e8404
--- /dev/null
+++ b/docs/ListAnalysisStringsOutputBody.md
@@ -0,0 +1,14 @@
+
+
+# ListAnalysisStringsOutputBody
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**strings** | **List<AnalysisStringItem>** | | |
+|**totalStrings** | **Long** | | |
+
+
+
diff --git a/docs/ListFunctionStringsOutputBody.md b/docs/ListFunctionStringsOutputBody.md
new file mode 100644
index 00000000..75e90ef0
--- /dev/null
+++ b/docs/ListFunctionStringsOutputBody.md
@@ -0,0 +1,14 @@
+
+
+# ListFunctionStringsOutputBody
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**strings** | **List<FunctionStringItem>** | | |
+|**totalStrings** | **Long** | | |
+
+
+
diff --git a/docs/StringsApi.md b/docs/StringsApi.md
deleted file mode 100644
index f0799e51..00000000
--- a/docs/StringsApi.md
+++ /dev/null
@@ -1,160 +0,0 @@
-# StringsApi
-
-All URIs are relative to *https://api.reveng.ai*
-
-| Method | HTTP request | Description |
-|------------- | ------------- | -------------|
-| [**addUserStringToAnalysis**](StringsApi.md#addUserStringToAnalysis) | **POST** /v3/analyses/{analysis_id}/user-provided-strings | Add a user-provided string to an analysis. |
-| [**addUserStringToFunction**](StringsApi.md#addUserStringToFunction) | **POST** /v3/functions/{function_id}/user-provided-strings | Add a user-provided string to a function. |
-
-
-
-# **addUserStringToAnalysis**
-> Map<String, Object> addUserStringToAnalysis(analysisId, addUserStringInputBody)
-
-Add a user-provided string to an analysis.
-
-Attaches a user-provided string to an analysis at the given virtual address. The string is stored with source `USER` and complements strings discovered automatically during analysis. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
-
-### Example
-```java
-// Import classes:
-import ai.reveng.invoker.ApiClient;
-import ai.reveng.invoker.ApiException;
-import ai.reveng.invoker.Configuration;
-import ai.reveng.invoker.auth.*;
-import ai.reveng.invoker.models.*;
-import ai.reveng.api.StringsApi;
-
-public class Example {
- public static void main(String[] args) {
- ApiClient defaultClient = Configuration.getDefaultApiClient();
- defaultClient.setBasePath("https://api.reveng.ai");
-
- // Configure API key authorization: APIKey
- ApiKeyAuth APIKey = (ApiKeyAuth) defaultClient.getAuthentication("APIKey");
- APIKey.setApiKey("YOUR API KEY");
- // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
- //APIKey.setApiKeyPrefix("Token");
-
- StringsApi apiInstance = new StringsApi(defaultClient);
- Long analysisId = 56L; // Long | Analysis ID
- AddUserStringInputBody addUserStringInputBody = new AddUserStringInputBody(); // AddUserStringInputBody |
- try {
- Map result = apiInstance.addUserStringToAnalysis(analysisId, addUserStringInputBody);
- System.out.println(result);
- } catch (ApiException e) {
- System.err.println("Exception when calling StringsApi#addUserStringToAnalysis");
- System.err.println("Status code: " + e.getCode());
- System.err.println("Reason: " + e.getResponseBody());
- System.err.println("Response headers: " + e.getResponseHeaders());
- e.printStackTrace();
- }
- }
-}
-```
-
-### Parameters
-
-| Name | Type | Description | Notes |
-|------------- | ------------- | ------------- | -------------|
-| **analysisId** | **Long**| Analysis ID | |
-| **addUserStringInputBody** | [**AddUserStringInputBody**](AddUserStringInputBody.md)| | |
-
-### Return type
-
-**Map<String, Object>**
-
-### Authorization
-
-[APIKey](../README.md#APIKey)
-
-### HTTP request headers
-
- - **Content-Type**: application/json
- - **Accept**: application/json
-
-### HTTP response details
-| Status code | Description | Response headers |
-|-------------|-------------|------------------|
-| **201** | Created | - |
-| **403** | Forbidden | - |
-| **404** | Not Found | - |
-| **422** | Unprocessable Entity | - |
-| **500** | Internal Server Error | - |
-
-
-# **addUserStringToFunction**
-> Map<String, Object> addUserStringToFunction(functionId, addUserStringToFunctionInputBody)
-
-Add a user-provided string to a function.
-
-Attaches a user-provided string to a function at the given virtual address. The string is stored with source `USER` and complements strings discovered automatically during analysis. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
-
-### Example
-```java
-// Import classes:
-import ai.reveng.invoker.ApiClient;
-import ai.reveng.invoker.ApiException;
-import ai.reveng.invoker.Configuration;
-import ai.reveng.invoker.auth.*;
-import ai.reveng.invoker.models.*;
-import ai.reveng.api.StringsApi;
-
-public class Example {
- public static void main(String[] args) {
- ApiClient defaultClient = Configuration.getDefaultApiClient();
- defaultClient.setBasePath("https://api.reveng.ai");
-
- // Configure API key authorization: APIKey
- ApiKeyAuth APIKey = (ApiKeyAuth) defaultClient.getAuthentication("APIKey");
- APIKey.setApiKey("YOUR API KEY");
- // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
- //APIKey.setApiKeyPrefix("Token");
-
- StringsApi apiInstance = new StringsApi(defaultClient);
- Long functionId = 56L; // Long | Function ID
- AddUserStringToFunctionInputBody addUserStringToFunctionInputBody = new AddUserStringToFunctionInputBody(); // AddUserStringToFunctionInputBody |
- try {
- Map result = apiInstance.addUserStringToFunction(functionId, addUserStringToFunctionInputBody);
- System.out.println(result);
- } catch (ApiException e) {
- System.err.println("Exception when calling StringsApi#addUserStringToFunction");
- System.err.println("Status code: " + e.getCode());
- System.err.println("Reason: " + e.getResponseBody());
- System.err.println("Response headers: " + e.getResponseHeaders());
- e.printStackTrace();
- }
- }
-}
-```
-
-### Parameters
-
-| Name | Type | Description | Notes |
-|------------- | ------------- | ------------- | -------------|
-| **functionId** | **Long**| Function ID | |
-| **addUserStringToFunctionInputBody** | [**AddUserStringToFunctionInputBody**](AddUserStringToFunctionInputBody.md)| | |
-
-### Return type
-
-**Map<String, Object>**
-
-### Authorization
-
-[APIKey](../README.md#APIKey)
-
-### HTTP request headers
-
- - **Content-Type**: application/json
- - **Accept**: application/json
-
-### HTTP response details
-| Status code | Description | Response headers |
-|-------------|-------------|------------------|
-| **201** | Created | - |
-| **403** | Forbidden | - |
-| **404** | Not Found | - |
-| **422** | Unprocessable Entity | - |
-| **500** | Internal Server Error | - |
-
diff --git a/src/main/java/ai/reveng/api/AnalysesCoreApi.java b/src/main/java/ai/reveng/api/AnalysesCoreApi.java
index 31114f41..9383f67d 100644
--- a/src/main/java/ai/reveng/api/AnalysesCoreApi.java
+++ b/src/main/java/ai/reveng/api/AnalysesCoreApi.java
@@ -27,6 +27,7 @@
import ai.reveng.model.APIError;
+import ai.reveng.model.AddUserStringInputBody;
import ai.reveng.model.AnalysisCreateRequest;
import ai.reveng.model.AnalysisUpdateRequest;
import ai.reveng.model.AnalysisUpdateTagsRequest;
@@ -46,7 +47,9 @@
import ai.reveng.model.BaseResponseUploadResponse;
import ai.reveng.model.DynamicExecutionStatus;
import java.io.File;
+import ai.reveng.model.GetAnalysisStringsStatusOutputBody;
import ai.reveng.model.InsertAnalysisLogRequest;
+import ai.reveng.model.ListAnalysisStringsOutputBody;
import ai.reveng.model.ModelName;
import ai.reveng.model.Order;
import ai.reveng.model.PutAnalysisStringsRequest;
@@ -99,6 +102,159 @@ public void setCustomBaseUrl(String customBaseUrl) {
this.localCustomBaseUrl = customBaseUrl;
}
+ /**
+ * Build call for addUserStringToAnalysis
+ * @param analysisId Analysis ID (required)
+ * @param addUserStringInputBody (required)
+ * @param _callback Callback for upload/download progress
+ * @return Call to execute
+ * @throws ApiException If fail to serialize the request body object
+ * @http.response.details
+
+ Response Details
+ | Status Code | Description | Response Headers |
+ | 201 | Created | - |
+ | 403 | Forbidden | - |
+ | 404 | Not Found | - |
+ | 422 | Unprocessable Entity | - |
+ | 500 | Internal Server Error | - |
+
+ */
+ public okhttp3.Call addUserStringToAnalysisCall(@javax.annotation.Nonnull Long analysisId, @javax.annotation.Nonnull AddUserStringInputBody addUserStringInputBody, final ApiCallback _callback) throws ApiException {
+ String basePath = null;
+ // Operation Servers
+ String[] localBasePaths = new String[] { };
+
+ // Determine Base Path to Use
+ if (localCustomBaseUrl != null){
+ basePath = localCustomBaseUrl;
+ } else if ( localBasePaths.length > 0 ) {
+ basePath = localBasePaths[localHostIndex];
+ } else {
+ basePath = null;
+ }
+
+ Object localVarPostBody = addUserStringInputBody;
+
+ // create path and map variables
+ String localVarPath = "/v3/analyses/{analysis_id}/user-provided-strings"
+ .replace("{" + "analysis_id" + "}", localVarApiClient.escapeString(analysisId.toString()));
+
+ List localVarQueryParams = new ArrayList();
+ List localVarCollectionQueryParams = new ArrayList();
+ Map localVarHeaderParams = new HashMap();
+ Map localVarCookieParams = new HashMap();
+ Map localVarFormParams = new HashMap();
+
+ final String[] localVarAccepts = {
+ "application/json"
+ };
+ final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
+ if (localVarAccept != null) {
+ localVarHeaderParams.put("Accept", localVarAccept);
+ }
+
+ final String[] localVarContentTypes = {
+ "application/json"
+ };
+ final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
+ if (localVarContentType != null) {
+ localVarHeaderParams.put("Content-Type", localVarContentType);
+ }
+
+ String[] localVarAuthNames = new String[] { "APIKey" };
+ return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
+ }
+
+ @SuppressWarnings("rawtypes")
+ private okhttp3.Call addUserStringToAnalysisValidateBeforeCall(@javax.annotation.Nonnull Long analysisId, @javax.annotation.Nonnull AddUserStringInputBody addUserStringInputBody, final ApiCallback _callback) throws ApiException {
+ // verify the required parameter 'analysisId' is set
+ if (analysisId == null) {
+ throw new ApiException("Missing the required parameter 'analysisId' when calling addUserStringToAnalysis(Async)");
+ }
+
+ // verify the required parameter 'addUserStringInputBody' is set
+ if (addUserStringInputBody == null) {
+ throw new ApiException("Missing the required parameter 'addUserStringInputBody' when calling addUserStringToAnalysis(Async)");
+ }
+
+ return addUserStringToAnalysisCall(analysisId, addUserStringInputBody, _callback);
+
+ }
+
+ /**
+ * Add a user-provided string to an analysis.
+ * Attaches a user-provided string to an analysis at the given virtual address. The string is stored with source `USER` and complements strings discovered automatically during analysis. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+ * @param analysisId Analysis ID (required)
+ * @param addUserStringInputBody (required)
+ * @return Map<String, Object>
+ * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
+ * @http.response.details
+
+ Response Details
+ | Status Code | Description | Response Headers |
+ | 201 | Created | - |
+ | 403 | Forbidden | - |
+ | 404 | Not Found | - |
+ | 422 | Unprocessable Entity | - |
+ | 500 | Internal Server Error | - |
+
+ */
+ public Map addUserStringToAnalysis(@javax.annotation.Nonnull Long analysisId, @javax.annotation.Nonnull AddUserStringInputBody addUserStringInputBody) throws ApiException {
+ ApiResponse