// set_webRelay // Issue an HTTP GET command to toggle the WebRelay relay // requires 2 arguments, the relay # (1-4) and state (1 for on 0 for off) // http://cboard.cprogramming.com/c-programming/124937-http-get-request.html // Code posted by aosmith // Modified by csherwood@usgs.gov, emontgomery@usgs.gov #include #include #include #include #include #include #include #include #include void error(char *msg); int main (int argc, const char * argv[]) { int serverSocket; size_t bWritten, bTotal; struct sockaddr_in serverAddr; //char *ip = "192.168.3.102"; char *ip = "128.128.205.112"; int ier; int relay = 1; int state = 0; char request[512]; printf("%s rev.0\n", argv[0]); if (argc < 3) { printf("Usage: requires 2 arguments, the relay # (1-4) and state (1 for on 0 for off)\n"); exit(-1); } state=atoi(argv[2]); relay=atoi(argv[1]); memset(&serverAddr, 0, sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(80); serverAddr.sin_addr.s_addr = inet_addr(ip); sprintf(request, "GET /state.xml?relay%dState=%d HTTP/1.1\r\n%s\r\n\r\n", relay,state,ip); printf("Requesting: %s\n", request); serverSocket = socket(AF_INET, SOCK_STREAM, 0); if (serverSocket < 0) error("socket()"); if (connect(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) error("connect()"); for (bTotal = 0; bTotal < strlen(request); bTotal += bWritten) { bWritten = write(serverSocket, &request[bTotal], strlen(request) - bTotal); if (bWritten == 0) break; } if (ier=(close(serverSocket) != 0)) printf("close(serverSocket) failed; returned: %d\n",ier); else printf("serverSocket successfully closed!\n"); exit(0); } void error(char *msg) { printf("Error: %s\n", msg); perror(""); exit(0); }