Leaked source code of windows server 2003
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

/***************************************************************************
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;
}
}