Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Breaking changes

- **All SDKs:** removed `GridContext.submit_strategy_questionnaire` (`POST /v1/record/questionnaire`) and its `SubmitStrategyQuestionnaireOptions` type. The endpoint has been retired; the strategy risk-disclosure record is no longer submitted through the OpenAPI SDK. Removed across Rust (incl. blocking), C, C++, Java, Node.js, and Python bindings

### Fixed

- **C/C++ SDKs:** every list argument that crosses the FFI boundary now tolerates a null pointer with a zero length. `std::vector::data()` is allowed to return `nullptr` for an empty vector, which is exactly what the C++ binding passes for an omitted list argument, but the C layer fed it straight to `std::slice::from_raw_parts` — undefined behaviour that **aborts the process** under the debug UB checks. Hit live by `QuoteContext::warrant_list` with no filters (`c/src/quote_context/context.rs:784`); all 17 call sites across `quote_context`, `trade_context`, `agent_context`, `alert_context`, and `types` now go through a null-tolerant `slice_from_raw_parts` helper
Expand Down
8 changes: 0 additions & 8 deletions c/csrc/include/longbridge.h
Original file line number Diff line number Diff line change
Expand Up @@ -12779,14 +12779,6 @@ void lb_grid_context_restart(const struct lb_grid_context_t *ctx,
lb_async_callback_t callback,
void *userdata);

/**
* Submit the strategy risk-disclosure questionnaire record (grid trading
* compliance authorization).
*/
void lb_grid_context_submit_strategy_questionnaire(const struct lb_grid_context_t *ctx,
lb_async_callback_t callback,
void *userdata);

/**
* Get the security (symbol) info used to build a grid order (lot size,
* authorization flag, settlement currency, etc.).
Expand Down
20 changes: 1 addition & 19 deletions c/src/grid_context/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ use longbridge::{
grid::{
GetGridOrderDetailOptions, GetGridOrdersByIdsOptions, GetGridOrdersOptions,
GetGridTriggerHistoryOptions, GridLimitEvent, GridTimeInForce, GridTradeRule,
ReplaceGridOrderOptions, SubmitGridOrderOptions, SubmitStrategyQuestionnaireOptions,
TriggerPriceType,
ReplaceGridOrderOptions, SubmitGridOrderOptions, TriggerPriceType,
},
};

Expand Down Expand Up @@ -322,23 +321,6 @@ pub unsafe extern "C" fn lb_grid_context_restart(
});
}

/// Submit the strategy risk-disclosure questionnaire record (grid trading
/// compliance authorization).
#[unsafe(no_mangle)]
pub unsafe extern "C" fn lb_grid_context_submit_strategy_questionnaire(
ctx: *const CGridContext,
callback: CAsyncCallback,
userdata: *mut c_void,
) {
let ctx_inner = (*ctx).ctx.clone();
execute_async(callback, ctx, userdata, async move {
ctx_inner
.submit_strategy_questionnaire(SubmitStrategyQuestionnaireOptions::new())
.await?;
Ok(())
});
}

/// Get the security (symbol) info used to build a grid order (lot size,
/// authorization flag, settlement currency, etc.).
#[unsafe(no_mangle)]
Expand Down
5 changes: 0 additions & 5 deletions cpp/include/grid_context.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,6 @@ class GridContext
void restart(const std::string& order_id,
AsyncCallback<GridContext, void> callback) const;

/// Submit the strategy risk-disclosure questionnaire record (grid trading
/// compliance authorization).
void submit_strategy_questionnaire(
AsyncCallback<GridContext, void> callback) const;

/// Get the security (symbol) info used to build a grid order (lot size,
/// authorization flag, settlement currency, etc.).
void symbol_info(
Expand Down
17 changes: 0 additions & 17 deletions cpp/src/grid_context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -336,23 +336,6 @@ GridContext::restart(
new AsyncCallback<GridContext, void>(callback));
}

void
GridContext::submit_strategy_questionnaire(
AsyncCallback<GridContext, void> callback) const
{
lb_grid_context_submit_strategy_questionnaire(
ctx_,
[](auto res) {
auto callback_ptr =
callback::get_async_callback<GridContext, void>(res->userdata);
(*callback_ptr)(AsyncResult<GridContext, void>(
GridContext((const lb_grid_context_t*)res->ctx),
Status(res->error),
nullptr));
},
new AsyncCallback<GridContext, void>(callback));
}

void
GridContext::symbol_info(
const std::string& symbol,
Expand Down
6 changes: 1 addition & 5 deletions examples/rust/grid_trading/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use longbridge::{
Config,
grid::{
GetGridOrderDetailOptions, GetGridOrdersOptions, GetGridTriggerHistoryOptions, GridContext,
GridTradeRule, SubmitGridOrderOptions, SubmitStrategyQuestionnaireOptions,
GridTradeRule, SubmitGridOrderOptions,
},
oauth::OAuthBuilder,
trade::TradeContext,
Expand All @@ -27,10 +27,6 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Grid master-order pushes still arrive on the TradeContext private topic.
let (_trade, mut receiver) = TradeContext::new(config);

// Accept the strategy risk disclosure (compliance authorization) once.
ctx.submit_strategy_questionnaire(SubmitStrategyQuestionnaireOptions::new())
.await?;

// Security (symbol) info used to build a grid order (lot size, auth flag).
let info = ctx.symbol_info("700.HK").await?;
println!("grid symbol info: {info:?}");
Expand Down
2 changes: 0 additions & 2 deletions java/javasrc/src/main/java/com/longbridge/SdkNative.java
Original file line number Diff line number Diff line change
Expand Up @@ -298,8 +298,6 @@ public static native void gridContextTriggerHistory(long context, GetGridTrigger

public static native void gridContextRestart(long context, String orderId, AsyncCallback callback);

public static native void gridContextSubmitStrategyQuestionnaire(long context, AsyncCallback callback);

public static native void gridContextSymbolInfo(long context, String symbol, AsyncCallback callback);

// ── DCAContext ────────────────────────────────────────────────
Expand Down
13 changes: 0 additions & 13 deletions java/javasrc/src/main/java/com/longbridge/grid/GridContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -159,19 +159,6 @@ public CompletableFuture<Void> restart(String orderId) throws OpenApiException {
});
}

/**
* Submit the strategy risk-disclosure questionnaire record (grid trading
* compliance authorization).
*
* @return A Future representing the result of the operation
* @throws OpenApiException If an error occurs
*/
public CompletableFuture<Void> submitStrategyQuestionnaire() throws OpenApiException {
return AsyncCallback.executeTask((callback) -> {
SdkNative.gridContextSubmitStrategyQuestionnaire(raw(), callback);
});
}

/**
* Get the security (symbol) info used to build a grid order (lot size,
* authorization flag, settlement currency, etc.).
Expand Down
21 changes: 1 addition & 20 deletions java/src/grid_context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use longbridge::{
grid::{
GetGridOrderDetailOptions, GetGridOrdersByIdsOptions, GetGridOrdersOptions,
GetGridTriggerHistoryOptions, GridContext, GridTradeRule, ReplaceGridOrderOptions,
SubmitGridOrderOptions, SubmitStrategyQuestionnaireOptions,
SubmitGridOrderOptions,
},
};

Expand Down Expand Up @@ -342,25 +342,6 @@ pub unsafe extern "system" fn Java_com_longbridge_SdkNative_gridContextRestart(
})
}

#[unsafe(no_mangle)]
pub unsafe extern "system" fn Java_com_longbridge_SdkNative_gridContextSubmitStrategyQuestionnaire(
mut env: JNIEnv,
_class: JClass,
context: i64,
callback: JObject,
) {
jni_result(&mut env, (), |env| {
let context = &*(context as *const ContextObj);
let __owned_ctx = context.ctx.clone();
async_util::execute(env, callback, async move {
Ok(__owned_ctx
.submit_strategy_questionnaire(SubmitStrategyQuestionnaireOptions::new())
.await?)
})?;
Ok(())
})
}

#[unsafe(no_mangle)]
pub unsafe extern "system" fn Java_com_longbridge_SdkNative_gridContextSymbolInfo(
mut env: JNIEnv,
Expand Down
25 changes: 10 additions & 15 deletions nodejs/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -898,11 +898,6 @@ export declare class GridContext {
suspend(orderId: string): Promise<void>
/** Restart a grid trading order */
restart(orderId: string): Promise<void>
/**
* Submit the strategy risk-disclosure questionnaire record (grid trading
* compliance authorization).
*/
submitStrategyQuestionnaire(): Promise<void>
/**
* Get the security (symbol) info used to build a grid order (lot size,
* authorization flag, settlement currency, etc.).
Expand Down Expand Up @@ -7309,6 +7304,16 @@ export interface SubmitAttachedParams {
activateRth?: OutsideRTH
}

/** Options for submit grid trading order request */
export interface SubmitGridOrderOptions {
/** Security code */
symbol: string
/** Settlement currency */
settlementCurrency: string
/** Grid trading rule */
gridTradingRule: GridTradeRule
}

/** A leg of a multi-leg combination order to submit */
export interface SubmitMultiLegOrderLeg {
/** Option symbol, in `ticker.region` format (e.g. `QQQ260731C764000.US`) */
Expand Down Expand Up @@ -7346,16 +7351,6 @@ export interface SubmitMultiLegOrderOptions {
clientRequestId?: string
}

/** Options for submit grid trading order request */
export interface SubmitGridOrderOptions {
/** Security code */
symbol: string
/** Settlement currency */
settlementCurrency: string
/** Grid trading rule */
gridTradingRule: GridTradeRule
}

/** Options for submit order request */
export interface SubmitOrderOptions {
/** Security code */
Expand Down
Loading
Loading