Beispiel #1
0
LinkHeader::LinkHeader(CharacterType*& position, CharacterType* const end)
{
    ASSERT(position <= end);
    auto urlResult = findURLBoundaries(position, end);
    if (urlResult == std::nullopt) {
        m_isValid = false;
        findNextHeader(position, end);
        return;
    }
    m_url = urlResult.value();

    while (m_isValid && position < end) {
        if (!parseParameterDelimiter(position, end, m_isValid)) {
            findNextHeader(position, end);
            return;
        }

        LinkParameterName parameterName;
        if (!parseParameterName(position, end, parameterName)) {
            findNextHeader(position, end);
            m_isValid = false;
            return;
        }

        String parameterValue;
        if (!parseParameterValue(position, end, parameterValue) && !isExtensionParameter(parameterName)) {
            findNextHeader(position, end);
            m_isValid = false;
            return;
        }

        setValue(parameterName, parameterValue);
    }
    findNextHeader(position, end);
}
LinkHeader::LinkHeader(CharType*& position, CharType* end)
    : m_crossOrigin(CrossOriginAttributeNotSet)
    , m_isValid(true)
{
    if (!parseURL(position, end, m_url)) {
        m_isValid = false;
        findNextHeader(position, end);
        return;
    }

    while (m_isValid && position < end) {
        if (!parseParameterDelimiter(position, end, m_isValid)) {
            findNextHeader(position, end);
            return;
        }

        LinkParameterName parameterName;
        if (!parseParameterName(position, end, parameterName)) {
            findNextHeader(position, end);
            m_isValid = false;
            return;
        }

        String parameterValue;
        if (!parseParameterValue(position, end, parameterValue) && !isExtensionParameter(parameterName)) {
            findNextHeader(position, end);
            m_isValid = false;
            return;
        }

        setValue(parameterName, parameterValue);
    }
    findNextHeader(position, end);
}
Beispiel #3
0
/** 
	Given a char array with the contents of a .dcp, 
	this method will allocate and return a populated Parameters struct 
*/
void parseParameters(char *filecontents) {
	char *line = NULL, *linectx = NULL;
	int numParameters = 0;
	line = strtok_r( filecontents, "\n", &linectx );

	Parameter *curParam = NULL;	// The current one we're parsing
	while( line != NULL ) {
		//print_gecko("Line [%s]\r\n", line);
		if(line[0] != '#') {
			char *key, *namectx = NULL;
			char *value = NULL;
			key = strtok_r(line, "=", &namectx);
			if(key != NULL)
				value = strtok_r(NULL, "=", &namectx);
			
			if(value != NULL) {
				//print_gecko("Key [%s] Value [%s]\r\n", key, value);
			}
			
			if(!stricmp("Name", key)) {
				curParam = (Parameter*)&_parameters.parameters[numParameters];
				memset(curParam, 0, sizeof(Parameter));
				//print_gecko("Current Param %08X\r\n", curParam);
				parseParameterValue(value, &curParam->arg);
				numParameters++;
			}
			else if(!stricmp("Values", key)) {
				char *valuePairStart = strchr(value, '{');
				int numValues = 0;
				while(valuePairStart != NULL) {
					parseParameterValue(valuePairStart, &curParam->values[numValues]);
					valuePairStart = strchr(valuePairStart+1, '{');
					numValues++;
				}
				curParam->num_values = numValues;
			}
		}
		// And round we go again
		line = strtok_r( NULL, "\n", &linectx);
	}
	_parameters.num_params = numParameters;
	//printParams(getParameters());
}