Esempio n. 1
0
const bool RPCRequest::DoRequest(const std::string &data, std::string &result)
{
	int rval=-1;
	m_writebuff.clear();
	m_readbuff.assign(data.begin(),data.end());
	std::vector<std::string::value_type> vuserpass;

	if(m_curl)
	{
		struct curl_slist *headers=0;

		curl_easy_setopt(m_curl,CURLOPT_URL,m_url.c_str());
		curl_easy_setopt(m_curl,CURLOPT_ENCODING,"");
		curl_easy_setopt(m_curl,CURLOPT_FAILONERROR,1);
		curl_easy_setopt(m_curl,CURLOPT_TCP_NODELAY,1);
		curl_easy_setopt(m_curl,CURLOPT_WRITEFUNCTION,RPCRequest::WriteData);
		curl_easy_setopt(m_curl,CURLOPT_WRITEDATA,this);
		curl_easy_setopt(m_curl,CURLOPT_READFUNCTION,RPCRequest::ReadData);
		curl_easy_setopt(m_curl,CURLOPT_READDATA,this);
		if(m_user!="" && m_password!="")
		{
			std::string userpass(m_user+":"+m_password);
			// Apparenty, libCURL doesn't copy the string immediately, so scoped variables will not work,
			// so we'll use a vector declared previously in the method.
			vuserpass.assign(userpass.begin(),userpass.end());
			vuserpass.push_back(0);
			curl_easy_setopt(m_curl,CURLOPT_USERPWD,&vuserpass[0]);
			curl_easy_setopt(m_curl,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);
		}
		curl_easy_setopt(m_curl,CURLOPT_POST,1);

		std::ostringstream istr;
		istr << m_readbuff.size();
		std::string headersize("Content-Length: "+istr.str());

		headers=curl_slist_append(headers,"Content-type: application/json");
		headers=curl_slist_append(headers,headersize.c_str());
		headers=curl_slist_append(headers,"Expect:");

		curl_easy_setopt(m_curl, CURLOPT_HTTPHEADER, headers);

		rval=curl_easy_perform(m_curl);
		m_lastcurlreturn=rval;
		
		if(m_writebuff.size()>0)
		{
			result.assign(m_writebuff.begin(),m_writebuff.end());
		}
		else
		{
			result="";
		}

		curl_slist_free_all(headers);

	}

	return (rval==0);
}
Esempio n. 2
0
void
	FastTcpAgent::output(int seqno, int reason)
{
	Packet* p = allocpkt();
	hdr_tcp *tcph = hdr_tcp::access(p);
	double now = Scheduler::instance().clock();
	hdr_flags* hf = hdr_flags::access(p);
	hdr_ip *iph = hdr_ip::access(p);
	int databytes = hdr_cmn::access(p)->size();
	tcph->seqno() = seqno;
	tcph->ts() = now;
	tcph->reason() = reason;
	/* if this is the 1st pkt, setup senttime[] and transmits[]
	* I alloc mem here, instrad of in the constructor, to cover
	* cases which windows get set by each different tcp flows */
	if (seqno==0) {
		maxwnd_ = int(wnd_);
		if (sendtime_)
			delete []sendtime_;
		if (transmits_)
			delete []transmits_;
		if (cwnd_array_)
			delete []cwnd_array_;
		sendtime_ = new double[maxwnd_];
		transmits_ = new int[maxwnd_];
		cwnd_array_= new double[maxwnd_];
		for(int i=0;i<maxwnd_;i++) {
			sendtime_[i] = -1.;
			transmits_[i] = 0;
			cwnd_array_[i]=-1;
		}
	}

	if (ecn_) {
		hf->ect() = 1; // ECN capable transport.
	}

	/* Check if this is the initial SYN packet. */
	if (seqno == 0) {
		if (syn_) {
			databytes= 0;
			curseq_ += 1;
			hdr_cmn::access(p)->size() = tcpip_base_hdr_size_;
		}
		if (ecn_) {
			hf->ecnecho() = 1;
			//			hf->cong_action() = 1;
			hf->ect() = 0;
		}
	}
	else if (useHeaders_ == true) {
		hdr_cmn::access(p)->size() += headersize();
	}

	// record a find grained send time and # of transmits 
	int index = seqno % maxwnd_;
	sendtime_[index] = fasttime(); 
	cwnd_array_[index]=avg_cwnd_last_RTT_; 
	++transmits_[index];
	/* support ndatabytes_ in output - Lloyd Wood 14 March 2000 */
	int bytes = hdr_cmn::access(p)->size(); 
	ndatabytes_ += bytes; 
	ndatapack_++; // Added this - Debojyoti 12th Oct 2000
	send(p, 0);

	if (seqno == curseq_ && seqno > maxseq_)
		idle();  // Tell application I have sent everything so far

	if (seqno > maxseq_) {
		maxseq_ = seqno;
		if (!rtt_active_) {
			rtt_active_ = 1;
			if (seqno > rtt_seq_) {
				rtt_seq_ = seqno;
				rtt_ts_ = now;
			}
		}
	} else {
		++nrexmitpack_;
		nrexmitbytes_ += bytes;
	}

	if (!(rtx_timer_.status() == TIMER_PENDING))
		/* No timer pending.  Schedule one. */
			set_rtx_timer();
}
Esempio n. 3
0
v8::Handle<v8::Value> QV8Worker::deserialize(const char *&data, QV8Engine *engine)
{
    quint32 header = popUint32(data);
    Type type = headertype(header);

    switch (type) {
    case WorkerUndefined:
        return v8::Undefined();
    case WorkerNull:
        return v8::Null();
    case WorkerTrue:
        return v8::True();
    case WorkerFalse:
        return v8::False();
    case WorkerString:
    {
        quint32 size = headersize(header);
        v8::Local<v8::String> string = v8::String::New((uint16_t*)data, size - 1);
        data += ALIGN(size * sizeof(uint16_t));
        return string;
    }
    case WorkerFunction:
        Q_ASSERT(!"Unreachable");
        break;
    case WorkerArray:
    {
        quint32 size = headersize(header);
        v8::Local<v8::Array> array = v8::Array::New(size);
        for (quint32 ii = 0; ii < size; ++ii) {
            array->Set(ii, deserialize(data, engine));
        }
        return array;
    }
    case WorkerObject:
    {
        quint32 size = headersize(header);
        v8::Local<v8::Object> o = v8::Object::New();
        for (quint32 ii = 0; ii < size; ++ii) {
            v8::Handle<v8::Value> name = deserialize(data, engine);
            v8::Handle<v8::Value> value = deserialize(data, engine);
            o->Set(name, value);
        }
        return o;
    }
    case WorkerInt32:
        return v8::Integer::New((qint32)popUint32(data));
    case WorkerUint32:
        return v8::Integer::NewFromUnsigned(popUint32(data));
    case WorkerNumber:
        return v8::Number::New(popDouble(data));
    case WorkerDate:
        return v8::Date::New(popDouble(data));
    case WorkerRegexp:
    {
        quint32 flags = headersize(header);
        quint32 length = popUint32(data);
        v8::Local<v8::String> source = v8::String::New((uint16_t*)data, length - 1);
        data += ALIGN(length * sizeof(uint16_t));
        return v8::RegExp::New(source, (v8::RegExp::Flags)flags);
    }
    case WorkerListModel:
    {
        void *ptr = popPtr(data);
        QDeclarativeListModelWorkerAgent *agent = (QDeclarativeListModelWorkerAgent *)ptr;
        v8::Handle<v8::Value> rv = engine->newQObject(agent);
        if (rv->IsObject()) {
            QDeclarativeListModelWorkerAgent::VariantRef ref(agent);
            QVariant var = qVariantFromValue(ref);
            rv->ToObject()->SetHiddenValue(v8::String::New("qml::ref"), engine->fromVariant(var));
        }
        agent->release();
        agent->setV8Engine(engine);
        return rv;
    }
    }
    Q_ASSERT(!"Unreachable");
    return v8::Undefined();
}