Sophie

Sophie

distrib > Fedora > 18 > x86_64 > by-pkgid > 55494225df0b8698de1a4d424d8d98b3 > files > 63

UpTools-devel-8.6.3-2.fc18.i686.rpm

/* UpTools v8.6
 *
 * Copyright (c) 2005-2013 Fundacion Universidad de Palermo (Argentina).
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. Neither the name of the copyright holder nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * 4. Redistributions of any form whatsoever must retain the following
 *    acknowledgment: 'This product includes software developed by the
 *    "Universidad de Palermo, Argentina" (http://www.palermo.edu/).'
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include <UpTools/UpInet.h> 
#include <UpTools/UpLine.h>
#include <iostream>
using namespace std;


#define EXITERROR { \
	cerr << "usage: " << argv[0] \
	     << "[ -k [tokenlist]] [-t timeout] [-j] [-u] [-l]" \
	     << endl; \
    return 1;\
}

#define BINDADDR "localhost 2000"

int main(int argc, char* argv[]) {
	bool tokens=false;
	UpLine reader;
	reader.acceptUnterminatedLines(false);
	reader.acceptLongLines(false);
	reader.joinSeparators(false);
	reader.setTimeout(10);
	int argx=1;
	for(argx=1;argx<argc;argx++) {
		if(!strcmp("-t",argv[argx])) {
			argx++;
			if(argc>=argx) reader.setTimeout(atoi(argv[argx]));
			else EXITERROR;
		} else if(!strcmp("-k",argv[argx])) {
			tokens=true;
			if( (argc>(argx+1)) && (*(argv[argx+1])!='-') ) {
				argx++;
				reader.setSeparators(argv[argx],strlen(argv[argx]));
			}
		} else if(!strcmp("-u",argv[argx])) {
			reader.acceptUnterminatedLines(true);
		} else if(!strcmp("-l",argv[argx])) {
			reader.acceptLongLines(true);
		} else if(!strcmp("-j",argv[argx])) {
			reader.joinSeparators(true);
		} else EXITERROR;
	}

	UpSocket s,c;
	s.bind(BINDADDR);
	s.listen(10);
	cout << "accepting connections at " << BINDADDR << endl;
	s.accept(c);
	cout << "connection accepted from " << c.getRemoteSockAddr() << endl;
	reader.setFd(c.fd());

	const char* line;
	int emptyLineCount=0;
	for(;;) {
		line = tokens ? reader.getToken() : reader.getLine();
		if(!line) {
			cout << "error: " << reader.getStatus() << endl;
			if(++emptyLineCount==3) return 1;
			continue;
		}
		if(!strcmp(line,"exit")) break;
		cout << (tokens?"token read (":"line read (") << reader.getLen() << ") ("
			  << reader.getStatus() << "):" << line << endl;
	}

	return 0;
}