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.
161 lines
4.3 KiB
161 lines
4.3 KiB
/***************************************************************************
|
|
Name : SENDFR.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"
|
|
|
|
#include "psslog.h"
|
|
#define FILE_ID FILE_ID_SENDFR
|
|
#include "pssframe.h"
|
|
|
|
VOID BCtoNSFCSIDIS(PThrdGlbl pTG, NPRFS npfs, NPBC npbc, NPLLPARAMS npll)
|
|
{
|
|
// Use bigger buf. Avoid truncating Id before stripping alphas
|
|
char szCSI[MAXTOTALIDLEN + 2];
|
|
|
|
ZeroRFS(pTG, npfs);
|
|
|
|
strcpy (szCSI, pTG->LocalID);
|
|
if(_fstrlen(szCSI))
|
|
{
|
|
PSSLogEntry(PSS_MSG, 1, "CSI is \"%s\"", szCSI);
|
|
CreateIDFrame(pTG, ifrCSI, npfs, szCSI);
|
|
}
|
|
|
|
CreateDISorDTC(pTG, ifrDIS, npfs, &npbc->Fax, npll);
|
|
}
|
|
|
|
void CreateIDFrame(PThrdGlbl pTG, IFR ifr, NPRFS npfs, LPSTR szId)
|
|
{
|
|
|
|
BYTE szTemp[IDFIFSIZE+2];
|
|
NPFR npfr;
|
|
|
|
DEBUG_FUNCTION_NAME(("CreateIDFrame"));
|
|
|
|
npfr = (NPFR) fsFreePtr(pTG, npfs);
|
|
if( fsFreeSpace(pTG, npfs) <= (sizeof(FRBASE)+IDFIFSIZE) ||
|
|
npfs->uNumFrames >= MAXFRAMES)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_fmemcpy(szTemp, szId, IDFIFSIZE);
|
|
szTemp[IDFIFSIZE] = 0;
|
|
|
|
DebugPrintEx(DEBUG_MSG,"Got<%s> Sent<%s>", (LPSTR)szId, (LPSTR)szTemp);
|
|
|
|
if(_fstrlen(szTemp))
|
|
{
|
|
CreateStupidReversedFIFs(pTG, npfr->fif, szTemp);
|
|
|
|
npfr->ifr = ifr;
|
|
npfr->cb = IDFIFSIZE;
|
|
npfs->rglpfr[npfs->uNumFrames++] = npfr;
|
|
npfs->uFreeSpaceOff += IDFIFSIZE+sizeof(FRBASE);
|
|
}
|
|
else
|
|
{
|
|
DebugPrintEx(DEBUG_WRN, "ORIGINAL ID is EMPTY. Not sending");
|
|
}
|
|
}
|
|
|
|
void CreateDISorDTC
|
|
(
|
|
PThrdGlbl pTG,
|
|
IFR ifr,
|
|
NPRFS npfs,
|
|
NPBCFAX npbcFax,
|
|
NPLLPARAMS npll
|
|
)
|
|
{
|
|
USHORT uLen;
|
|
NPFR npfr;
|
|
|
|
if( fsFreeSpace(pTG, npfs) <= (sizeof(FRBASE)+sizeof(DIS)) ||
|
|
npfs->uNumFrames >= MAXFRAMES)
|
|
{
|
|
return;
|
|
}
|
|
npfr = (NPFR) fsFreePtr(pTG, npfs);
|
|
|
|
uLen = SetupDISorDCSorDTC(pTG, (NPDIS)npfr->fif, npbcFax, npll);
|
|
|
|
npfr->ifr = ifr;
|
|
npfr->cb = (BYTE) uLen;
|
|
npfs->rglpfr[npfs->uNumFrames++] = npfr;
|
|
npfs->uFreeSpaceOff += uLen+sizeof(FRBASE);
|
|
}
|
|
|
|
|
|
VOID CreateNSSTSIDCS(PThrdGlbl pTG, NPPROT npProt, NPRFS npfs)
|
|
{
|
|
// Use bigger buf. Avoid truncating Id before stripping alphas
|
|
char szTSI[MAXTOTALIDLEN + 2];
|
|
|
|
ZeroRFS(pTG, npfs);
|
|
|
|
strcpy (szTSI, pTG->LocalID);
|
|
if(_fstrlen(szTSI))
|
|
{
|
|
PSSLogEntry(PSS_MSG, 1, "TSI is \"%s\"", szTSI);
|
|
CreateIDFrame(pTG, ifrTSI, npfs, szTSI);
|
|
}
|
|
|
|
CreateDCS(pTG, npfs, &(npProt->SendParams.Fax), &npProt->llNegot);
|
|
}
|
|
|
|
void CreateDCS(PThrdGlbl pTG, NPRFS npfs, NPBCFAX npbcFax, NPLLPARAMS npll)
|
|
{
|
|
USHORT uLen;
|
|
NPFR npfr;
|
|
|
|
if( fsFreeSpace(pTG, npfs) <= (sizeof(FRBASE)+sizeof(DIS)) ||
|
|
npfs->uNumFrames >= MAXFRAMES)
|
|
{
|
|
return;
|
|
}
|
|
npfr = (NPFR) fsFreePtr(pTG, npfs);
|
|
|
|
npbcFax->fPublicPoll = 0;
|
|
// the G3Poll bit *has* to be 0 in DCS
|
|
// else the OMNIFAX G77 and GT croak
|
|
// the PWD/SEP/SUB bits *have* to be 0 in DCS
|
|
// Baud rate, ECM and ECM frame size according to lowlevel negotiation
|
|
// everything else according to high level negotiation
|
|
|
|
uLen = SetupDISorDCSorDTC( pTG,
|
|
(NPDIS)npfr->fif,
|
|
npbcFax,
|
|
npll);
|
|
|
|
// If DCS is longer than the recvd DIS truncate the DCS to the same
|
|
// length as the DIS. (It should never be more than 1byte longer --
|
|
// because of the extra 0).
|
|
|
|
if(pTG->ProtInst.uRemoteDISlen && (pTG->ProtInst.uRemoteDISlen < uLen))
|
|
uLen = pTG->ProtInst.uRemoteDISlen;
|
|
|
|
npfr->ifr = ifrDCS;
|
|
npfr->cb = (BYTE) uLen;
|
|
npfs->rglpfr[npfs->uNumFrames++] = npfr;
|
|
npfs->uFreeSpaceOff += uLen+sizeof(FRBASE);
|
|
|
|
PSSLogEntry(PSS_MSG, 1, "DCS Composed as follows:");
|
|
LogClass1DCSDetails(pTG, (NPDIS)npfr->fif);
|
|
}
|