Esempio n. 1
0
int main(int argc, char *argv[], char **envp)
{
	if(argc != 2)
	{
		printf("Please check your arguments.");
		return -1;
	}

	// Get Port number
	char *p;
	int port, errno = 0;
	long conv = strtol(argv[1], &p, 10);
	// printf("%d\n", conv);

	// Check for errors: e.g., the string does not represent an integer
	// or the integer is larger than int
	if (errno != 0 || *p != '\0' || conv <= INT_MIN) {
	    // Put here the handling of the error, like exiting the program with
	    // an error message
	    fprintf(stderr, "Invalid port number.\n");
	} else {
	    port = conv;    
	}

	listenOnPort(port);
}
/* Initial setup. */
void RemoteHomeWifi::setup() {
    nodeId = EEPROM.read(EEPROM_POSITION_NODE_ID);
    if (nodeId == 255) nodeId = 0;
    pinMode(ENABLE_PIN, OUTPUT);
    enable();
    cleanVariablesAfterProcessing();
    delay(1010);
    for (int i=0;i<3;i++) printString(AT_PLUS_MARK);
    delay(1010);
    sendATCommand(AT_CMD_RST, ANSWER_READY);
    pinMode(LED, OUTPUT);
    digitalWrite(LED, HIGH);
    if (!waitToConnectToNetwork(50)) {
        connectedToWifi = false;
        becomeAdHocNetwork();
        digitalWrite(LED, LOW);
        delay(1000);
        digitalWrite(LED, HIGH);
        delay(1000);
        digitalWrite(LED, LOW);
    } else {
        setSingleJoinNetwork();
        connectedToWifi = true;
        digitalWrite(LED, LOW);
    }
    setDefaultSerialTimeout();
    listenOnPort();
}
Esempio n. 3
0
/********************************************************
 * server2
 * general		without select
 ********************************************************/
void server2()
{
	int masterSocket, connectedMasterSocket, numberOfFiles, *filesSocketsArr, *freePortsArr, * connectedFilesSocketsArr;
	struct file* files;

	//(1)listen on control master_socket
	masterSocket = listenOnPort(CONTROL_PORT);

	while(1){
		//(2)accept new connection form master_socket
		puts("\n------------(1)wait for connection--------------");
		connectedMasterSocket  = acceptConnection(masterSocket);

		//(3)get port Number from client
		puts("\n------------(2)get number of files--------------");
		numberOfFiles = getIntFromClient(connectedMasterSocket,"numberOfFiles");

		//(4)listen to socket on random free ports
		puts("\n------------(3)listen on random ports--------------");
		filesSocketsArr  = listenOnSocketWithFreePorts(numberOfFiles);

		//(5)get filesSockets port
		puts("\n------------(4)random ports--------------");
		freePortsArr = getPortNumberFromSockets(filesSocketsArr, numberOfFiles);

		//(6)send to client the free ports
		puts("\n------------(5)send free ports to client--------------");
		SendIntArrayToClient(connectedMasterSocket,freePortsArr, numberOfFiles ,"freePortsArr");

		//(7)accept connection from each of the socket in filesSocketsArr
		puts("\n------------(6)accept connection from new sockets--------------");
		connectedFilesSocketsArr = accept_connection_from_array_of_sockets(filesSocketsArr, numberOfFiles, "filesSocketsArr");

		//(8)get file from each of the socket in connectedFilesSocketsArr
		puts("\n------------(7)get files--------------");
		files = get_files_from_array_of_sockets(connectedFilesSocketsArr, numberOfFiles);

		//(8)get file from each of the socket in connectedFilesSocketsArr
		puts("\n------------(8)save files--------------");
		writeFiles(files, numberOfFiles);

		//(9)close master_socket, client_socket and all the socket in filesSockets
		puts("\n------------(9)close sockets--------------");
		closeSocket(connectedMasterSocket);
		closeSockets(filesSocketsArr, numberOfFiles, "filesSocketsArr");
		closeSockets(connectedFilesSocketsArr, numberOfFiles, "connectedFilesSocketsArr");

		//(10)free filesSocketsArr and freePortsArr
		puts("\n------------(10)free memory--------------");
		myFree(connectedFilesSocketsArr,"connectedFilesSocketsArr");
		myFree(filesSocketsArr,"filesSocketsArr");
		myFree(freePortsArr,"freePortsArr");
		freeFiles(files, numberOfFiles,"files");
	}
	closeSocket(masterSocket);

	puts("server close");
}
Esempio n. 4
0
pthread_t daemonStart(unsigned int window, unsigned short basePort, char *logName) {
    pthread_t thread;
    
    ViewerWindow = window;
    initLog(logName);
    daemonPort = findPort(basePort,DEFAULT_END);
    srvSock = listenOnPort(daemonPort);
    fprintf(logfd, "\nSet GLSTUB var in guest to point to port %hu\n", daemonPort);
    if (pthread_create(&thread,NULL,acceptLoop,NULL))
	fail("couldn't create thread");

    return thread;
}
Esempio n. 5
0
/********************************************************
 * listenOnSocketWithFreePorts
 * return:  sockets array
 ********************************************************/
int* listenOnSocketWithFreePorts(int numberOfPorts)
{
	int * FilesSockets,i;
	arrIntMalloc(&FilesSockets, numberOfPorts, "FilesSocket");

	puts("listenOnFreePorts");
	for(i=0; i< numberOfPorts; i++){
		printf("(%d) ",i);
		FilesSockets[i] = listenOnPort(0);
	}

	return FilesSockets;
}
Esempio n. 6
0
/********************************************************
 * server1
 * general			i divided the socket to two groups:
 * 					(1) socket that bind to the control port
 * 					(2) all the other socket (upload the files)
 ********************************************************/
void server1()
{
	fd_set readfds;
	int max_sd, masterSocket;
	struct clientNode* clientsList;

	clientsList=NULL;

	//listen on control port
	puts("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
	puts("~~~~~~~~~~~~(0)listen on control port~~~~~~~~~~~~");
	puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
	masterSocket = listenOnPort(CONTROL_PORT);

	while(1)
	{
		printf("\ndebug mallocNum = %d\n",mallocNum);

		//initSet
		puts("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
		puts("~~~~~~~~~~~~(1)initSet~~~~~~~~~~~~");
		puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
		max_sd = initSet(&readfds, clientsList, masterSocket);

		//select
		if (select( max_sd + 1 , &readfds , NULL , NULL , NULL) < 0) {
			perror("select");
		}

		//handle connection event
		if(FD_ISSET(masterSocket, &readfds))
		{
			puts("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
			puts("~~~~~~~~~~~~(2)handleControlPortEvent~~~~~~~~~~~~");
			puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
			handleControlPortEvent(masterSocket,&clientsList);

		//handle clients event
		}else
		{
			puts("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
			puts("~~~~~~~~~~~~(3)handleFilesPortsEvents~~~~~~~~~~~~");
			puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
			handleFilesPortsEvents(&clientsList, readfds);
		}
	}

	closeSocket(masterSocket);

}
Esempio n. 7
0
Server * makeServer(unsigned short port)
{
    //start with the empty server
    Server * srv = NULL;

    srv = malloc(sizeof(srv));
    if(!srv) return NULL;
    
    servOff(srv);
    srv->socket       = listenOnPort(port);
    srv->port         = port;
    srv->errOut       = stderr;
    srv->serverThread = (pthread_t) 0;
    
    if(!(srv->socket)) return NULL;

    return srv;
}
Esempio n. 8
0
Server * makeServer(unsigned short port)
{
    //start with the empty server
    Server srv;

    memset(&srv.controls, 0, sizeof(srv.controls));
    srv.socket       = listenOnPort(port);
    srv.port         = port;
    //srv.errOut     = stderr;
    srv.serverThread = (pthread_t) 0;
    srv.queueLen     = QUEUELEN;
    srv.conList      = NULL;

    if(!(srv.socket)) return NULL;

    DEBUGOUT("makeServer successful\n");
    return advMakeServ(srv);
}
/* This will process library data. It will return true, if nothing was processing -> the data are for the sketch, otherwise, it returns false, so the data are processed here
 * and nothing should be processed by the sketch.
 */
boolean RemoteHomeWifi::processCommonData() {
    if (stringComplete) {
        if (inputString.startsWith(" ")) {
            //wifi config
            createTableWithForm(WIFI_CONFIG, WIFI_CONFIG_ACTION);
            char* netName = getNetworkName();
            createTextBoxTableRow(CAPTION_WIFI_SSID, ACTION_S, netName, MAXSIZE_32);
            free(netName);
            createTextBoxTableRow(CAPTION_WIFI_PWD, ACTION_P, "", MAXSIZE_64);
            createTextBoxTableRow(CAPTION_WIFI_IP, ACTION_I, "", MAXSIZE_15);
            createSubmitButton();
            endTableWithForm();
        } else if (inputString.startsWith("ca")) {
            //device config
            createTableWithForm(DEVICE_CONFIG, DEVICE_CONFIG_ACTION);
            char* ip = readIpAddrFromEEPROM(EEPROM_POSITION_SERVER_IP);
            createTextBoxTableRow(CAPTION_SERVER_IP, ACTION_S, ip, MAXSIZE_15);
            free(ip);
            createTextBoxTableRow(CAPTION_SERVER_PORT, ACTION_P, readIntFromEEPROM(EEPROM_POSITION_SERVER_PORT), MAXSIZE_5);
            createTextBoxTableRow(CAPTION_PGM_PORT, ACTION_R, readIntFromEEPROM(EEPROM_POSITION_SERVER_PROGPORT), MAXSIZE_5);            
            createTextBoxTableRow(CAPTION_DEVICE_ID, ACTION_D, readByteFromEEPROM(EEPROM_POSITION_NODE_ID), MAXSIZE_4);            
            if (0 != fpAppendConfigTable) (*fpAppendConfigTable)();
            createSubmitButton();
            endTableWithForm();
        } else if (inputString.startsWith("cb")) {
            //sketch upload
            pageHeadString = F("<meta http-equiv='refresh' content=\"60;URL='/'\"/>");
            outputString = F("<p>Programming, the page is going to reload after 1 min.</p>");
            sendPageWithMenuAndHeaderResponse();
            delay(30);
            cleanVariablesAfterProcessing();
            if (establishConnectionToServer(true, EEPROM_POSITION_SERVER_IP, EEPROM_POSITION_SERVER_PROGPORT)) {
                delay(10);
                _ser.print((byte)1);
                if (!_ser.find("a")) {
                    setup();
                }               
            }
        } else if (inputString.startsWith("cc")) {
                //it is join network request cc?s=SSID&p=Password&i=192.168.1.30 HTTP/1.1
                skipInputToChar('=');
                String ssid = inputString.substring(0,inputString.indexOf('&'));
                skipInputToChar('=');
                String password = inputString.substring(0,inputString.indexOf('&'));
                skipInputToChar('=');
                String ip = inputString.substring(0,inputString.indexOf(' '));
                pageHeadString = F("<meta http-equiv='refresh' content=\"25;URL='");
                if (ip.length() != 0) {
                    pageHeadString += F("http://");
                    pageHeadString += ip;
                    pageHeadString += F("/");
                }
                pageHeadString += F("cd'\"/>");
                outputString = F("<p>Connecting, please wait, the result is going to be displayed within 25 seconds...</p>");
                sendPageWithMenuAndHeaderResponse();
                if (!joinNetwork(ssid, password, ip)) {
                    becomeAdHocNetwork();
                    listenOnPort();
                    connectedToWifi = false;
                }
                cleanVariablesAfterProcessing();
        } else if (inputString.startsWith("cd")) {
                if (waitToConnectToNetwork(1)) {
                    outputString = F("<p>Connected:<b>");
                    outputString += getIPAddress();
                    outputString += F("</b><BR>Please reserve the IP in your router.</p>");
                    sendPageWithMenuAndHeaderResponse();
                    delay(1000);
                    setSingleJoinNetwork();
                    outputString = "";
                } else {
                    outputString = F("<p>Not connected, please try again.</p>");
                }
        } else if (inputString.startsWith("ce")) {
            //it is configure device: ce?s=192.168.1.2&p=8080&r=8081&d=1&e=0 HTTP/1.1
            saveIpAddrToEEPROM(EEPROM_POSITION_SERVER_IP);
            saveIntToEEPROM(EEPROM_POSITION_SERVER_PORT);
            saveIntToEEPROM(EEPROM_POSITION_SERVER_PROGPORT);
            saveByteToEEPROM(EEPROM_POSITION_NODE_ID);
            nodeId = EEPROM.read(EEPROM_POSITION_NODE_ID);
            if (0 != fpSaveConfigValues) (*fpSaveConfigValues)();
            outputString = F("<p>Configured.</p>");
        } else {
            return true;
        }
        if (outputString.length()!=0) {
            sendPageWithMenuAndHeaderResponse();
        }
        cleanVariablesAfterProcessing();
        return false;                                
    }
    return true;
}