mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-11-26 16:49:18 +00:00
72 lines
2.2 KiB
C
72 lines
2.2 KiB
C
/*EASE$$$ READ ONLY COPY of file “newfind.c”
|
|
** 1.0 PWD 10/30/1989 Adding to EASE
|
|
** END EASE MODIFICATION HISTORY */
|
|
struct addrblock find_server( struct AddrBlock hint, /* last server we booted */
|
|
Str255 type, /* what to nbp for */
|
|
int timeout,/* how long, total, to look */
|
|
UserRecordRequest *requestInfo, /* to fill out req */
|
|
SktLsnGPtr SktGPtr)/* the socket listeners globals */
|
|
{
|
|
Boolean send_confirm = false; // send an nbpconfirm first (hint was valid)
|
|
register shakjhd *globals; // pointer to our struct if we have a lookup going on
|
|
EntityName curEntity; // for nbpextract
|
|
AddrBlock to; // for nbpextract
|
|
|
|
globals = SktGPtr->lookupBuffer; // dereference for speed and sanity
|
|
|
|
if (globals == NULL) {
|
|
|
|
// Allocate the buffer and set the flag that the lookup is done to indicate
|
|
// that we should start another one
|
|
globals = SktGPtr->lookupBuffer = (shakjhd *) NewPtr(sizeof(shakjhd));
|
|
if (globals == NULL) return MemError();
|
|
|
|
globals->lookup_done = true;
|
|
|
|
|
|
if (hint == 0) {
|
|
// build the guest booting lookup request
|
|
}
|
|
else if (hint == FF) {
|
|
// build the lookup from the pram id
|
|
}
|
|
else {
|
|
// send an nbp confirm to the hint with the id from pram.
|
|
//
|
|
send_confirm = true;
|
|
}
|
|
}
|
|
|
|
if (send_confirm) {
|
|
globals->error = PConfirmName(&(globals->myABRecord),false); // send synchronous confirm
|
|
};
|
|
|
|
// Now start the lookup to the server. We hang around one second the first time,
|
|
// later just checking the buffer and continuing.
|
|
|
|
if (globals->myABRecord.MPP.ioResult <= 0) { // if the call has completed
|
|
|
|
globals->error = NBPExtract(globals->nbpBuffer, // the lookup buffer
|
|
nbpStuff.myABRecord.NBPnumGotten, // number of valid buffer entries
|
|
1, // we only want one
|
|
&curEntity, // copy the object name here
|
|
&to); // copy the address here
|
|
|
|
if (globals->error == 0) {
|
|
globals->error = get_user_record(globals);
|
|
if () {
|
|
DisposPtr((Ptr)globals);
|
|
SktGPtr->lookupBuffer = NULL;
|
|
return true;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
else { // not found yet, start another lookup
|
|
// Start another lookup
|
|
};
|
|
};
|
|
|
|
|