Add support for sending DSICommand requests.

This commit is contained in:
Stephen Heumann 2017-03-22 20:13:20 -05:00
parent 83c702fcbb
commit 275f3456ba
3 changed files with 30 additions and 4 deletions

View File

@ -138,7 +138,15 @@ void DoSPCloseSession(Session *sess, ASPCloseSessionRec *commandRec) {
}
void DoSPCommand(Session *sess, ASPCommandRec *commandRec) {
// TODO
sess->request.flags = DSI_REQUEST;
sess->request.command = DSICommand;
sess->request.requestID = htons(sess->nextRequestID++);
sess->request.writeOffset = 0;
sess->request.totalDataLength = htonl(commandRec->cmdBlkLength);
sess->replyBuf = (void*)commandRec->replyBufferAddr;
sess->replyBufLen = commandRec->replyBufferLen;
SendDSIMessage(sess, &sess->request, (void*)commandRec->cmdBlkAddr);
}
void DoSPWrite(Session *sess, ASPWriteRec *commandRec) {
@ -154,7 +162,7 @@ void FinishASPCommand(Session *sess) {
// The IIgs ASP interfaces can't represent lengths over 64k.
// This should be detected as an error earlier, but let's make sure.
sess->spCommandRec->result = aspSizeErr;
return;
goto complete;
}
switch(sess->spCommandRec->command) {
@ -176,7 +184,8 @@ void FinishASPCommand(Session *sess) {
// TODO
break;
}
complete:
CompleteCommand(sess);
}
@ -196,5 +205,6 @@ void CompleteCommand(Session *sess) {
memset(sess, 0, sizeof(*sess));
} else {
sess->commandPending = FALSE;
InitReadTCP(sess, DSI_HEADER_SIZE, &sess->reply);
}
}

View File

@ -8,6 +8,7 @@
ASPGetStatusRec getStatusRec;
ASPOpenSessionRec openSessionRec;
ASPCommandRec commandRec;
ASPCloseSessionRec closeSessionRec;
Byte replyBuffer[1024];
@ -81,6 +82,21 @@ int main(int argc, char **argv)
if (openSessionRec.result)
goto error;
commandRec.async = AT_SYNC;
commandRec.command = aspCommandCommand;
commandRec.completionPtr = 0;
commandRec.refNum = openSessionRec.refNum;
// FIXME this sends meaningless garbage, not a real AFP request
commandRec.cmdBlkLength = 10;
commandRec.cmdBlkAddr = (LongWord)&openSessionRec;
commandRec.replyBufferLen = sizeof(replyBuffer);
commandRec.replyBufferAddr = (LongWord)&replyBuffer;
printf("Sending command...\n");
DispatchASPCommand((SPCommandRec *)&commandRec);
printf("result code = %04x, command result = %08lx\n",
commandRec.result, commandRec.cmdResult);
closeSessionRec.async = AT_SYNC;
closeSessionRec.command = aspCloseSessionCommand;
closeSessionRec.completionPtr = 0;

View File

@ -15,7 +15,7 @@ ntohs entry
htonl start
ntohl entry
lda 4,s
lda 4,s
xba
tax
lda 6,s