void CTCPIPSystemSrvr::send_error(short error, short error_detail, const CEE_handle_def *call_id_)
{
	long tag;
	short fnum;
	_cc_status cc;
	short wcount;
	long wtimeout = 10 * 100;

	if (m_nSocketFnum < 0)
		goto bailout;
	m_rhdr.error = error;
	m_rhdr.error_detail = error_detail;
	m_rhdr.hdr_type = SRVR_TRANSPORT_ERROR;
	memcpy(m_IObuffer,&m_rhdr,sizeof(m_rhdr));
	if (m_rhdr.swap == SWAP_YES)
		HEADER_swap((HEADER*)m_IObuffer);
	if (send_nw2(m_nSocketFnum, m_IObuffer, sizeof(HEADER), 0, 1) <0)
		goto bailout;
	fnum = m_nSocketFnum;
	cc = AWAITIOX(&fnum,,&wcount, &tag, wtimeout);
	if (!_status_eq(cc))
		goto bailout;
bailout:
	DEALLOCATE_TEMP_MEMORY(&m_call_id);
}
short int CTCPIPSystemSrvr::getMsgHeader(char* buf, short int cread, short int bufSize, short int headerSize, long wtimeout)
{
	long tag;
	_cc_status cc;
	short int error = 0;
	short int fnum;
	short int wcount;
	char* pbuf;
	short int inp_size;

	short int already_read = cread;

	while (already_read < headerSize )
	{
		pbuf = buf + already_read;
		inp_size = bufSize - already_read;

		if (recv_nw(m_nSocketFnum, pbuf, inp_size, 0, 0) < 0)
		{
			SET_ERROR((long)0, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "getMsgHeader", O_DO_WRITE_READ, F_RECV, errno, 0);
			return -1;
		}
		fnum = m_nSocketFnum;
		cc = AWAITIOX(&fnum,,&wcount, &tag, wtimeout);
		if (!_status_eq(cc))
		{
			FILE_GETINFO_(fnum,&error);
			SET_ERROR((long)0, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "getMsgHeader", O_DO_WRITE_READ, F_AWAITIOX, error, cc);
			return -1;
		}
		already_read += wcount;
	}
	return already_read;
}
bool CTCPIPSystemSrvr::do_read(bool bfirstblock, HEADER*& hdr, char*& buffer, short& bufcount, long timeout)
{
	long tag;
	_cc_status cc;
	short error = 0;
	short fnum;
	short wcount;
	long wtimeout = (timeout == 0)? -1: timeout * 100;
	wtimeout = -1;
	short sizeof_header = sizeof(HEADER);

	if (m_nSocketFnum < 0)
	{
		SET_ERROR((long)0, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "do_read", O_DO_WRITE_READ, F_CHECKSOCKET, m_nSocketFnum, 0);
		return false;
	}

	if (bfirstblock)
	{
		if (bufcount < sizeof_header)
		{
			bufcount = getMsgHeader(m_IObuffer, bufcount, TCPI_SRVR_RECV_BUFFER, sizeof_header, wtimeout);
			if (bufcount == -1)
				return false;
		}
		wcount = bufcount;
		bufcount = wcount - sizeof(HEADER);
		buffer = m_IObuffer + sizeof(HEADER);
		hdr = (HEADER*)m_IObuffer;
	}
	else
	{
		if (recv_nw(m_nSocketFnum, m_IObuffer, TCPI_SRVR_RECV_BUFFER, 0, 0) < 0)
		{
			SET_ERROR((long)0, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "do_read", O_DO_WRITE_READ, F_RECV, errno, 0);
			return false;
		}
		fnum = m_nSocketFnum;
		cc = AWAITIOX(&fnum,,&wcount, &tag, wtimeout);
		if (!_status_eq(cc))
		{
			FILE_GETINFO_(fnum,&error);
			SET_ERROR((long)0, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "do_read", O_DO_WRITE_READ, F_AWAITIOX, error, cc);
			return false;
		}
		bufcount = wcount;
		buffer = m_IObuffer; 
	}
	return true;
}
bool CTCPIPSystemSrvr::do_write(char* buffer, short bufcount, long timeout)
{
	int count = bufcount;
	char* bp = 0;
	long tag;
	_cc_status cc;
	short error = 0;
	short fnum;
	short wcount;
	long wtimeout = (timeout == 0)? -1: timeout * 100;
	wtimeout = -1;

	if (m_nSocketFnum < 0)
	{
		SET_ERROR((long)0, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "do_write", O_DO_WRITE_READ, F_CHECKSOCKET, m_nSocketFnum, 0);
		return false;
	}

	for (bp = &buffer[0]; count > 0; count -= cc)
	{
		if (send_nw2(m_nSocketFnum, bp, count, 0, 0) < 0)
		{
			SET_ERROR((long)0, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "do_write", O_DO_WRITE_READ, F_SEND, errno, 0);
			return false;
		}
		fnum = m_nSocketFnum;
		cc = AWAITIOX(&fnum,,&wcount, &tag, wtimeout);
		if (!_status_eq(cc))
		{
			FILE_GETINFO_(fnum,&error);
			SET_ERROR((long)0, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "do_write", O_DO_WRITE_READ, F_AWAITIOX, error, cc);
			return false;
		}
		cc = socket_get_len(m_nSocketFnum);
		if (cc < 0)
		{
			SET_ERROR((long)0, NSK, TCPIP, UNKNOWN_API, E_TCPIPROCESS, "do_write", O_DO_WRITE_READ, F_SOCKET_GET_LEN, error, cc);
			return false;
		}
		bp += cc;
	}
	return true;
}
GuaReceiveFastStart::GuaReceiveFastStart()
{
  _bcc_status status;
  Lng32 bufferAddr;
  readUpdate_ = FALSE;
  awaitiox_ = FALSE;
  replyx_ = FALSE;
  awaitioxError_ = 0;
  fileGetReceiveInfo_ = FALSE;
  zsys_ddl_smsg_open_reply_def openReply;
  //openError_ -- not altered
  openError_ = BFILE_OPEN_((char *)"$RECEIVE", 8, &receiveFile_, 0, 0, 1, 4000, 0);
  //open_ -- not altered
  open_ = TRUE;
  if (openError_ == 0)
  {
    status = BSETMODE(receiveFile_, 74, -1);

    if (_status_ne(status))
      {
	// this is bad
	ABORT("Internal error on setmode($receive)");
      }
    // readUpdateStatus_ -- not altered
    readUpdateStatus_ = BREADUPDATEX(receiveFile_, (char *)&readBuffer_[0], 80);
    // readUpdate_ -- altered
    readUpdate_ = TRUE;
    // bufferData_ -- altered
    bufferData_ = NULL;
    if (_status_eq(readUpdateStatus_)) // Did not get an error on READUPDATEX
    {
      // awaitioxStatus_ -- not altered
      awaitioxStatus_ = BAWAITIOX(&receiveFile_,
					 (void **)&bufferAddr,
					 &awaitioxCountTransferred_,
					 (SB_Tag_Type *)&ioTag_,
					 100 * 60 *10); // 10 minutes
      // fileGetInfoError_ -- not altered
      fileGetInfoError_ = BFILE_GETINFO_(receiveFile_, &awaitioxError_);
      // awaitiox_ -- altered
      awaitiox_ = TRUE;
      if (fileGetInfoError_ == 0 && awaitioxError_ == 6)
      {
	fileGetReceiveInfoError_ = BFILE_GETRECEIVEINFO_((FS_Receiveinfo_Type *)&receiveInfo_);

	// fileGetReceiveInfo_ -- altered
	fileGetReceiveInfo_ = TRUE;
	if (fileGetReceiveInfoError_ == 0)
	{
	  openReply.z_msgnumber = ZSYS_VAL_SMSG_OPEN;
	  openReply.z_openid = 0; // GuaReceiveControlConnection id_ must be zero
	  // replyxstatus_ -- not altered
	  replyxstatus_ = BREPLYX((IpcMessageBufferPtr)&openReply,
	                                4,
					&replyxCountWritten_,
					receiveInfo_.replyTag_,
					GuaOK);
	  // replyx_ == altered
	  replyx_ = TRUE;
	}
      }
    }
  }
}