示例#1
0
int StreamConverterBuf::writeToDevice(char c)
{
	poco_assert_dbg (_pOstr);

	if (_sequenceLength == 0)
	{
		int n = _inEncoding.characterMap()[(unsigned char) c];
		if (n == -1)
		{
			++_errors;
			return -1;
		}
		_buffer[0] = (unsigned char) c;
		_sequenceLength = n < 0 ? -n : 1;
		_pos = 1;
	}
	else _buffer[_pos++] = (unsigned char) c;
	if (_pos == _sequenceLength)
	{
		int uc = _inEncoding.convert(_buffer);
		if (uc == -1)
		{
			++_errors; 
			return -1;
		}
		int n = _outEncoding.convert(uc, _buffer, sizeof(_buffer));
		if (n == 0) n = _outEncoding.convert(_defaultChar, _buffer, sizeof(_buffer));
		poco_assert_dbg (n <= sizeof(_buffer));
		_pOstr->write((char*) _buffer, n);
		_sequenceLength = 0;
		_pos = 0;
	}
	return charToInt(c);
}
示例#2
0
int StreamConverterBuf::writeToDevice(char c)
{
	poco_assert_dbg (_pOstr);

	_buffer[_pos++] = (unsigned char) c;
	if (_sequenceLength == 0 || _sequenceLength == _pos)
	{
		int n = _inEncoding.queryConvert(_buffer, _pos);
		if (-1 <= n)
		{
			int uc = n;
			if (-1 == n)
			{
				++_errors;
				return -1;
			}
			int n1 = _outEncoding.convert(uc, _buffer, sizeof(_buffer));
			if (n1 == 0) n1 = _outEncoding.convert(_defaultChar, _buffer, sizeof(_buffer));
			poco_assert_dbg (n1 <= sizeof(_buffer));
			_pOstr->write((char*) _buffer, n1);
			_sequenceLength = 0;
			_pos = 0;
		}
		else
		{
			_sequenceLength = -n;
		}
	}

	return charToInt(c);
}
示例#3
0
CodeGenerator::FwdDecl::FwdDecl(const std::string& inc, const std::string& cN, const std::string& ns):
	includeFile(inc),
	className(cN),
	fullNameSpace(ns)
{
	poco_assert_dbg (!includeFile.empty());
	poco_assert_dbg (!className.empty());
}
示例#4
0
std::string URIUtility::createURIPath(const Identifiable::ObjectId& oid, const Identifiable::TypeId& tid, const std::string& protocol)
{
	poco_assert_dbg(!oid.empty());
	poco_assert_dbg(!tid.empty());
	poco_assert_dbg(!protocol.empty());
	std::string result("/");
	result += protocol;
	result += '/';
	result += tid;
	result += '/';
	result += oid;
	return result;
}
ZipLocalFileHeader::ZipLocalFileHeader(std::istream& inp, bool assumeHeaderRead, ParseCallback& callback):
    _forceZip64(false),
    _rawHeader(),
    _startPos(inp.tellg()),
    _endPos(-1),
    _fileName(),
    _lastModifiedAt(),
    _extraField(),
    _crc32(0),
    _compressedSize(0),
    _uncompressedSize(0)
{
    poco_assert_dbg( (EXTRA_FIELD_POS+EXTRA_FIELD_LENGTH) == FULLHEADER_SIZE);

    if (assumeHeaderRead)
        _startPos -= ZipCommon::HEADER_SIZE;

    parse(inp, assumeHeaderRead);

    bool ok = callback.handleZipEntry(inp, *this);

    if (ok)
    {
        if (searchCRCAndSizesAfterData())
        {
            char header[ZipCommon::HEADER_SIZE]={'\x00', '\x00', '\x00', '\x00'};
            inp.read(header, ZipCommon::HEADER_SIZE);
            if (std::memcmp(header, ZipDataInfo64::HEADER, sizeof(header)) == 0) 
            {
                ZipDataInfo64 nfo(inp, true);
                setCRC(nfo.getCRC32());
                setCompressedSize(nfo.getCompressedSize());
                setUncompressedSize(nfo.getUncompressedSize());
            } 
            else 
            {
                ZipDataInfo nfo(inp, true);
                setCRC(nfo.getCRC32());
                setCompressedSize(nfo.getCompressedSize());
                setUncompressedSize(nfo.getUncompressedSize());
            }
        }
    }
    else
    {
        poco_assert_dbg(!searchCRCAndSizesAfterData());
        ZipUtil::sync(inp);
    }
    _endPos = _startPos + getHeaderSize() + _compressedSize; // exclude the data block!
}
示例#6
0
文件: RWLock_WIN32.cpp 项目: 119/vdc
bool RWLockImpl::tryWriteLockImpl()
{
	addWriter();
	HANDLE h[2];
	h[0] = _mutex;
	h[1] = _writeEvent;
	switch (WaitForMultipleObjects(2, h, TRUE, 1))
	{
	case WAIT_OBJECT_0:
	case WAIT_OBJECT_0 + 1:
		--_writersWaiting;
		++_readers;
		++_writers;
		ResetEvent(_readEvent);
		ResetEvent(_writeEvent);
		ReleaseMutex(_mutex);
		poco_assert_dbg(_writers == 1);
		return true;
	case WAIT_TIMEOUT:
		removeWriter();
		return false;
	default:
		removeWriter();
		throw SystemException("cannot lock reader/writer lock");
	}
}
示例#7
0
void SessionImpl::open(const std::string& connect)
{
	if (connect != connectionString())
	{
		if (isConnected())
			throw InvalidAccessException("Session already connected");

		if (!connect.empty())
			setConnectionString(connect);
	}

	poco_assert_dbg (!connectionString().empty());

	try
	{
		ActiveConnector connector(connectionString(), &_pDB);
		ActiveResult<int> result = connector.connect();
		if (!result.tryWait(getLoginTimeout() * 1000))
			throw ConnectionFailedException("Timed out.");

		int rc = result.data();
		if (rc != 0)
		{
			close();
			Utility::throwException(rc);
		}
	} 
	catch (SQLiteException& ex)
	{
		throw ConnectionFailedException(ex.displayText());
	}

	_connected = true;
}
示例#8
0
文件: Var.cpp 项目: Chingliu/poco
Var Var::parseObject(const std::string& val, std::string::size_type& pos)
{
	poco_assert_dbg (val[pos] == '{');
	++pos;
	skipWhiteSpace(val, pos);
	DynamicStruct aStruct;
	while (val[pos] != '}' && pos < val.size())
	{
		std::string key = parseString(val, pos);
		skipWhiteSpace(val, pos);
		if (val[pos] != ':')
			throw DataFormatException("Incorrect object, must contain: key : value pairs"); 
		++pos; // skip past :
		Var value = parse(val, pos);
		aStruct.insert(key, value);
		skipWhiteSpace(val, pos);
		if (val[pos] == ',')
		{
			++pos;
			skipWhiteSpace(val, pos);
		}
	}
	if (val[pos] != '}')
		throw DataFormatException("Unterminated object"); 
	++pos;
	return aStruct;
}
示例#9
0
bool FrameQueue::handleFrame(Connection::Ptr pConnection, Frame::Ptr pFrame)
{
	poco_assert_dbg (pConnection == _pConnection);

	if ((_frameType == 0 || pFrame->type() == _frameType) && pFrame->channel() == _channel)
	{
		{
			Poco::FastMutex::ScopedLock lock(_mutex);
			int rounds = 0;
			while (_queue.size() == MAX_QUEUE_SIZE && rounds < 100)
			{
				Poco::ScopedUnlock<Poco::FastMutex> unlock(_mutex);
				Poco::Thread::sleep(5);
				rounds++;
			}
			if (_queue.size() < MAX_QUEUE_SIZE)
			{
				_queue.push_back(pFrame);
				_sema.set();
				return true;
			}
		}
	}
	return false;
}
示例#10
0
void ConfigurationMapper::enumerate(const std::string& key, Keys& range) const
{
	std::string cKey(key);
	if (!cKey.empty()) cKey += '.';
	std::string::size_type keyLen = cKey.length();
	if (keyLen < _toPrefix.length())
	{
		if (_toPrefix.compare(0, keyLen, cKey) == 0)
		{
			std::string::size_type pos = _toPrefix.find_first_of('.', keyLen);
			poco_assert_dbg(pos != std::string::npos);
			range.push_back(_toPrefix.substr(keyLen, pos - keyLen));
		}
	}
	else
	{
		std::string translatedKey;
		if (cKey == _toPrefix)
		{
			translatedKey = _fromPrefix;
			if (!translatedKey.empty())
				translatedKey.resize(translatedKey.length() - 1);
		}
		else translatedKey = translateKey(key);
		_pConfig->enumerate(translatedKey, range);
	}
}
示例#11
0
void ParseHandler::startArray()
{
	Array::Ptr newArr = new Array();

	if ( _stack.empty() ) // The first array
	{
		_result = newArr;
	}
	else
	{
		Var parent = _stack.top();

		if ( parent.type() == typeid(Array::Ptr) )
		{
			Array::Ptr arr = parent.extract<Array::Ptr>();
			arr->add(newArr);
		}
		else if ( parent.type() == typeid(Object::Ptr) )
		{
			poco_assert_dbg(!_key.empty());
			Object::Ptr obj = parent.extract<Object::Ptr>();
			obj->set(_key, newArr);
			_key.clear();
		}
	}

	_stack.push(newArr);
}
示例#12
0
std::string ZipUtil::fakeZLibInitString(ZipCommon::CompressionLevel cl)
{
	std::string init(2, ' ');

	// compression info:
	// deflate is used, bit 0-3: 0x08
	// dictionary size is always 32k: calc ld2(32k)-8 = ld2(2^15) - 8 = 15 - 8 = 7 --> bit 4-7: 0x70
	init[0] = '\x78';

	// now fake flags
	// bits 0-4 check bits: set them so that init[0]*256+init[1] % 31 == 0
	// bit 5: preset dictionary? always no for us, set to 0
	// bits 6-7: compression level: 00 very fast, 01 fast, 10 normal, 11 best
	if (cl == ZipCommon::CL_SUPERFAST)
		init[1] = '\x00';
	else if (cl == ZipCommon::CL_FAST)
		init[1] = '\x40';
	else if (cl == ZipCommon::CL_NORMAL)
		init[1] = '\x80';
	else
		init[1] = '\xc0';
	// now set the last 5 bits
	Poco::UInt16 tmpVal = ((Poco::UInt16)init[0])*256+((unsigned char)init[1]);
	char checkBits = (31 - (char)(tmpVal%31));
	init[1] |= checkBits; // set the lower 5 bits
	tmpVal = ((Poco::UInt16)init[0])*256+((unsigned char)init[1]);
	poco_assert_dbg ((tmpVal % 31) == 0);
	return init;
}
示例#13
0
void ZipLocalFileHeader::setFileName(const std::string& fileName, bool isDirectory)
{
    poco_assert (!fileName.empty());
    Poco::Path aPath(fileName);

    if (isDirectory)
    {
        aPath.makeDirectory();
        setCRC(0);
        setCompressedSize(0);
        setUncompressedSize(0);
        setCompressionMethod(ZipCommon::CM_STORE);
        setCompressionLevel(ZipCommon::CL_NORMAL);
    }
    else
    {
        aPath.makeFile();
    }
    _fileName = aPath.toString(Poco::Path::PATH_UNIX);
    if (_fileName[0] == '/')
        _fileName = _fileName.substr(1);
    if (isDirectory)
    {
        poco_assert_dbg (_fileName[_fileName.size()-1] == '/');
    }
    setFileNameLength(static_cast<Poco::UInt16>(_fileName.size()));
}
示例#14
0
void MQFunctions::inq(MQHCONN conn, MQHOBJ obj, MQLONG selectorCount, MQLONG* selectors, MQLONG intAttrCount, MQLONG* intAttrs, MQLONG charAttrLength, PMQCHAR charAttrs, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_inqFn != NULL);

	_inqFn(conn, obj, selectorCount, selectors, intAttrCount, intAttrs, charAttrLength, charAttrs, cc, rc);

	trace("", "MQINQ", cc, rc);
}
示例#15
0
void MQFunctions::get(MQHCONN conn, MQHOBJ obj, MQMD* md, MQGMO* options, MQLONG size, MQBYTE* buffer, MQLONG* dataLength, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_getFn != NULL);

	_getFn(conn, obj, md, options, size, buffer, dataLength, cc, rc);

	trace("", "MQGET", cc, rc);
}
示例#16
0
void MQFunctions::inqmp(MQHCONN conn, MQHMSG hmsg, MQIMPO* options, MQCHARV* name, MQPD* propDesc, MQLONG* type, MQLONG valueLength, MQBYTE* value, MQLONG* dataLength, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_inqMpFn != NULL);

	_inqMpFn(conn, hmsg, options, name, propDesc, type, valueLength, value, dataLength, cc, rc);

	trace("", "MQINQMP", cc, rc);
}
示例#17
0
void MQFunctions::dltmp(MQHCONN conn, MQHMSG hmsg, MQDMPO* options, MQCHARV* name, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_dltMpFn != NULL);

	_dltMpFn(conn, hmsg, options, name, cc, rc);

	trace("", "MQDLTMP", cc, rc);
}
示例#18
0
void MQFunctions::setmp(MQHCONN conn, MQHMSG hmsg, MQSMPO* options, MQCHARV* name, MQPD* propDesc, MQLONG type, MQLONG valueLength, MQBYTE* value, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_setMpFn != NULL);

	_setMpFn(conn, hmsg, options, name, propDesc, type, valueLength, value, cc, rc);

	trace("", "MQSETMP", cc, rc);
}
示例#19
0
void MQFunctions::dltmh(MQHCONN conn, MQHMSG* hmsg, MQDMHO* options, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_dltMhFn != NULL);

	_dltMhFn(conn, hmsg, options, cc, rc);

	trace("", "MQDLTMH", cc, rc);
}
示例#20
0
void MQFunctions::crtmh(MQHCONN conn, MQCMHO* options, MQHMSG* hmsg, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_crtMhFn != NULL);

	_crtMhFn(conn, options, hmsg, cc, rc);

	trace("", "MQCRTMH", cc, rc);
}
示例#21
0
void MQFunctions::ctl(MQHCONN conn, MQLONG operation, MQCTLO* options, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_ctlFn != NULL);

	_ctlFn(conn, operation, options, cc, rc);

	trace("", "MQCTL", cc, rc);
}
示例#22
0
void MQFunctions::cb(MQHCONN conn, MQLONG operation, MQCBD* callbackDesc, MQHOBJ obj, MQMD* md, MQGMO* gmo, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_cbFn != NULL);

	_cbFn(conn, operation, callbackDesc, obj, md, gmo, cc, rc);

	trace("", "MQCB", cc, rc);
}
示例#23
0
void MQFunctions::close(MQHCONN conn, MQHOBJ* obj, MQLONG options, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_closeFn != NULL);

	_closeFn(conn, obj, options, cc, rc);

	trace("", "MQCLOSE", cc, rc);
}
示例#24
0
void MQFunctions::put(MQHCONN conn, MQHOBJ obj, MQMD* md, MQPMO* options, MQLONG size, MQBYTE* buffer, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_putFn != NULL);

	_putFn(conn, obj, md, options, size, buffer, cc, rc);

	trace("", "MQPUT", cc, rc);
}
示例#25
0
void MQFunctions::conn(char* qmgrName, MQHCONN* hconn, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_connFn != NULL);

	_connFn(qmgrName, hconn, cc, rc);

	trace(qmgrName, "MQCONN", cc, rc);
}
示例#26
0
void MQFunctions::disc(PMQHCONN conn, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_discFn != NULL);

	_discFn(conn, cc, rc);

	trace("", "MQDISC", cc, rc);
}
示例#27
0
ZipArchive::ZipArchive(std::istream& in, ParseCallback& pc):
	_entries(),
	_infos(),
	_disks()
{
	poco_assert_dbg (in);
	parse(in, pc);
}
示例#28
0
void MQFunctions::connx(char* qmgrName, MQCNO* connectOpts, MQHCONN* hconn, MQLONG* cc, MQLONG* rc)
{
	poco_assert_dbg(_connxFn != NULL);

	_connxFn(qmgrName, connectOpts, hconn, cc, rc);

	trace(qmgrName, "MQCONNX", cc, rc);
}
示例#29
0
int StreamConverterBuf::readFromDevice()
{
	poco_assert_dbg (_pIstr);

	if (_pos < _sequenceLength) return _buffer[_pos++];

	_pos = 0;
	_sequenceLength = 0;
	int c = _pIstr->get();
	if (c == -1) return -1;	

	poco_assert (c < 256);
	int uc;
	int n = _inEncoding.characterMap()[c];
	if (n == -1)
	{
		uc = _defaultChar;
		++_errors;
	}
	else if (n >= 0)
		uc = n;
	else
	{
		poco_assert_dbg(-n <= sizeof(_buffer));
		_buffer[0] = (unsigned char) c;
		_pIstr->read((char*) _buffer + 1, -n - 1);
		if (_pIstr->gcount() == -n - 1)
		{
			uc = _inEncoding.convert(_buffer);
			if (uc == -1) uc = _defaultChar;
		}
		else
		{
			uc = _defaultChar;
			++_errors;
		}
	}
	_sequenceLength = _outEncoding.convert(uc, _buffer, sizeof(_buffer));
	if (_sequenceLength == 0)
		_sequenceLength = _outEncoding.convert(_defaultChar, _buffer, sizeof(_buffer));
	if (_sequenceLength == 0)
		return -1;
	else
		return _buffer[_pos++];
}
示例#30
0
ZipArchive::ZipArchive(std::istream& in):
	_entries(),
	_infos(),
	_disks()
{
	poco_assert_dbg (in);
	SkipCallback skip;
	parse(in, skip);
}