#define USE_DEBUG_CONTEXT DEBUG_CONTEXT_T30_MAIN #include "prep.h" #include "t30.h" #include "efaxcb.h" #include "debug.h" #include "glbproto.h" #include "psslog.h" #define FILE_ID FILE_ID_T30MAIN BOOL T30Cl1Rx(PThrdGlbl pTG) { USHORT uRet1; BOOL RetCode = FALSE; DEBUG_FUNCTION_NAME(_T("T30Cl1Rx - Answering")); PSSLogEntry(PSS_MSG, 0, "Phase A - Call establishment"); SignalStatusChange(pTG, FS_ANSWERED); // first get SEND_CAPS (before answering) if (!ProtGetBC(pTG, SEND_CAPS)) { uRet1 = T30_CALLFAIL; goto done; } PSSLogEntry(PSS_MSG, 1, "Answering..."); if (NCULink(pTG, NCULINK_RX) != CONNECT_OK) { uRet1 = T30_ANSWERFAIL; goto done; } // Protocol Dump RestartDump(pTG); uRet1 = T30MainBody(pTG, FALSE); // t-jonb: If we've already called PutRecvBuf(RECV_STARTPAGE), but not // PutRecvBuf(RECV_ENDPAGE / DOC), then InFileHandleNeedsBeClosed==1, meaning // there's a .RX file that hasn't been copied to the .TIF file. Since the // call was disconnected, there will be no chance to send RTN. Therefore, we call // PutRecvBuf(RECV_ENDDOC_FORCESAVE) to keep the partial page and tell // rx_thrd to terminate. if (uRet1==T30_CALLFAIL && pTG->InFileHandleNeedsBeClosed) { if (! FlushFileBuffers (pTG->InFileHandle ) ) { DebugPrintEx(DEBUG_WRN, "FlushFileBuffers FAILED LE=%lx", GetLastError()); // Continue to save what we have } pTG->BytesIn = pTG->BytesInNotFlushed; ICommPutRecvBuf(pTG, NULL, RECV_ENDDOC_FORCESAVE); } // Protocol Dump PrintDump(pTG); done: if (uRet1==T30_CALLDONE) { SignalStatusChange(pTG, FS_COMPLETED); RetCode = TRUE; DebugPrintEx(DEBUG_MSG,"SUCCESSFUL RECV"); } else if (pTG->StatusId == FS_NOT_FAX_CALL) { RetCode = FALSE; DebugPrintEx( DEBUG_ERR, "DATA CALL attempt HANDOVER (0x%04x)", uRet1); } else { if (!pTG->fFatalErrorWasSignaled) { pTG->fFatalErrorWasSignaled = 1; SignalStatusChange(pTG, FS_FATAL_ERROR); } RetCode = FALSE; DebugPrintEx( DEBUG_ERR, "FAILED RECV (0x%04x)", uRet1); } // Dont do this!! The Modem driver queues up commands for later execution, so the // DCN we just sent is probably in the queue. Doing a sync here causes that send // to be aborted, so the recvr never gets a DCN and thinks teh recv failed. This // is bug#6803 NCULink(pTG, NCULINK_HANGUP); return (RetCode); } BOOL T30Cl1Tx(PThrdGlbl pTG,LPSTR szPhone) { USHORT uRet1; BOOL RetCode = FALSE; DEBUG_FUNCTION_NAME(_T("T30Cl1Tx")); PSSLogEntry(PSS_MSG, 0, "Phase A - Call establishment"); DebugPrintEx(DEBUG_MSG,"Going to change the state to FS_DIALING"); SignalStatusChange(pTG, FS_DIALING); if( pTG->fAbortRequested) { uRet1 = T30_CALLFAIL; goto done; } if (szPhone) { PSSLogEntry(PSS_MSG, 1, "Dialing..."); DebugPrintEx(DEBUG_MSG, "Enter into NCUDial"); if (NCUDial(pTG, szPhone) != CONNECT_OK) { DebugPrintEx(DEBUG_ERR,"Problem at NCUDial. Jump to done"); uRet1 = T30_DIALFAIL; goto done; } } // Protocol Dump RestartDump(pTG); // Reset the offsets DebugPrintEx(DEBUG_MSG,"Enter to main body"); uRet1 = T30MainBody(pTG, TRUE); // Protocol Dump PrintDump(pTG); done: if (uRet1==T30_CALLDONE) { SignalStatusChange(pTG, FS_COMPLETED); RetCode = TRUE; DebugPrintEx(DEBUG_MSG,"SUCCESSFUL SEND"); } else { if (!pTG->fFatalErrorWasSignaled) { pTG->fFatalErrorWasSignaled = 1; SignalStatusChange(pTG, FS_FATAL_ERROR); } RetCode = FALSE; DebugPrintEx( DEBUG_ERR, "FAILED SEND (0x%04x)", uRet1); } // Dont do this!! The Modem driver queues up commands for later execution, so the // DCN we just sent is probably in the queue. Doing a sync here causes that send // to be aborted, so the recvr never gets a DCN and thinks teh recv failed. This // is bug#6803 DebugPrintEx(DEBUG_MSG,"Calling to NCULink to do NCULINK_HANGUP"); NCULink(pTG, NCULINK_HANGUP); return (RetCode); }