コード例 #1
0
ファイル: lokmaus2.c プロジェクト: GBert/railroad
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;
}
コード例 #2
0
ファイル: lokmaus2.c プロジェクト: GBert/railroad
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;
}
コード例 #3
0
ファイル: clone-cs2-config.c プロジェクト: kprzeb/railroad
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;
}