bool Client::Post(const char* method, Value& params, Value& result) { log_trace(); gettimeofday( &startTime_, 0 ); result.SetInvalid(); PreserveReceiveBuffer(); ResetTransaction(); if (Connect(result) && GenerateRequest(method, params) && GenerateHeader()) { if (!WriteRequest(result)) { // retry the connection Close(); if (!Connect(result) || !WriteRequest(result)) { Reset(); return false; } } return true; } Reset(); return false; }
/*! * \brief Writes the data to the buffer * \param data The data to write. * \param maxSize The max size to write. */ qint64 File::writeData(const char *data, qint64 maxSize) { pendingWriteRequestsSize += maxSize; pendingWriteRequests.append(WriteRequest(pos(), QByteArray(data, maxSize))); return maxSize; }
INT PutFile(SOCKET sd, char *fileName) { INT status; INT fileSize; /* Send the the request to the server on socket sd */ printf("uploading %s...\n", fileName); strcpy_s(request.fileName, fileName); if ((fileSize=getFileSize(fileName)) == -1) return IO_ERROR; _itoa_s(fileSize, request.fileSize, 10); strcpy_s(request.cmdName, PUT_FILE); if (!WriteRequest(sd, &request)) return IO_ERROR; if ((status = uploadFile(fileName, sd, fileSize)) != STATUS_OK) return status; if (!ReadResponse(sd, &response)) return IO_ERROR; return atoi(response.status); }
bool Client::Notify(const char* method, Value& params, Value& result) { log_trace(); gettimeofday( &startTime_, 0 ); result.SetInvalid(); PreserveReceiveBuffer(); ResetTransaction(); if (Connect(result) && GenerateRequest(method, params, true) && GenerateHeader()) { if (!WriteRequest(result)) { // retry the connection Close(); if (!Connect(result) || !WriteRequest(result)) { Reset(); return false; } } // Not all notification require a response if (!TransportHasNotifyResponse()) { requestId_.pop_front(); return true; } // continue with the processing response if (ReadHeader(result) && ReadResponse(result)) { // don't process the response for a notification requestId_.pop_front(); result.SetNull(); return true; } } Reset(); return false; }
bool Client::Call(const char* method, Value& params, Value& result) { log_trace(); gettimeofday( &startTime_, 0 ); result.SetInvalid(); PreserveReceiveBuffer(); ResetTransaction(); if (Connect() && GenerateRequest(method, params) && GenerateHeader()) { if (!WriteRequest(result)) { // retry the connection Close(); if (!Connect() || !WriteRequest(result)) { Reset(); return false; } } // continue with the processing if (ReadHeader(result) && ReadResponse(result)) { switch (ProcessResponse(result)) { case ProcessResponseSuccess : return true; case ProcessResponseErrorKeepOpen : return false; default : ; // continue processing } } } Reset(); return false; }
INT GetFile(SOCKET sd, char *fileName) { /* Send the the request to the server on socket sd */ printf("downloading %s...\n", fileName); strcpy_s(request.fileName, fileName); strcpy_s(request.cmdName, GET_FILE); if (!WriteRequest(sd, &request)) return IO_ERROR; if (!ReadResponse(sd, &response)) return IO_ERROR; int status = atoi(response.status); if (status != STATUS_OK) return status; int fileSize = atoi(response.dataSize); return downloadFile(sd, fileName, fileSize); }
BOOL RemoteFilesList(SOCKET sd) { printf("list remote files\n"); strcpy_s(request.cmdName, LIST_FILES); if (!WriteRequest(sd, &request)) return IO_ERROR; if (!ReadResponse(sd, &response)) return IO_ERROR; int status = atoi(response.status); if (status != STATUS_OK) return status; int nEntries = atoi(response.dataSize); FSCloudFileEntry *entries = (PFSCloudFileEntry)malloc(sizeof(FSCloudFileEntry)*nEntries); readToBuffer(sd, entries, sizeof(FSCloudFileEntry)*nEntries); for (int i = 0; i < nEntries; ++i) { printf("%-30s %-10s bytes\n", entries[i].name, entries[i].size); } free(entries); return STATUS_OK; }
void dtransferusb::run() { SerPort = new QextSerialPort(); int ExpectedLength = NUMBER_OF_REGISTERS * 2 + NUMBER_OF_COILS / 8 + 1; QTime Startup, Sleeper; Startup.start(); while(!Shutdown) { if(SerPort->isOpen()) {//the port is open so check for data Sleeper.start(); while((ExpectingResponse > 0) && (SerPort->bytesAvailable() < ExpectedLength)) { msleep(25); if(Sleeper.elapsed() > 5000) break; } if(SerPort->bytesAvailable() >= ExpectedLength) {//data found Receive(ExpectedLength); } else { if((ExpectingResponse > 2) && (Startup.elapsed() > 15000)) { qDebug() << "DTxfrUsb " << QString::number(Cfg.DTxfrUsb) << " finds the lack of expected response utterly demoralizing " << SerPort->portName() << " " << QDateTime::currentDateTime().toString(TIMESTAMP_FORMAT); P[Cfg.Prc].CommFailure(); ExpectingResponse = 0; SerPort->close(); Sleeper.start(); while(Sleeper.elapsed() < 1000) msleep(100); } else { if(!WriteRequest()) { Send(1,0,0); //Function 1 siginfies "gimme data" } } } } else {//need to open the port SerPort->reset(); SerPort->setPortName(Cfg.Port); SerPort->setBaudRate(BAUD9600); SerPort->setDataBits(DATA_8); SerPort->setStopBits(STOP_1); SerPort->setFlowControl(FLOW_OFF); SerPort->setParity(PAR_NONE); SerPort->setTimeout(1000); if(SerPort->open(QextSerialPort::ReadWrite)) { qDebug() << "DTxfrUsb " << QString::number(Cfg.DTxfrUsb) << " opened port " << SerPort->portName() << " " << QDateTime::currentDateTime().toString(TIMESTAMP_FORMAT); ExpectingResponse = 0; Sleeper.start(); while(Sleeper.elapsed() < 1000) msleep(100); } else { qDebug() << "DTxfrUsb " << QString::number(Cfg.DTxfrUsb) << " failed to open " << Cfg.Port << " " << QDateTime::currentDateTime().toString(TIMESTAMP_FORMAT); P[Cfg.Prc].CommFailure(); ExpectingResponse = 0; Sleeper.start(); while(Sleeper.elapsed() < 5000) msleep(100); } } Sleeper.start(); while(Sleeper.elapsed() < Cfg.Delay) msleep(25); } }
NS_IMETHODIMP nsFingerChannel::AsyncOpen(nsIStreamListener *aListener, nsISupports *ctxt) { nsresult rv = NS_CheckPortSafety(mPort, "finger"); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsIThread> thread = do_GetCurrentThread(); NS_ENSURE_STATE(thread); // // create transport // nsCOMPtr<nsISocketTransportService> sts = do_GetService(NS_SOCKETTRANSPORTSERVICE_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; rv = sts->CreateTransport(nsnull, 0, mHost, mPort, mProxyInfo, getter_AddRefs(mTransport)); if (NS_FAILED(rv)) return rv; // not fatal if this fails mTransport->SetEventSink(this, thread); rv = WriteRequest(mTransport); if (NS_FAILED(rv)) return rv; // // create TXT to HTML stream converter // nsCOMPtr<nsIStreamConverterService> scs = do_GetService(NS_STREAMCONVERTERSERVICE_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsIStreamListener> convListener; rv = scs->AsyncConvertData("text/plain", "text/html", this, nsnull, getter_AddRefs(convListener)); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsITXTToHTMLConv> conv = do_QueryInterface(convListener); if (conv) { nsCAutoString userHost; rv = mURI->GetPath(userHost); nsAutoString title; title.AppendLiteral("Finger information for "); AppendUTF8toUTF16(userHost, title); conv->SetTitle(title.get()); conv->PreFormatHTML(PR_TRUE); } // // open input stream, and create input stream pump... // nsCOMPtr<nsIInputStream> sockIn; rv = mTransport->OpenInputStream(0, 0, 0, getter_AddRefs(sockIn)); if (NS_FAILED(rv)) return rv; rv = NS_NewInputStreamPump(getter_AddRefs(mPump), sockIn); if (NS_FAILED(rv)) return rv; rv = mPump->AsyncRead(convListener, nsnull); if (NS_FAILED(rv)) return rv; if (mLoadGroup) mLoadGroup->AddRequest(this, nsnull); mListener = aListener; mListenerContext = ctxt; return NS_OK; }