Exemplo n.º 1
0
 JsonWriter& end(char closing_bracket) {
     begin_token(CLOSING);
     
     if (brackets.top() != closing_bracket) throw error("unmatched bracket");
     brackets.pop();
     
     os << closing_bracket;
     last_token = VALUE;
     return *this;
 }
Exemplo n.º 2
0
void begin_config(const std::string& block, int *pln, int *pcode, int *cp) throw(ParserError) {
	string block_name(block);
	ConfigSection* section = g_Config.getSection(block_name);
	if (section == NULL) {
		g_throw_parser_error("unrecognized config section '", block_name.c_str(), "'");
	}
	// Don't do config blocks in safe mode (except in RC file)
	GLEInterface* iface = GLEGetInterfacePointer();
	if (iface->getCmdLine()->hasOption(GLE_OPT_SAFEMODE)) {
		GLEGlobalConfig* config = iface->getConfig();
		if (!config->allowConfigBlocks()) {
			g_throw_parser_error("safe mode - config blocks not allowed");
		}
	}
	// Start with pcode from the next line
	(*pln)++;
	begin_init();
	while (true) {
		int st = begin_token(&pcode,cp,pln,srclin,tk,&ntk,outbuff);
		if (!st) {
			/* exit loop */
			break;
		}
		int ct = 1;
		int mode = 0;
		bool plus_is = false;
		CmdLineOption* option = NULL;
		while (ct <= ntk) {
			skipspace;
			if (section != NULL) {
				if (mode == 0) {
					option = section->getOption(tk[ct]);
					if (option == NULL) {
						gprint("Not a valid setting for section '%s': {%s}\n", block_name.c_str(), tk[ct]);
					}
				} else if (mode == 1) {
					if (strcmp(tk[ct], "=") == 0) {
						plus_is = false;
					} else if (strcmp(tk[ct], "+=") == 0) {
						plus_is = true;
					} else {
						gprint("Expected '=' or '+=', not {%s}\n", tk[ct]);
					}
				} else if (option != NULL) {
					CmdLineOptionArg* arg = option->getArg(0);
					if (!plus_is) arg->reset();
					arg->appendValue(tk[ct]);
				}
				mode++;
			}
			ct++;
		}
	}
}
Exemplo n.º 3
0
static utility_retcode_t parse_one_header(struct rtsp_response *response)
{
	utility_retcode_t ret = UTILITY_SUCCESS;
	char *start_value;
	char *header_name = response->current_header.name;
	char *header_value = response->current_header.value;

	FUNC_ENTER;

	ret = utility_copy_token(header_name,
				 MAX_HEADER_NAME_LEN,
				 response->parsep,
				 ": ",
				 NULL);
	if (UTILITY_SUCCESS != ret) {
		ERRR("Failed to copy header name\n");
		goto out;
	}

	start_value = begin_token(response->parsep, ": ");
	ret = utility_copy_token(header_value,
				 MAX_HEADER_VALUE_LEN,
				 start_value,
				 "\r\n",
				 NULL);
	if (UTILITY_SUCCESS != ret) {
		ERRR("Failed to copy header value\n");
		goto out;
	}

	DEBG("Found header name: \"%s\" value: \"%s\"\n",
	     header_name, header_value);

	if (0 == syscalls_strcmp(header_name, "Content-Length")) {
		ret = parse_content_length(response);
	} else if (0 == syscalls_strcmp(header_name, "Apple-Response")) {
		ret = parse_apple_response(response);
	} else if (0 == syscalls_strcmp(header_name, "Audio-Jack-Status")) {
		ret = parse_audio_jack_status(response);
	} else if (0 == syscalls_strcmp(header_name, "Session")) {
		ret = parse_session(response);
	} else if (0 == syscalls_strcmp(header_name, "Transport")) {
		ret = parse_transport(response);
	} else if (0 == syscalls_strcmp(header_name, "Public")) {
		ret = parse_public(response);
	} else {
		parse_unknown_header(response);
	}

out:
	FUNC_RETURN;
	return ret;
}
Exemplo n.º 4
0
 JsonWriter& begin(char opening_bracket) {
     begin_token(OPENING);
     
     char closing_bracket;
     if (opening_bracket == '{') closing_bracket = '}';
     else if (opening_bracket == '[') closing_bracket = ']';
     else throw error("invalid bracket");
     
     brackets.push(closing_bracket);
     
     os << opening_bracket;
     return *this;
 }
Exemplo n.º 5
0
static utility_retcode_t parse_transport(struct rtsp_response *response)
{
	char *value = response->current_header.value;
	char *port_string;

	FUNC_ENTER;

	DEBG("value: \"%s\"\n", value);

	port_string = begin_token(value, "server_port=");

	response->session->port = syscalls_strtoul(port_string, NULL, 0);

	INFO("Session IP port: %d\n", response->session->port);

	FUNC_RETURN;
	return UTILITY_SUCCESS;
}
Exemplo n.º 6
0
static utility_retcode_t next_line(struct rtsp_response *response)
{
	utility_retcode_t ret = UTILITY_SUCCESS;
	char *nextline;

	FUNC_ENTER;

	nextline = begin_token((const char *)response->parsep, "\r\n");
	if (NULL == nextline) {

		ERRR("Could not find beginning of next line in response\n");
		ret = UTILITY_FAILURE;

	} else {

		response->parsep = nextline;

	}

	FUNC_RETURN;
	return ret;
}
Exemplo n.º 7
0
static utility_retcode_t get_status_code(struct rtsp_response *response)
{
	utility_retcode_t ret = UTILITY_SUCCESS;
	char *begincode;
	char code[4];

	FUNC_ENTER;

	begincode = begin_token((const char *)response->parsep, " ");
	if (NULL == begincode) {
		ERRR("Could not find beginning of status "
		     "code in status line\n");
		goto failed;
	}

	ret = utility_copy_token(code, sizeof(code), begincode, " ", NULL);
	if (UTILITY_SUCCESS != ret) {
		ERRR("Could not find status code in response status line\n");
		goto failed;
	}

	DEBG("status code string is \"%s\"\n", code);

	response->status_line.status_code = syscalls_strtoul(code, NULL, 0);
	INFO("response status code is: %d\n",
	     response->status_line.status_code);

	ret = UTILITY_SUCCESS;
	goto out;

failed:
	ret = UTILITY_FAILURE;
out:
	FUNC_RETURN;
	return ret;
}
Exemplo n.º 8
0
 JsonWriter& value(bool t) {
     begin_token(VALUE);
     if (t) os << "true";
     else os << "false";
     return *this;
 }
Exemplo n.º 9
0
 JsonWriter& value(double n) {
     begin_token(VALUE);
     os << n;
     return *this;
 }
Exemplo n.º 10
0
 JsonWriter& null_value() {
     begin_token(VALUE);
     os << "null";
     return *this;
 }
Exemplo n.º 11
0
 JsonWriter& value(const char *str) {
     begin_token(VALUE);
     write_string(str);
     return *this;
 }
Exemplo n.º 12
0
 JsonWriter& key(const char *key) {
     begin_token(KEY);
     write_string(key);
     os << ':';
     return *this;
 }