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(); }
/******************************************************** * 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"); }
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; }
/******************************************************** * 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; }
/******************************************************** * 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); }
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; }
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; }