You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
4.2 KiB
134 lines
4.2 KiB
/***************************************************************************
|
|
Name : RECVFR.C
|
|
Comment :
|
|
Functions: (see Prototypes just below)
|
|
|
|
Copyright (c) 1993 Microsoft Corp.
|
|
|
|
Revision Log
|
|
Date Name Description
|
|
-------- ----- ---------------------------------------------------------
|
|
***************************************************************************/
|
|
#define USE_DEBUG_CONTEXT DEBUG_CONTEXT_T30_MAIN
|
|
|
|
#include "prep.h"
|
|
#include "efaxcb.h"
|
|
#include "protocol.h"
|
|
|
|
#include "glbproto.h"
|
|
|
|
void GotRecvFrames
|
|
(
|
|
PThrdGlbl pTG,
|
|
IFR ifr,
|
|
NPDIS npdis,
|
|
BCTYPE bctype,
|
|
NPBC npbc,
|
|
USHORT wBCSize,
|
|
NPLLPARAMS npll
|
|
)
|
|
{
|
|
DEBUG_FUNCTION_NAME(_T("GotRecvFrames"));
|
|
|
|
InitBC(npbc, wBCSize, bctype);
|
|
|
|
if(npdis)
|
|
{
|
|
// extract DIS caps into BC and LL
|
|
// Here we parse the DCS we got into npbc {= (NPBC)&pTG->ProtInst.RecvParams}
|
|
ParseDISorDCSorDTC(pTG, npdis, &(npbc->Fax), npll, (ifr==ifrNSS ? TRUE : FALSE));
|
|
}
|
|
}
|
|
|
|
BOOL AwaitSendParamsAndDoNegot(PThrdGlbl pTG)
|
|
{
|
|
// This does actual negotiation & gets SENDPARAMS. It could potentially
|
|
|
|
DEBUG_FUNCTION_NAME(_T("AwaitSendParamsAndDoNegot"));
|
|
|
|
if(!ProtGetBC(pTG, SEND_PARAMS))
|
|
{
|
|
DebugPrintEx(DEBUG_WRN,"ATTENTION: pTG->ProtInst.fAbort = TRUE");
|
|
pTG->ProtInst.fAbort = TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
// negotiate low-level params here. (a) because this is where
|
|
// high-level params are negotiated (b) because it's inefficient to
|
|
// do it on each DCS (c) because RTN breaks otherwise--see bug#731
|
|
|
|
// llRecvCaps and llSendParams are set only at startup
|
|
// SendParams are set in ProtGetBC just above
|
|
// llNegot is the return value. So this can be called
|
|
// only at the end of this function
|
|
|
|
// negot lowlevel params if we are sending and not polling
|
|
if(!pTG->ProtInst.fAbort && pTG->ProtInst.fSendParamsInited)
|
|
{
|
|
NegotiateLowLevelParams( pTG,
|
|
&pTG->ProtInst.llRecvCaps,
|
|
&pTG->ProtInst.llSendParams,
|
|
pTG->ProtInst.SendParams.Fax.AwRes,
|
|
pTG->ProtInst.SendParams.Fax.Encoding,
|
|
&pTG->ProtInst.llNegot);
|
|
|
|
pTG->ProtInst.fllNegotiated = TRUE;
|
|
|
|
// This chnages llNegot->Baud according to the MaxSpeed settings
|
|
EnforceMaxSpeed(pTG);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void GotRecvCaps(PThrdGlbl pTG)
|
|
{
|
|
DEBUG_FUNCTION_NAME(_T("GotRecvCaps"));
|
|
|
|
pTG->ProtInst.RemoteDIS.ECM = 0;
|
|
pTG->ProtInst.RemoteDIS.SmallFrame = 0;
|
|
|
|
GotRecvFrames( pTG,
|
|
ifrNSF,
|
|
(pTG->ProtInst.fRecvdDIS ? &pTG->ProtInst.RemoteDIS : NULL),
|
|
RECV_CAPS,
|
|
(NPBC)&pTG->ProtInst.RecvCaps,
|
|
sizeof(pTG->ProtInst.RecvCaps),
|
|
&pTG->ProtInst.llRecvCaps);
|
|
|
|
pTG->ProtInst.fRecvCapsGot = TRUE;
|
|
pTG->ProtInst.fllRecvCapsGot = TRUE;
|
|
|
|
// send off BC struct to higher level
|
|
if(!ICommRecvCaps(pTG, (LPBC)&pTG->ProtInst.RecvCaps))
|
|
{
|
|
DebugPrintEx(DEBUG_WRN,"ATTENTION:pTG->ProtInst.fAbort = TRUE");
|
|
pTG->ProtInst.fAbort = TRUE;
|
|
}
|
|
|
|
// This need to be moved into whatnext.NodeA so that we can set
|
|
// param to FALSE (no sleep) and do the stall thing
|
|
AwaitSendParamsAndDoNegot(pTG);
|
|
}
|
|
|
|
void GotRecvParams(PThrdGlbl pTG)
|
|
{
|
|
DEBUG_FUNCTION_NAME(_T("GotRecvParams"));
|
|
|
|
GotRecvFrames( pTG,
|
|
ifrNSS,
|
|
(pTG->ProtInst.fRecvdDCS ? (&pTG->ProtInst.RemoteDCS) : NULL),
|
|
RECV_PARAMS,
|
|
(NPBC)&pTG->ProtInst.RecvParams,
|
|
sizeof(pTG->ProtInst.RecvParams),
|
|
&pTG->ProtInst.llRecvParams);
|
|
|
|
pTG->ProtInst.fRecvParamsGot = TRUE;
|
|
pTG->ProtInst.fllRecvParamsGot = TRUE;
|
|
|
|
if(!ICommRecvParams(pTG, (LPBC)&pTG->ProtInst.RecvParams))
|
|
{
|
|
DebugPrintEx(DEBUG_WRN, "ATTENTION: pTG->ProtInst.fAbort = TRUE");
|
|
pTG->ProtInst.fAbort = TRUE;
|
|
}
|
|
}
|
|
|