bool Command::Execute( void ) { switch( mCmdID ) { case kCmdAssign : return DoAssign(); case kCmdClose : return DoCloseCursor(); case kCmdExec : return DoExec(); case kCmdFetch : return DoFetch(); case kCmdGoIf : return DoGoIf(); case kCmdGoIfNot : return DoGoIfNot(); case kCmdOpen : return DoOpenCursor(); case kCmdParam : return DoReadParam(); case kCmdPrint : return DoPrint(); case kCmdReset : return mpVM->mVariables[ mObject ]->mIsNULL = true; case kCmdReturn : return DoReturn(); case kCmdSelect : return DoSelect(); case kCmdGo : mpVM->mPos = mParam.ToInt(); case kCmdNope : return true; default:; } return false; }
IPullSocket::EnFetchResult CTcpPullClient::Fetch(CONNID dwConnID, BYTE* pBuffer, int iLength) { ASSERT(pBuffer != nullptr && iLength > 0); if(m_iTotalLength >= iLength) { DoFetch(pBuffer, iLength); m_iTotalLength -= iLength; return IPullSocket::FR_OK; } return IPullSocket::FR_LENGTH_TOO_LONG; }
/* * Determine which clients (if any) have sent data to the server and handle it * as required. */ void HandleClientInput(__pmFdSet *fdsPtr) { int sts; int i; __pmPDU *pb; __pmPDUHdr *php; ClientInfo *cp; for (i = 0; i < nClients; i++) { int pinpdu; if (!client[i].status.connected || !__pmFD_ISSET(client[i].fd, fdsPtr)) continue; cp = &client[i]; this_client_id = i; pinpdu = sts = __pmGetPDU(cp->fd, LIMIT_SIZE, _pmcd_timeout, &pb); if (sts > 0) { pmcd_trace(TR_RECV_PDU, cp->fd, sts, (int)((__psint_t)pb & 0xffffffff)); } else { CleanupClient(cp, sts); continue; } php = (__pmPDUHdr *)pb; if (__pmVersionIPC(cp->fd) == UNKNOWN_VERSION && php->type != PDU_CREDS) { /* old V1 client protocol, no longer supported */ sts = PM_ERR_IPC; CleanupClient(cp, sts); __pmUnpinPDUBuf(pb); continue; } if (pmDebug & DBG_TRACE_APPL0) ShowClients(stderr); switch (php->type) { case PDU_PROFILE: sts = (cp->denyOps & PMCD_OP_FETCH) ? PM_ERR_PERMISSION : DoProfile(cp, pb); break; case PDU_FETCH: sts = (cp->denyOps & PMCD_OP_FETCH) ? PM_ERR_PERMISSION : DoFetch(cp, pb); break; case PDU_INSTANCE_REQ: sts = (cp->denyOps & PMCD_OP_FETCH) ? PM_ERR_PERMISSION : DoInstance(cp, pb); break; case PDU_DESC_REQ: sts = (cp->denyOps & PMCD_OP_FETCH) ? PM_ERR_PERMISSION : DoDesc(cp, pb); break; case PDU_TEXT_REQ: sts = (cp->denyOps & PMCD_OP_FETCH) ? PM_ERR_PERMISSION : DoText(cp, pb); break; case PDU_RESULT: sts = (cp->denyOps & PMCD_OP_STORE) ? PM_ERR_PERMISSION : DoStore(cp, pb); break; case PDU_PMNS_IDS: sts = (cp->denyOps & PMCD_OP_FETCH) ? PM_ERR_PERMISSION : DoPMNSIDs(cp, pb); break; case PDU_PMNS_NAMES: sts = (cp->denyOps & PMCD_OP_FETCH) ? PM_ERR_PERMISSION : DoPMNSNames(cp, pb); break; case PDU_PMNS_CHILD: sts = (cp->denyOps & PMCD_OP_FETCH) ? PM_ERR_PERMISSION : DoPMNSChild(cp, pb); break; case PDU_PMNS_TRAVERSE: sts = (cp->denyOps & PMCD_OP_FETCH) ? PM_ERR_PERMISSION : DoPMNSTraverse(cp, pb); break; case PDU_CREDS: sts = DoCreds(cp, pb); break; default: sts = PM_ERR_IPC; } if (sts < 0) { if (pmDebug & DBG_TRACE_APPL0) fprintf(stderr, "PDU: %s client[%d]: %s\n", __pmPDUTypeStr(php->type), i, pmErrStr(sts)); /* Make sure client still alive before sending. */ if (cp->status.connected) { pmcd_trace(TR_XMIT_PDU, cp->fd, PDU_ERROR, sts); sts = __pmSendError(cp->fd, FROM_ANON, sts); if (sts < 0) __pmNotifyErr(LOG_ERR, "HandleClientInput: " "error sending Error PDU to client[%d] %s\n", i, pmErrStr(sts)); } } if (pinpdu > 0) __pmUnpinPDUBuf(pb); } }