/*
Simple .RDP file parser
Copyright 2013 Blaz Bacnik
This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
If a copy of the MPL was not distributed with this file, You can obtain one at
http://mozilla.org/MPL/2.0/.
*/
package com.freerdp.freerdpcore.utils;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Locale;
public class RDPFileParser
{
private static final int MAX_ERRORS = 20;
private static final int MAX_LINES = 500;
private HashMap<String, Object> options;
public RDPFileParser()
{
init();
}
public RDPFileParser(String filename) throws IOException
{
init();
parse(filename);
}
private void init()
{
options = new HashMap<String, Object>();
}
public void parse(String filename) throws IOException
{
BufferedReader br = new BufferedReader(new FileReader(filename));
String line = null;
int errors = 0;
int lines = 0;
boolean ok;
while ((line = br.readLine()) != null)
{
lines++;
ok = false;
if (errors > MAX_ERRORS || lines > MAX_LINES)
{
br.close();
throw new IOException("Parsing limits exceeded");
}
String[] fields = line.split(":", 3);
if (fields.length == 3)
{
if (fields[1].equals("s"))
{
options.put(fields[0].toLowerCase(Locale.ENGLISH), fields[2]);
ok = true;
}
else if (fields[1].equals("i"))
{
try
{
Integer i = Integer.parseInt(fields[2]);
options.put(fields[0].toLowerCase(Locale.ENGLISH), i);
ok = true;
}
catch (NumberFormatException e)
{
}
}
else if (fields[1].equals("b"))
{
ok = true;
}
}
if (!ok)
errors++;
}
br.close();
}
public String getString(String optionName)
{
if (options.get(optionName) instanceof String)
return (String)options.get(optionName);
else
return null;
}
public Integer getInteger(String optionName)
{
if (options.get(optionName) instanceof Integer)
return (Integer)options.get(optionName);
else
return null;
}
}