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