Exemplo n.º 1
0
int parse_url(const char *urlstr,char *proto,char *user,char *pass,char *host,int *port,char *path)
{
	const char *ptr,*ptr2;
	char hostpart[1000];
	int ret;

	ptr2 = urlstr;
	if(!(ptr = strchr(urlstr,':'))){return -1;}
	strncpy2(proto,ptr2,ptr-ptr2);
	ptr2 = ptr+1;
	
	tolowerstr(proto);
	if(strcmp(proto,"ftp")==0 || strcmp(proto,"http")==0){
		if(strncmp(ptr2,"//",2)==0){ptr2+=2;}else{return -1;}
		if(ptr = strchr(ptr2,'/')){
			strncpy2(hostpart,ptr2,ptr-ptr2);
			strcpy(path,ptr);
		}else{
			strcpy(hostpart,ptr2);
			strcpy(path,"/");
		}
		ret = parse_hostpart(hostpart,user,pass,host,port);
		if(ret==-1){return -1;}
		if(*port=='\0' && strcmp(proto,"ftp")==0){*port = 21;}
		if(*user=='\0' && strcmp(proto,"ftp")==0){strcpy(user,"anonymous");}
		if(*port=='\0' && strcmp(proto,"http")==0){*port = 80;}
	}else if(strcmp(proto,"mailto")==0){
	        ret = parse_hostpart(ptr2,user,pass,host,port);
		if(ret==-1){return -1;}
		if(*port=='\0' && strcmp(proto,"mailto")==0){*port = 25;}
	}else{
		return -1;
	}
	return 0;
}
Exemplo n.º 2
0
const char *plainconf::getRealName(char *name)
{
    assert(bKeywordsInited == true);
    tolowerstr(name);
    HashStringMap<plainconfKeywords *>::iterator it = allKeyword.find(name);

    if (it == allKeyword.end())
        return NULL;
    else
        return it.second()->name;
}
Exemplo n.º 3
0
int parse_hostport(const char *hostport,char *host,int *port)
{
	char *ptr;

	if(ptr=strchr(hostport,':')){
		*port = atoi(ptr+1);
		strncpy2(host,hostport,ptr-hostport);
	}else{
		strcpy(host,hostport);
		*port = 0;
	}
	tolowerstr(host);
	return 0;	
}
Exemplo n.º 4
0
Result TestCaseDrv::exec(const string& fileName) throw (Exception)
{
	const string fileHeadSignature = "[testcase]";	/// debe estar en minuscula

	int lineNumber = 0;
	string textLine;
	Result result(Result::ok);

	try {
		ifstream ifs(fileName.c_str());
        if (!ifs) throw InvalidTestException("no se encuentra el archivo");

		ObjectTable symbolTable;

		getline(ifs, textLine);
		tolowerstr(trim(textLine));
		if (textLine != fileHeadSignature)						
			throw FileFormatException(fileName, 
					"encabezado incorrecto (no es [testcase])");	

		lineNumber++;

		while (!ifs.eof()) {
			getline(ifs, textLine);
			trim(textLine);
			lineNumber++;

			if (!textLine.empty() and textLine[0] != '#') {
				#ifndef NDEBUG
				cout << " DEBUG " << " cmd: " << textLine << endl; //! DEBUG
				#endif
				cmd::exec(textLine, symbolTable, result);
			}
		}
	}

	// TODO: hay que factorizar el código que sigue. está despolijro.

	catch (ErrorTestException& e) {
		return Result(Result::error, "caso de test: " + fileName + '\n' + 
			"linea " + toString<int>(lineNumber) + ": " + textLine + '\n' + 
			"problema: " + e.message());
	}
	catch (InvalidTestException& e) {
		// TODO tengo la sospecha de que este código es inalcanzable. revisarlo.
		// debiera venirse acá cuando hay parámetros de más, de menos, errores
		// de tipo y cosas similares. en todo caso, puede que haya que corregir
		// cmd.cpp en lugar de quitar esta sección.
		return Result(Result::invalid, "caso de test: " + fileName + '\n' + 
				"linea " + toString<int>(lineNumber) + ": " + textLine + '\n' + 
				"problema: " + e.message());
		// FIXME: ojo. invalidTest también es arrojada por fileNotFound y se ve
		// feíto que el error diga "linea 0: problema: bla, bla". no me gusta el
		// "linea 0". :-(
	}
	catch (std::ios_base::failure& e) {
		return Result(Result::invalid, "caso de test: " + fileName + '\n' +
			"linea " + toString<int>(lineNumber) + ": " + textLine + '\n' +
			"problema: E/S incorrecta - " + e.what() + '\n' +
			"esta es una excepcion tal vez causada por el operador >> o el <<, por la falta de un parametro, " +
			"por haberse encontrado un tipo de datos no esperado, o vaya uno a saber por que. " +
			"quiero creer que escribiste 'true' y 'false' BIEN y en minusculas.");
	}
	catch (BadTypeException& e) {
		return Result(Result::invalid, "caso de test: " + fileName + '\n' +
			"linea " + toString<int>(lineNumber) + ": " + textLine + '\n' + 
			"problema: " + e.message());
	}
    catch (FileFormatException& e) {
		return Result(Result::invalid, "caso de test: " + e.fileName() + '\n' + 
			"problema: formato invalido - "  + e.message());
    }
	catch (UsageException& e) {
		throw UsageException("caso de test: " + fileName + '\n' + 
				"linea " + toString<int>(lineNumber) + ": " + textLine + '\n' +
				"problema:  " + e.message()); // sube como Exception
		// TODO para uniformar, ver si conviene que esta excepción también
		// suba como Result::invalid o algo así. si se encuentra una buena razón
		// para que no suceda, habría que documentarla.
	}

	return result;
}