| | |
| | | #include "net_mod_server_socket_wrapper.h" |
| | | #include "net_mod_socket_wrapper.h" |
| | | #include "shm_mm.h" |
| | | #include "dgram_mod_socket.h" |
| | | #include "usg_common.h" |
| | | #include <getopt.h> |
| | | |
| | | typedef struct Targ { |
| | | int port; |
| | |
| | | |
| | | }Targ; |
| | | |
| | | void server(int port) { |
| | | void start_net_proxy(int port) { |
| | | printf("Start net proxy\n"); |
| | | void *serverSocket = net_mod_server_socket_open(port); |
| | | if(net_mod_server_socket_start(serverSocket) != 0) { |
| | | err_exit(errno, "net_mod_server_socket_start"); |
| | | } |
| | | } |
| | | |
| | | void client(int port ){ |
| | | void start_net_client(int port ){ |
| | | void * client = net_mod_socket_open(); |
| | | char content[MAXLINE]; |
| | | char action[512]; |
| | | char topic[512]; |
| | | int buskey; |
| | | |
| | | int recv_arr_size, i, n; |
| | | |
| | |
| | | net_mod_socket_free_recv_msg_arr(recv_arr, recv_arr_size); |
| | | } |
| | | } |
| | | else if(strcmp(action, "desub") == 0) { |
| | | printf("Please input buskey topic!\n"); |
| | | |
| | | scanf("%d %s", buskey, topic); |
| | | if (net_mod_socket_desub(client, topic, strlen(topic), buskey) == 0) { |
| | | printf("%d Desub success!\n", net_mod_socket_get_key(client)); |
| | | } else { |
| | | printf("Desub failture!\n"); |
| | | exit(0); |
| | | } |
| | | |
| | | } |
| | | else if(strcmp(action, "sub") == 0) { |
| | | printf("Please input topic!\n"); |
| | | scanf("%s", topic); |
| | | if (net_mod_socket_sub(client, topic, strlen(topic), buskey) == 0) { |
| | | printf("%d Sub success!\n", net_mod_socket_get_key(client)); |
| | | } else { |
| | | printf("Sub failture!\n"); |
| | | exit(0); |
| | | } |
| | | |
| | | } |
| | | else if(strcmp(action, "quit") == 0) { |
| | | break; |
| | | } else { |
| | |
| | | return (void *)i; |
| | | } |
| | | |
| | | void mclient(int port) { |
| | | void start_net_mclient(int port) { |
| | | |
| | | int status, i = 0, processors = 1; |
| | | void *res[processors]; |
| | |
| | | // fflush(stdout); |
| | | } |
| | | |
| | | void start_bus_server(int key) { |
| | | printf("Start bus server\n"); |
| | | void * server_socket = net_mod_socket_open(); |
| | | |
| | | net_mod_socket_bind(server_socket, key); |
| | | |
| | | net_mod_socket_start_bus(server_socket); |
| | | } |
| | | |
| | | |
| | | |
| | | void start_reply(int key) { |
| | | void *socket = net_mod_socket_open(); |
| | | net_mod_socket_bind(socket, key); |
| | | int size; |
| | | void *recvbuf; |
| | | char sendbuf[512]; |
| | | int rv; |
| | | int remote_port; |
| | | while ( (rv = net_mod_socket_recvfrom(socket, &recvbuf, &size, &remote_port) ) == 0) { |
| | | printf( "server: RECEIVED REQUEST FROM PORT %d NAME %s\n", remote_port, recvbuf); |
| | | sprintf(sendbuf, "RECEIVED PORT %d NAME %s", remote_port, recvbuf); |
| | | net_mod_socket_sendto(socket, sendbuf, strlen(sendbuf) + 1, remote_port); |
| | | free(recvbuf); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | void usage(char *name) |
| | | { |
| | | fprintf(stderr, "Usage: %s [OPTIONS] [ARG...]\n\n", name); |
| | | fprintf(stderr, "Test net mod socket\n\n"); |
| | | fprintf(stderr, "Options:\n\n"); |
| | | #define fpe(str) fprintf(stderr, " %s", str); |
| | | fpe("-f, --funciton Function name\n"); |
| | | fpe("-p, --port TCP/IP Port\n"); |
| | | fpe("-k, --key SHM Key\n"); |
| | | fpe("\n"); |
| | | } |
| | | |
| | | struct argument_t { |
| | | char *fun; |
| | | int port; |
| | | int key; |
| | | char **cmd_arr; |
| | | int cmd_arr_len; |
| | | }; |
| | | |
| | | argument_t parse_args (int argc, char *argv[]) |
| | | { |
| | | int c; |
| | | |
| | | if(argc < 2) { |
| | | usage(argv[0]); |
| | | exit(1); |
| | | } |
| | | |
| | | if(argc == 2 && strcmp(argv[1], "--help") == 0) { |
| | | usage(argv[0]); |
| | | exit(0); |
| | | } |
| | | |
| | | |
| | | argument_t mopt = {}; |
| | | |
| | | // mopt.volume_list_size = 0; |
| | | |
| | | opterr = 0; |
| | | |
| | | static struct option long_options[] = |
| | | { |
| | | /* These options set a flag. */ |
| | | |
| | | {"fun", required_argument, 0, 'f'}, |
| | | {"key", required_argument, 0, 'k'}, |
| | | {"port", required_argument, 0, 'p'}, |
| | | {0, 0, 0, 0} |
| | | }; |
| | | /* getopt_long stores the option index here. */ |
| | | int option_index = 0; |
| | | while (1) |
| | | { |
| | | |
| | | |
| | | c = getopt_long (argc, argv, "+f:k:p:", long_options, &option_index); |
| | | |
| | | /* Detect the end of the options. */ |
| | | if (c == -1) |
| | | break; |
| | | |
| | | switch (c) |
| | | { |
| | | case 0: |
| | | // printf("ffffffff\n"); |
| | | /* If this option set a flag, do nothing else now. */ |
| | | if (long_options[option_index].flag != 0) |
| | | break; |
| | | printf ("option %s", long_options[option_index].name); |
| | | if (optarg) |
| | | printf (" with arg %s", optarg); |
| | | printf ("\n"); |
| | | break; |
| | | |
| | | case 'f': |
| | | mopt.fun = optarg; |
| | | break; |
| | | |
| | | case 'k': |
| | | mopt.key = atoi(optarg); |
| | | break; |
| | | |
| | | case 'p': |
| | | // printf ("==name with value `%s'\n", optarg); |
| | | mopt.port = atoi(optarg); |
| | | break; |
| | | |
| | | case '?': |
| | | // printf ("==? optopt=%c, %s, `%s', %d\n", optopt, optarg, argv[optind], optind); |
| | | /* getopt_long already printed an error message. */ |
| | | usage(argv[0]); |
| | | exit(1); |
| | | break; |
| | | |
| | | default: |
| | | //printf ("==default optopt=%c, %s, `%s'\n",optopt, optarg, argv[optind]); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | // printf ("optind = %d, argc=%d \n", optind, argc); |
| | | /* Print any remaining command line arguments (not options). */ |
| | | if (optind < argc) |
| | | { |
| | | mopt.cmd_arr = &argv[optind]; |
| | | mopt.cmd_arr_len = argc - optind; |
| | | // printf ("non-option ARGV-elements: "); |
| | | // while (optind < argc) |
| | | // printf ("%d, %d, %s \n", optind, argc, argv[optind++]); |
| | | // putchar ('\n'); |
| | | } |
| | | return mopt; |
| | | |
| | | } |
| | | int main(int argc, char *argv[]) { |
| | | shm_init(512); |
| | | |
| | | argument_t opt = parse_args(argc, argv); |
| | | |
| | | int port; |
| | | if (argc < 3) { |
| | | fprintf(stderr, "Usage: %s %s|%s <PORT> \n", argv[0], "server", "client"); |
| | | return 1; |
| | | } |
| | | |
| | | port = atoi(argv[2]); |
| | | // port = atoi(argv[2]); |
| | | |
| | | |
| | | if (strcmp("server", argv[1]) == 0 ) { |
| | | server(port); |
| | | if (strcmp("start_net_proxy", opt.fun) == 0 ) { |
| | | if(opt.port == 0) { |
| | | usage(argv[0]); |
| | | exit(1); |
| | | } |
| | | start_net_proxy(opt.port); |
| | | |
| | | } |
| | | else if (strcmp("start_bus_server", opt.fun) == 0) { |
| | | if(opt.key == 0) { |
| | | usage(argv[0]); |
| | | exit(1); |
| | | } |
| | | start_bus_server(opt.key); |
| | | } |
| | | else if (strcmp("start_reply", opt.fun) == 0) { |
| | | if(opt.key == 0) { |
| | | usage(argv[0]); |
| | | exit(1); |
| | | } |
| | | start_reply(opt.key); |
| | | } |
| | | |
| | | if (strcmp("client", argv[1]) == 0) |
| | | client(port); |
| | | else if (strcmp("start_net_client", opt.fun) == 0) { |
| | | if(opt.port == 0) { |
| | | usage(argv[0]); |
| | | exit(1); |
| | | } |
| | | start_net_client(opt.port); |
| | | } |
| | | else { |
| | | usage(argv[0]); |
| | | exit(1); |
| | | |
| | | if (strcmp("mclient", argv[1]) == 0) |
| | | mclient(port); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |