Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
/*!
 * \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;
}
Ejemplo n.º 3
0
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);
	 
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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);
		 
}
Ejemplo n.º 7
0
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;
}
Ejemplo n.º 8
0
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;
}