docs: document remaining queue service layouts

This commit is contained in:
Mario Fetka
2026-06-02 04:53:33 +00:00
parent bfb3545ec6
commit af8287ff85
2 changed files with 134 additions and 13 deletions

37
TODO.md
View File

@@ -606,13 +606,18 @@ Current status:
transposed set-member table; the WebSDK/include API shape matches the
existing ObjectName/OldPassword/NewPassword parser.
- Queue calls SDK `23/100` through SDK `23/108` and the paired newer
variants SDK `23/121`, `23/122`, `23/126`, `23/127`, and `23/128` were
compared against the NDK/Core-Protocols PDF and `nwqms.h`/WebSDK queue APIs.
- Queue calls SDK `23/100` through SDK `23/108`, queue-server and service
calls SDK `23/109` through SDK `23/115`, the old job-size call SDK `23/120`,
and the paired newer variants SDK `23/121` through SDK `23/129`, SDK
`23/131`, SDK `23/132`, and SDK `23/135` were compared against the
`nwqms.h` prototypes and extracted WebSDK queue pages.
`src/nwconn.c` performs required prehandling for queue path rewriting,
queue-job file creation, queue job entry file-handle insertion, and close/start
file association before forwarding to `src/nwbind.c`. The target handlers in
`nwbind.c` now carry the concrete request/reply layout notes.
`nwbind.c` now carry the concrete request/reply layout notes. The newer
queue job-control calls that document 32-bit job numbers are intentionally
noted where the current compatibility parser still consumes or emits old
16-bit job-number fields.
Follow-up:
@@ -636,13 +641,23 @@ Follow-up:
Bindery Object Password; it is a NetWare 2.x/3.x compatibility call and is
currently only a disabled documented stub.
- Verify the shared queue handlers for newer queue calls that currently consume
old 16-bit fields: SDK `23/122` / wire `0x7a`, SDK `23/126` / wire `0x7e`,
SDK `23/127` / wire `0x7f`, and SDK `23/128` / wire `0x80` document long or
Lo-Hi fields in the PDF, while the current compatibility parser often reuses
the old 16-bit layout.
- Audit the remaining forwarded `0x2222/23` queue and management subfunctions
in the files that actually handle them instead of treating the `nwconn.c`
forwarding points as complete local implementations.
old 16-bit fields: SDK `23/122` / wire `0x7a`, SDK `23/127` / wire `0x7f`,
SDK `23/128` / wire `0x80`, SDK `23/131` / wire `0x83`, SDK `23/132` / wire
`0x84`, and SDK `23/135` / wire `0x87` document long or Lo-Hi job-number
fields in the WebSDK/include material, while the current compatibility parser often reuses
the old 16-bit layout. SDK `23/126` / wire `0x7e` also documents a long
queue-status field but the shared parser consumes only one byte.
- Continue the `0x2222/23` audit with the remaining queue rights/status calls
not yet documented in `src/nwbind.c`: SDK `23/116` / wire `0x74` Change To
Client Rights (old), SDK `23/117` / wire `0x75` Restore Queue Server Rights,
SDK `23/118` / wire `0x76` Read Queue Server Current Status (old), SDK
`23/119` / wire `0x77` Set Queue Server Current Status, SDK `23/130` / wire
`0x82` Change Queue Job Position, SDK `23/133` / wire `0x85` Change To Client
Rights, SDK `23/134` / wire `0x86` Read Queue Server Current Status, and any
matching helper/prehandler paths.
- Audit the remaining forwarded `0x2222/23` management subfunctions in the files
that actually handle them instead of treating the `nwconn.c` forwarding points
as complete local implementations.
### Extended volume information field mapping

View File

@@ -2352,7 +2352,14 @@ static void handle_fxx(int gelen, int func)
break;
case 0x6f : { /* attach server to queue */
/* from pserver */
/*
* SDK 23/111 / wire 0x6f Attach Queue Server To Queue.
* Request payload after SubFunctionCode:
* long QueueID (Hi-Lo)
* Reply: no data.
* Parser comparison matches the documented queue-server
* attach layout.
*/
uint32 q_id = GET_BE32(rdata);
int result=nw_attach_server_to_queue(
act_c->object_id,
@@ -2365,7 +2372,14 @@ static void handle_fxx(int gelen, int func)
break;
case 0x70 : { /* detach server from queue */
/* from pserver */
/*
* SDK 23/112 / wire 0x70 Detach Queue Server From Queue.
* Request payload after SubFunctionCode:
* long QueueID (Hi-Lo)
* Reply: no data.
* Parser comparison matches the documented queue-server
* detach layout.
*/
uint32 q_id = GET_BE32(rdata);
int result=nw_detach_server_from_queue(
act_c->object_id,
@@ -2380,6 +2394,20 @@ static void handle_fxx(int gelen, int func)
case 0x78: /* Get Queue Job File Size (old) */
case 0x87: /* Get Queue Job File Size */
{
/*
* SDK 23/120 / wire 0x78 Get Queue Job File Size (old)
* and SDK 23/135 / wire 0x87 Get Queue Job File Size.
* Request payload after SubFunctionCode:
* long QueueID (Hi-Lo)
* word JobNumber (Hi-Lo) for old wire 0x78
* long JobNumber for newer wire 0x87
* Reply documented by the WebSDK queue pages:
* long QueueID, long JobNumber, long FileSize.
* Parser/reply comparison: both variants currently consume
* a 16-bit JobNumber. The old reply returns a 16-bit
* JobNumber, and the newer reply pads that 16-bit value to
* four bytes instead of serializing a true long.
*/
uint32 q_id = GET_BE32(rdata);
uint32 job_id = (ufunc==0x78)
? GET_BE16(rdata+4)
@@ -2405,6 +2433,19 @@ static void handle_fxx(int gelen, int func)
case 0x71 : /* service queue job old */
case 0x7c : { /* service queue job */
/*
* SDK 23/113 / wire 0x71 Service Queue Job (old) and
* SDK 23/124 / wire 0x7c Service Queue Job.
* Request payload after SubFunctionCode:
* long QueueID (Hi-Lo)
* word TargetServiceType (Hi-Lo)
* Reply: QueueJobStruct, old 54-byte fixed reply for wire
* 0x71 and newer reserved-prefix/NWQueueJobStruct reply for
* wire 0x7c, including the opened job file handle.
* Parser comparison matches the common QueueID/type request
* header and delegates the variant reply shape to the queue
* backend helper.
*/
uint32 q_id = GET_BE32(rdata);
int type = GET_BE16(rdata+4);
int result=nw_service_queue_job(
@@ -2423,6 +2464,18 @@ static void handle_fxx(int gelen, int func)
case 0x6D: /* Change Queue Job Entry old */
case 0x7B: /* Change Queue Job Entry */
{
/*
* SDK 23/109 / wire 0x6d Change Queue Job Entry (old) and
* SDK 23/123 / wire 0x7b Change Queue Job Entry.
* Request payload after SubFunctionCode:
* long QueueID (Hi-Lo)
* QueueJobStruct, 256 bytes for old wire 0x6d and 280
* bytes for newer wire 0x7b.
* Reply: no data.
* Parser comparison matches the documented QueueID plus
* variant job-structure layout and delegates the structure
* copy to the queue backend helper.
*/
uint32 q_id = GET_BE32(rdata);
int result = nw_change_queue_job_entry(act_c->object_id,
q_id, rdata+4,
@@ -2434,6 +2487,21 @@ static void handle_fxx(int gelen, int func)
#endif
case 0x7d : { /* Read Queue Current Status, new */
/*
* SDK 23/125 / wire 0x7d Read Queue Current Status.
* Request payload after SubFunctionCode:
* long QueueID (Hi-Lo)
* Reply:
* long QueueID (Hi-Lo)
* long QueueStatus
* long CurrentEntries
* long CurrentServers
* long ServerIDList[CurrentServers] (Hi-Lo)
* long ServerStationList[CurrentServers]
* Parser/reply comparison matches the documented new
* queue-status layout; scalar status/count/station fields use
* the existing 32-bit mars_nwe queue byte-order convention.
*/
struct XDATA {
uint8 id[4]; /* queue id */
uint8 status[4]; /* &1 no station allowed */
@@ -2473,6 +2541,19 @@ static void handle_fxx(int gelen, int func)
} break;
case 0x81 : { /* Get Queue Job List */
/*
* SDK 23/129 / wire 0x81 Get Queue Job List.
* Request payload after SubFunctionCode:
* long QueueID (Hi-Lo)
* long QueueStartPosition
* Reply:
* long TotalQueueJobs
* long ReplyQueueJobNumbers
* long JobNumberList[ReplyQueueJobNumbers]
* Parser comparison matches the documented request header
* and delegates the paged long-list reply to the queue backend
* helper.
*/
uint32 q_id = GET_BE32(rdata);
uint32 offset = GET_BE32(rdata+4);
#if 0
@@ -2491,6 +2572,18 @@ static void handle_fxx(int gelen, int func)
case 0x72: /* finish servicing queue job (old)*/
case 0x83: { /* finish servicing queue job */
/*
* SDK 23/114 / wire 0x72 Finish Servicing Queue Job (old)
* and SDK 23/131 / wire 0x83 Finish Servicing Queue Job.
* Request payload after SubFunctionCode:
* long QueueID (Hi-Lo)
* word JobNumber (Hi-Lo) for old wire 0x72
* long JobNumber plus long ChargeInfo for newer wire 0x83
* Reply: no data.
* Parser comparison: both variants currently consume a
* 16-bit JobNumber, and the newer ChargeInfo field is
* ignored.
*/
uint32 q_id = GET_BE32(rdata);
uint32 job_id = GET_BE16(rdata+4);
#if 0
@@ -2506,6 +2599,19 @@ static void handle_fxx(int gelen, int func)
case 0x73: /* abort servicing queue job (old) */
case 0x84: { /* abort servicing queue job */
/*
* SDK 23/115 / wire 0x73 Abort Servicing Queue Job (old)
* and SDK 23/132 / wire 0x84 Abort Servicing Queue Job.
* Request payload after SubFunctionCode:
* long QueueID (Hi-Lo)
* word JobNumber (Hi-Lo) for old wire 0x73
* long JobNumber for newer wire 0x84
* Reply: no data for NCP 23; DOS-shell INT 21h wrappers
* expose a two-byte zero reply length.
* Parser/reply comparison: both variants currently consume
* a 16-bit JobNumber, and the success path emits a two-byte
* zero reply for compatibility with older clients.
*/
uint32 q_id = GET_BE32(rdata);
uint32 job_id = GET_BE16(rdata+4);
int result = nw_finish_abort_queue_job(1,