int KNetworkByteStream::tryWrite () { // send all data from the buffers to the socket QByteArray writeData = takeWrite(); #ifdef OSCAR_EXCESSIVE_DEBUG kdDebug(14151) << k_funcinfo << "writing " << writeData.size() << " bytes." << endl; #endif socket()->writeBlock( writeData.data (), writeData.size () ); return writeData.size(); }
int BConsole::tryWrite() { // try a section of the write buffer QByteArray a = takeWrite(1024, false); // write it int r = ::write(1, a.data(), a.size()); if(r < 0) { error(ErrWrite); return -1; } d->w = new QSocketNotifier(1, QSocketNotifier::Write); connect(d->w, SIGNAL(activated(int)), SLOT(sn_write())); takeWrite(r); bytesWritten(r); return r; }
int JabberByteStream::tryWrite () { // send all data from the buffers to the socket QByteArray writeData = takeWrite(); socket()->writeBlock ( writeData.data (), writeData.size () ); return writeData.size (); }
void HttpPoll::do_sync() { if(d->http.isActive()) return; d->t->stop(); d->out = takeWrite(0, false); bool last; QString key = getKey(&last); QString newkey; if(last) { resetKey(); newkey = getKey(&last); } QPointer<QObject> self = this; syncStarted(); if(!self) return; d->http.post(d->host, d->port, d->url, makePacket(d->ident, key, newkey, d->out), d->use_proxy); }
void HttpPoll::http_result() { // check for death :) QPointer<QObject> self = this; syncFinished(); if(!self) return; // get id and packet QString id; QString cookie = d->http.getHeader("Set-Cookie"); int n = cookie.indexOf("ID="); if(n == -1) { reset(); error(ErrRead); return; } n += 3; int n2 = cookie.indexOf(';', n); if(n2 != -1) id = cookie.mid(n, n2-n); else id = cookie.mid(n); QByteArray block = d->http.body(); // session error? if(id.right(2) == ":0") { if(id == "0:0" && d->state == 2) { reset(); connectionClosed(); return; } else { reset(); error(ErrRead); return; } } d->ident = id; bool justNowConnected = false; if(d->state == 1) { d->state = 2; justNowConnected = true; } // sync up again soon if(bytesToWrite() > 0 || !d->closing) { d->t->start(d->polltime * 1000); } // connecting if(justNowConnected) { connected(); } else { if(!d->out.isEmpty()) { int x = d->out.size(); d->out.resize(0); takeWrite(x); bytesWritten(x); } } if(!self) return; if(!block.isEmpty()) { appendRead(block); readyRead(); } if(!self) return; if(bytesToWrite() > 0) { do_sync(); } else { if(d->closing) { reset(); delayedCloseFinished(); return; } } }