Example #1
0
int stream_seekfn(struct iw_context *ctx, struct iw_iodescr *iodescr, iw_int64 offset, int whence) {
	//FILE *fp = (FILE*)iodescr->fp;
	//fseek(fp, (long)offset, whence);
	ByteStream* stream = (ByteStream*)iodescr->fp;
	stream->seek(whence);
	return 1;
}
Example #2
0
	void Client::start(){
		bool hasHeader = false;
		
		Packet pak;
		ByteStream header;
		ByteStream* read = &header;
		
		pak.mData.reserve(1024);

		header.reserve(16);
		header.setDataSize(startHandshake());

		bool error = false;
		while(!error){
			if(mSocket->canRead()){
				int result = mSocket->read(read->data() + read->tell(), read->size() - read->tell());

				if(result == -1){
					error = true;
					break;
				}else if(result > 0){
					read->skip(result);
					if(read->tell() != read->size())
						continue;

					if(mHandshakeStage != HS_COMPLETE){
						read->setDataSize(onReceiveHandshake(read));
						read->seek(0);
						continue;
					}

					if(!hasHeader){
						uint32 hSize = Packet::getHeaderSize(*read);
						if(read->size() < hSize){
							read->setDataSize(hSize);
							continue;
						}

						read->seek(0);
						pak.deserialise(*read);
						hasHeader = true;

						read = &pak.mData;
						read->seek(0);
						read->setDataSize(pak.mHeader.mBodySize + pak.mHeader.mBodySize / mChunkSize);
					}else{
						read->dechunk(mChunkSize);
						read->seek(0);
						onReceivePacket(&pak);
			
						hasHeader = false;

						read = &header;
						read->seek(0);
						read->setDataSize(1);
					}
				}

				if(error)
					break;
			}
		
			if(mSocket->canWrite() && mSendData.size()){
				mSendLock->lock();

				while(mSendData.size()){
					ByteStream* stream = mSendData.front();
					mSocket->write(stream->data(), stream->size());
					delete stream;
					mSendData.pop();
				}

				mSendLock->unlock();
			}
		};
		
		mSocket->getLastError();
		disconnect();
	}
Example #3
0
static toff_t seekproc(thandle_t h, toff_t offset, int mode) { 
  ByteStream *bs = (ByteStream*)h;
  bs->seek((long)offset, mode);
  return (toff_t)bs->tell(); 
}