From 4f58e2d085a12e0fcd54dbd1fb4c118a7b53e8f4 Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Tue, 2 Jun 2026 20:23:45 +0000 Subject: [PATCH] docs: audit async synchronization stubs --- AI.md | 21 +++++++++++++++- TODO.md | 26 +++++++++++++++++++ src/nwconn.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 116 insertions(+), 1 deletion(-) diff --git a/AI.md b/AI.md index 46f6d24..c318ea8 100644 --- a/AI.md +++ b/AI.md @@ -1220,4 +1220,23 @@ Next patch number should be `0253`. - This is synchronization/lock-provider state, not server-management or directory state. -Next patch number should be `0258`. +## 2026-06-02 - Patch 0258 async synchronization direct stubs 105/107/108/109 + +- Continued NDK-first after Clear Lock Wait Node with the missing direct + asynchronous synchronization endpoints in `src/nwconn.c`: + - `105` / wire `0x69` Log File (old) + - `107` / wire `0x6b` Log Logical Record + - `108` / wire `0x6c` Lock Logical Record Set + - `109` / wire `0x6d` Log Physical Record +- These are NetWare-3.x/4.x-relevant endpoints. The NDK also lists 5.x, but + this audit keeps only the 3.x/4.x contract. +- Patch `0258` adds disabled source stubs only. Runtime behavior is unchanged. +- Do not map these direct async-capable calls onto the existing old + synchronous handlers (`03`, `09`, `10`, `26`) or namespace handlers + (`87/36`, `87/67`) without a real provider design. The request encodings and + async wait-node semantics differ. +- These calls share state requirements with `112` Clear Lock Wait Node: pending + lock allocation, async wait-node lifetime, and correct completion-code + mapping. + +Next patch number should be `0259`. diff --git a/TODO.md b/TODO.md index 90aef95..57ba05c 100644 --- a/TODO.md +++ b/TODO.md @@ -1857,3 +1857,29 @@ Follow-up: planned 4.x endpoint after Clear Lock Wait Node. Keep active fall-through handlers intact when shared logic is intentional, and add only adjacent per-case Request/Response notes for documentation-only patches. + +### Async synchronization direct stubs 105, 107, 108, 109 + +Current status: + +- Patch `0258` continues NDK-first after Clear Lock Wait Node with the + missing NetWare-3.x/4.x direct asynchronous synchronization endpoints in + `src/nwconn.c`: + - `105` / wire `0x69` Log File (old) + - `107` / wire `0x6b` Log Logical Record + - `108` / wire `0x6c` Lock Logical Record Set + - `109` / wire `0x6d` Log Physical Record +- They are added only as disabled source stubs because the existing old + handlers (`03`, `09`, `10`, `26`) and namespace handlers (`87/36`, `87/67`) + are different request encodings and do not implement the async-capable direct + 105/107/108/109 contracts. +- Runtime behavior is unchanged. Do not fake success for these endpoints from + the existing synchronous log/lock tables; they need real async WaitNode + ownership shared with `112` Clear Lock Wait Node. + +Follow-up: + +- Continue NDK-first with the next documented NetWare 1.x/2.x/3.x endpoint or + planned 4.x endpoint after the async synchronization group. Keep active + fall-through handlers intact when shared logic is intentional, and add only + adjacent per-case Request/Response notes for documentation-only patches. diff --git a/src/nwconn.c b/src/nwconn.c index 61a7008..611fbde 100644 --- a/src/nwconn.c +++ b/src/nwconn.c @@ -7665,6 +7665,76 @@ static int handle_ncp_serv(void) } break; +#if 0 + case 0x69 : { /* SDK 105 / wire 0x69 Log File (old). + * Source outcome: no active direct case exists. The + * old SDK 03 Log File and namespace SDK 87/36 Log File + * paths are separate compatibility encodings and must not + * be treated as proof that direct 105 is implemented. + * NetWare scope: 3.x/4.x compatibility endpoint. + * Request: FunctionCode=105, DirectoryHandle, LockFlag, + * LockTimeout word Hi-Lo, FileNameLen, FileName. + * Response: no payload; Completion reports success, + * ERR_LOCK_WAITING, No Open Privileges, Server Out Of + * Memory, or Lock Error. + * Future owner: filesystem/lock provider with real + * asynchronous WaitNode support for pending locks. + */ + completition = 0xfb; + } + break; + + case 0x6b : { /* SDK 107 / wire 0x6b Log Logical Record. + * Source outcome: no active direct case exists. The old + * SDK 09 Log Logical Record is implemented through the + * old direct layout and does not cover the async-capable + * SDK 107 layout. + * NetWare scope: 3.x/4.x compatibility endpoint. + * Request: FunctionCode=107, LockFlag, LockTimeout word + * Hi-Lo, SynchNameLen, SynchName. + * Response: no payload; Completion reports success, + * Lock Waiting Error, Server Out Of Memory, or Lock Error. + * Future owner: logical-record lock provider with real + * async wait-node lifetime. + */ + completition = 0xfb; + } + break; + + case 0x6c : { /* SDK 108 / wire 0x6c Lock Logical Record Set. + * Source outcome: no active direct case exists. The old + * SDK 10 Lock Logical Record Set currently remains a + * separate old-layout handler. + * NetWare scope: 3.x/4.x compatibility endpoint. + * Request: FunctionCode=108, LockFlag, LockTimeout word + * Hi-Lo. + * Response: no payload; Completion reports success, + * ERR_LOCK_WAITING, or Lock Error. + * Future owner: logical-record set lock provider. + */ + completition = 0xfb; + } + break; + + case 0x6d : { /* SDK 109 / wire 0x6d Log Physical Record. + * Source outcome: no active direct case exists. The old + * SDK 26 Log Physical Record and namespace SDK 87/67 + * Log Physical Record use different request encodings. + * NetWare scope: 3.x/4.x compatibility endpoint. + * Request: FunctionCode=109, LockFlag, NWFileHandle[6], + * LockAreaStartOffset long Hi-Lo, LockAreaLen long Hi-Lo, + * LockTimeout word Hi-Lo. + * Response: no payload; Completion reports success, + * ERR_LOCK_WAITING, Invalid File Handle, Server Out Of + * Memory, Lock Collision, or Lock Error. + * Future owner: physical-record lock provider with real + * async wait-node lifetime. + */ + completition = 0xfb; + } + break; +#endif + case 0x68 : { /* NDS NCP / NDS Fragger protocol. */ #if MARS_NWE_4 /*