int check_data(int tcp_socket, unsigned char *frame) { if (memcmp(&frame[0], RESP_LM2_0, 3) == 0) { // memcpy(frame, GET_LM2, sizeof(GET_LM2)); memcpy(frame, RESP_LM2_2, sizeof(RESP_LM2_2)); netframe_to_net(tcp_socket, frame, sizeof(RESP_LM2_2)); memcpy(frame, GET_LM2, sizeof(GET_LM2)); netframe_to_net(tcp_socket, frame, sizeof(GET_LM2)); } if (memcmp(&frame[0], RESP_LM2_1, 3) == 0) { // memcpy(frame, GET_LM2, sizeof(GET_LM2)); memcpy(frame, RESP_LM2_3, sizeof(RESP_LM2_3)); netframe_to_net(tcp_socket, frame, sizeof(RESP_LM2_3)); /* usec_sleep(900000); memcpy(frame, GET_LM2, sizeof(GET_LM2)); netframe_to_net(tcp_socket, frame, sizeof(GET_LM2)); */ } return 0; }
int main(int argc, char **argv) { int ret, sockfd, tcp_packet_nr, n = 1; fd_set rset; struct sockaddr_in servaddr; unsigned char netframe[FRAME_SIZE]; unsigned char recvline[MAXSIZE]; char timestamp[16]; if (argc != 2) { fprintf(stderr, "usage: %s <IP address>\n", argv[0]); exit(EXIT_FAILURE); } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "can't create TCP socket: %s\n", strerror(errno)); exit(EXIT_FAILURE); } memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; if (inet_aton((argv[1]), (struct in_addr *)&servaddr.sin_addr.s_addr) == 0) { fprintf(stderr, "invalid address : %s\n", strerror(errno)); exit(EXIT_FAILURE); } servaddr.sin_port = htons(XNTCPPORT); if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr))) { fprintf(stderr, "can't connect to TCP socket : %s\n", strerror(errno)); exit(EXIT_FAILURE); } memcpy(netframe, GET_LM2, 1); netframe_to_net(sockfd, netframe, sizeof(GET_LM2)); FD_ZERO(&rset); tcp_packet_nr = 0; for (;;) { FD_SET(sockfd, &rset); ret = select(sockfd + 1, &rset, NULL, NULL, NULL); if (ret < 0) { fprintf(stderr, "socket error: %s\n", strerror(errno)); exit(EXIT_FAILURE); } tcp_packet_nr++; if (FD_ISSET(sockfd, &rset)) { if ((n = recv(sockfd, recvline, MAXSIZE, 0)) > 0) { print_net_frame(recvline, n); check_data(sockfd, recvline); } else if (n == 0) { fprintf(stderr, "%s server closed connection\n", timestamp); close(sockfd); exit(EXIT_FAILURE); } else { time_stamp(timestamp); fprintf(stderr, "%s received packet with error: %d %s\n", timestamp, n, strerror(errno)); exit(EXIT_FAILURE); } } } return 0; }
int main(int argc, char **argv) { int i, sockfd, ddi, tcp_packet_nr, n = 1; int temp, config_data_start, config_data_stream, deflated_size; struct config_data config_data; struct sockaddr_in servaddr; fd_set rset; unsigned char netframe[FRAME_SIZE]; unsigned char recvline[MAXSIZE]; if (argc != 3) { fprintf(stderr, "usage: %s <dir_to_write> <IP address>\n", argv[0]); exit(EXIT_FAILURE); } #if 0 if (strlen(argv[1]) > 7) { fprintf(stderr, "config name to long\n"); exit(EXIT_FAILURE); } else { if ((config_data.name = malloc(strlen(argv[1] + 4)))) { config_data.name[0] = '\0'; strcat(config_data.name, argv[1]); strcat(config_data.name, ".cs2"); } else { fprintf(stderr, "can't malloc config %s.z file name\n", argv[1]); exit(EXIT_FAILURE); } } #endif if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "can't create TCP socket: %s\n", strerror(errno)); exit(EXIT_FAILURE); } memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; if (inet_aton((argv[2]), (struct in_addr *)&servaddr.sin_addr.s_addr) == 0) { fprintf(stderr, "invalid address: %s\n", strerror(errno)); exit(EXIT_FAILURE); } servaddr.sin_port = htons(15731); if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr))) { fprintf(stderr, "can't connect to TCP socket: %s\n", strerror(errno)); exit(EXIT_FAILURE); } memset(netframe, 0, FRAME_SIZE); memcpy(netframe, GETCONFIG, 5); memcpy(&netframe[5], argv[1], strlen(argv[1])); if (netframe_to_net(sockfd, netframe, FRAME_SIZE)) { fprintf(stderr, "can't send data on TCP socket: %st\n", strerror(errno)); exit(EXIT_FAILURE); } FD_ZERO(&rset); tcp_packet_nr = 0; config_data_start = 0; config_data_stream = 0; for (;;) { FD_SET(sockfd, &rset); if (select(sockfd + 1, &rset, NULL, NULL, NULL) < 0) { fprintf(stderr, "socket error: %s\n", strerror(errno)); exit(EXIT_FAILURE); } tcp_packet_nr++; if (FD_ISSET(sockfd, &rset)) { if ((n = recv(sockfd, recvline, MAXSIZE, 0)) > 0) { if (memcmp(recvline, GETCONFIG_RESPONSE, 5) == 0) { memcpy(&temp, &recvline[5], 4); deflated_size = ntohl(temp); config_data.deflated_size = deflated_size; memcpy(&temp, &recvline[9], 2); config_data.crc = ntohs(temp); printf("\nstart of config - deflated size: 0x%08x crc 0x%04x", deflated_size, config_data.crc); config_data_start = 1; /* we alloc 8 bytes more to be sure that it fits */ config_data.deflated_data = malloc(deflated_size + 16); if (config_data.deflated_data == NULL) { fprintf(stderr, "can't malloc deflated config data buffer - size 0x%04x\n", deflated_size + 8); exit(EXIT_FAILURE); } /* deflated data index */ ddi = 0; } for (i = 0; i < n; i++) { if ((i % FRAME_SIZE) == 0) { if (memcmp(&recvline[i], GETCONFIG_DATA, 5) == 0) { memcpy(&config_data.deflated_data[ddi], &recvline[i + 5], 8); ddi += 8; if (config_data_start) { memcpy(&temp, &recvline[i + 5], 4); config_data.inflated_size = ntohl(temp); printf("\ninflated size: 0x%08x", config_data.inflated_size); config_data.inflated_data = malloc(config_data.inflated_size); if (config_data.inflated_data == NULL) { fprintf(stderr, "can't malloc inflated config data buffer - size 0x%04x\n", config_data.inflated_size); exit(EXIT_FAILURE); } config_data_start = 0; config_data_stream = 1; deflated_size -= 8; } else if (config_data_stream) { if (deflated_size <= 8) { config_data_stream = 0; config_data.deflated_stream_size = ddi; config_write(&config_data); exit(EXIT_SUCCESS); } else { deflated_size -= 8; } } } printf("\n %04d: ", tcp_packet_nr); } printf("%02x ", recvline[i]); } printf("\n"); } } } return 1; }