void XAConnection::parse_xa_info()

in pgxalib.cpp [464:557]


void XAConnection::parse_xa_info()
{
	const char	*cstr, *pstr, *pnstr;
	char		keyword[64], value[64];
	bool		keyhasbr, valhasbr;
	int		debugv = -1;

	cstr = connstr.c_str();

	immediateConnection = bImmediateConnectDefault;
	GetMsdtclog();

	for (pstr = cstr; *pstr;)
	{
		keyhasbr = valhasbr = false;
		if (CHAR_OPENING_BRACE == *pstr)
		{
			keyhasbr = true;
			if (pnstr = strchr(pstr, (int) CHAR_CLOSING_BRACE), NULL != pnstr)
				strncpy_s(keyword, sizeof(keyword), pstr + 1, pnstr - pstr - 1);
			else
				break;
			pstr = pnstr + 1;
			if (CHAR_EQUAL != *pstr)
				break; 
		}
		else
		{
			if (pnstr = strchr(pstr, (int) CHAR_EQUAL), NULL != pnstr)
				strncpy_s(keyword, sizeof(keyword), pstr, pnstr - pstr);
			else
				break;
			pstr = pnstr;
		}
		pstr++;
		if (CHAR_OPENING_BRACE == *pstr)
		{
			valhasbr = true;
			if (pnstr = strchr(pstr, (int) CHAR_CLOSING_BRACE), NULL != pnstr)
				strncpy_s(value, sizeof(value), pstr + 1, pnstr - pstr - 1);
			else
				break;
			pstr = pnstr + 1;
		}
		else
		{
			if (pnstr = strchr(pstr, (int) CHAR_SEMI_COLON), NULL != pnstr)
			{
				strncpy_s(value, sizeof(value), pstr, pnstr - pstr);
				pstr = pnstr;
			}
			else
			{
				strcpy(value, pstr);
				pstr = strchr(pstr, '\0');
			}
		}

		if (0 == _stricmp(keyword, KEYWORD_DTC_CHECK))
			immediateConnection = (0 != (int) strtol(value, NULL, 10));
		else if (0 == _stricmp(keyword, KEYWORD_DEBUG) ||
			 0 == _stricmp(keyword, KEYWORD_ABDEBUG))
			debugv = (int) strtol(value, NULL, 10);
		else
		{
			if (keyhasbr)
				dsnstr += STR_OPENING_BRACE;
			dsnstr += keyword;
			if (keyhasbr)
				dsnstr += STR_CLOSING_BRACE;
			dsnstr += STR_EQUAL;
			if (valhasbr)
				dsnstr += STR_OPENING_BRACE;
			dsnstr += value;
			if (valhasbr)
				dsnstr += STR_CLOSING_BRACE;
			dsnstr += STR_SEMI_COLON;
		}

		if (NULL == pstr ||
		    CHAR_SEMI_COLON != *pstr)
			break;
		pstr++;
	}
	if (0 != dtclog)
	{
		char	dbgopt[16];

		if (debugv <= 0)
			debugv = 1;
		_snprintf(dbgopt, sizeof(dbgopt), KEYWORD_ABDEBUG "=%d;", debugv);
		dsnstr += dbgopt;
	}
}