void QmvHttp::readyRead() { #ifdef QMVHTTP_DEBUG qDebug("QmvHttp::readyRead"); #endif QByteArray s; s.resize( commandSocket->bytesAvailable() ); commandSocket->readBlock( s.data(), commandSocket->bytesAvailable() ); // still in response header if ( bytes_in == 0 && processGetResponse( &s ) < 0 ) return; emit data( s, operationInProgress() ); bytes_in += s.size(); if ( content_length >= 0 && bytes_in == content_length ) { // reset for next response bytes_in = 0; emit finished( operationInProgress() ); } }
CONDITION SRV_CGetRequest(DUL_ASSOCIATIONKEY ** association, DUL_ASSOCIATESERVICEPARAMETERS * params, MSG_C_GET_REQ * getRequest, MSG_C_GET_RESP * getResponse, SRV_C_GET_REQ_CALLBACK * getCallback, void *getCallbackCtx, CONDITION(*storageCallback) (), void *storageCallbackCtx, char *dirName) { DCM_OBJECT * commandObject; /* Handle for a command object */ CONDITION cond; /* Return value from function calls */ DUL_PRESENTATIONCONTEXT * presentationCtx, /* Presentation context for GET service */ *storePresentationCtx; /* for the arriving store request */ DUL_PRESENTATIONCONTEXTID ctxID; void *message; MSG_TYPE messageType; CTNBOOLEAN done = FALSE; U32 l; unsigned long responseCount = 0; MSG_C_STORE_REQ * storeRequest; void *ctx; char queryLevelString[48] = ""; /* Initialization for AIX compiler */ DCM_ELEMENT queryLevelElement = {DCM_IDQUERYLEVEL, DCM_CS, "", 1, sizeof(queryLevelString), NULL}; unsigned short command; CTNBOOLEAN cancelled = FALSE; MSG_C_CANCEL_REQ cancelRequest = {MSG_K_C_CANCEL_REQ, 0, 0, DCM_CMDDATANULL}; queryLevelElement.d.string = queryLevelString; if ((getCallback == NULL) || (storageCallback == NULL)) return COND_PushCondition(SRV_NOCALLBACK, SRV_Message(SRV_NOCALLBACK), "SRV_CGetRequest"); if (getRequest->type != MSG_K_C_GET_REQ) return COND_PushCondition(SRV_ILLEGALPARAMETER, SRV_Message(SRV_ILLEGALPARAMETER), "type", "GET Request", "SRV_CGetRequest"); if (getRequest->dataSetType == DCM_CMDDATANULL) return COND_PushCondition(SRV_ILLEGALPARAMETER, SRV_Message(SRV_ILLEGALPARAMETER), "dataSetType", "GET Request", "SRV_CGetRequest"); ctx = NULL; cond = DCM_GetElementValue(&getRequest->identifier, &queryLevelElement, &l, &ctx); if (cond != DCM_NORMAL) return COND_PushCondition(SRV_OBJECTACCESSFAILED, SRV_Message(SRV_OBJECTACCESSFAILED), "Query Identifier", "SRV_CGetRequest"); queryLevelString[l] = '\0'; if (queryLevelString[l - 1] == ' ') queryLevelString[l - 1] = '\0'; presentationCtx = SRVPRV_PresentationContext(params, getRequest->classUID); if (presentationCtx == NULL) return COND_PushCondition(SRV_NOSERVICEINASSOCIATION, SRV_Message(SRV_NOSERVICEINASSOCIATION), getRequest->classUID, "SRV_CGetRequest"); cond = MSG_BuildCommand(getRequest, &commandObject); if (cond != MSG_NORMAL) return COND_PushCondition(SRV_OBJECTBUILDFAILED, SRV_Message(SRV_OBJECTBUILDFAILED), "GET Request", "SRV_CGetRequest"); cond = SRV_SendCommand(association, presentationCtx, &commandObject); (void) DCM_CloseObject(&commandObject); if (cond != SRV_NORMAL) return COND_PushCondition(SRV_REQUESTFAILED, SRV_Message(SRV_REQUESTFAILED), "SRV_CGetRequest"); cond = SRV_SendDataSet(association, presentationCtx, &getRequest->identifier, NULL, NULL, 0); if (cond != SRV_NORMAL) return COND_PushCondition(SRV_REQUESTFAILED, SRV_Message(SRV_REQUESTFAILED), "SRV_CGetRequest"); while (!done) { /* do until there are no more pending requests */ cond = SRV_ReceiveCommand(association, params, DUL_BLOCK, 0, &ctxID, &command, &messageType, &message); if (cond != SRV_NORMAL) return COND_PushCondition(SRV_REQUESTFAILED, SRV_Message(SRV_REQUESTFAILED), "SRV_CGetRequest"); switch (messageType) { case MSG_K_C_GET_RESP: cond = processGetResponse(association, presentationCtx, dirName, getRequest, (MSG_C_GET_RESP *) message, queryLevelString, getCallback, getCallbackCtx, &done, &cancelled, getResponse, &responseCount); (void) MSG_Free(&message); if ((CTN_FATAL(cond)) || (CTN_ERROR(cond))) return cond; break; case MSG_K_C_STORE_REQ: storeRequest = (MSG_C_STORE_REQ *) message; storePresentationCtx = SRVPRV_PresentationContext(params, storeRequest->classUID); if (storePresentationCtx == NULL) return COND_PushCondition(SRV_PRESENTATIONCONTEXTERROR, SRV_Message(SRV_PRESENTATIONCONTEXTERROR), "SRV_CGetRequest"); cond = processStoreRequest(association, storePresentationCtx, storeRequest, storageCallback, storageCallbackCtx); if ((CTN_FATAL(cond)) || (CTN_ERROR(cond))) return cond; break; default: (void) MSG_Free(&message); return COND_PushCondition(SRV_UNEXPECTEDCOMMAND, SRV_Message(SRV_UNEXPECTEDCOMMAND), (int) command, "SRV_CGetRequest"); } } if (cancelled){ return SRV_OPERATIONCANCELLED; }else{ return SRV_NORMAL; } }