void *particle_receiver_loop(void *arg) { int ret; ctx = (struct Client_CTX*)arg; /* Handle SIGINT signal. The handle_signal function will try to terminate * connection. */ signal(SIGINT, handle_signal); register_cb_func_particle_receiver(); if((ret = vrs_send_connect_request(ctx->verse.server_name, "12345", VRS_SEC_DATA_NONE ,&ctx->verse.session_id))!=VRS_SUCCESS) { printf("ERROR: %s\n", vrs_strerror(ret)); return 0; } /* Never ending loop */ while(1) { sem_wait(&ctx->timer_sem); vrs_callback_update(ctx->verse.session_id); } return NULL; }
/** * \brief Main function of verse_client program. * * \details This program requires one argument (address of Verse server). * This function set up handling of signals (SIGINIT). This function register * all necessary callback functions and then send connect request to the * server. Then callback update function is called 30 times per * seconds (30 FPS). * * \param argc number of arguments * \param argv array of arguments * * \return Returns 0, when client is finished successfully and non-zero value, * when it is finished with some error. */ int main(int argc, char *argv[]) { int error_num, opt, ret, flags = VRS_SEC_DATA_NONE; /* When client was started with some arguments */ if(argc>1) { /* Parse all options */ while( (opt = getopt(argc, argv, "hu:p:s:t:d:k")) != -1) { switch(opt) { case 's': if(strcmp(optarg, "none") == 0) { flags |= VRS_SEC_DATA_NONE; flags &= ~VRS_SEC_DATA_TLS; } else if(strcmp(optarg, "tls") == 0) { flags &= ~VRS_SEC_DATA_NONE; flags |= VRS_SEC_DATA_TLS; } else { printf("ERROR: unsupported security\n\n"); print_help(argv[0]); exit(EXIT_FAILURE); } break; case 't': if(strcmp(optarg, "udp") == 0) { flags |= VRS_TP_UDP; flags &= ~VRS_TP_TCP; } else if(strcmp(optarg, "tcp") == 0) { flags &= ~VRS_TP_UDP; flags |= VRS_TP_TCP; } else { printf("ERROR: unsupported transport protocol\n\n"); print_help(argv[0]); exit(EXIT_FAILURE); } break; case 'u': my_username = optarg; break; case 'p': my_password = optarg; break; case 'c': if(strcmp(optarg, "none") == 0) { flags |= VRS_CMD_CMPR_NONE; flags &= ~VRS_CMD_CMPR_ADDR_SHARE; } else if(strcmp(optarg, "addrshare") == 0) { flags &= ~VRS_CMD_CMPR_NONE; flags |= VRS_CMD_CMPR_ADDR_SHARE; } else { printf("ERROR: unsupported command compression\n\n"); print_help(argv[0]); exit(EXIT_FAILURE); } break; case 'd': ret = set_debug_level(optarg); if(ret != VRS_SUCCESS) { print_help(argv[0]); exit(EXIT_FAILURE); } break; case 'k': #ifdef WITH_KERBEROS vrs_set_krb5_use(); ret = init_krb5_cc(); if (ret != VRS_SUCCESS) { exit(EXIT_FAILURE); } #else exit(EXIT_FAILURE); #endif break; case 'h': print_help(argv[0]); exit(EXIT_SUCCESS); case ':': exit(EXIT_FAILURE); case '?': exit(EXIT_FAILURE); } } /* The last argument has to be server name, not option */ if(optind+1 != argc) { printf("Error: last argument has to be server name\n\n"); print_help(argv[0]); exit(EXIT_FAILURE); } } else { printf("Error: no server specified\n\n"); print_help(argv[0]); return EXIT_FAILURE; } /* Handle SIGINT signal. The handle_signal function will try to terminate * connection. */ signal(SIGINT, handle_signal); /* Register callback functions */ vrs_register_receive_user_authenticate(cb_receive_user_authenticate); vrs_register_receive_connect_accept(cb_receive_connect_accept); vrs_register_receive_connect_terminate(cb_receive_connect_terminate); vrs_register_receive_node_create(cb_receive_node_create); vrs_register_receive_node_destroy(cb_receive_node_destroy); vrs_register_receive_node_owner(cb_receive_node_owner); vrs_register_receive_node_perm(cb_receive_node_perm); vrs_register_receive_node_lock(cb_receive_node_lock); vrs_register_receive_node_unlock(cb_receive_node_unlock); vrs_register_receive_node_link(cb_receive_node_link); vrs_register_receive_taggroup_create(cb_receive_taggroup_create); vrs_register_receive_taggroup_destroy(cb_receive_taggroup_destroy); vrs_register_receive_tag_create(cb_receive_tag_create); vrs_register_receive_tag_destroy(cb_receive_tag_destroy); vrs_register_receive_tag_set_value(cb_receive_tag_set_value); vrs_register_receive_layer_create(cb_receive_layer_create); vrs_register_receive_layer_destroy(cb_receive_layer_destroy); vrs_register_receive_layer_set_value(cb_receive_layer_set_value); vrs_register_receive_layer_unset_value(cb_receive_layer_unset_value); /* Set client name and version */ vrs_set_client_info("Example Verse Client", "0.1"); /* Send connect request to the server (it will also create independent thread for connection) */ #ifdef WITH_OPENSSL /* 12345 is secured port */ error_num = vrs_send_connect_request(argv[optind], "12345", flags, &session_id); #else /* 12344 is unsecured port */ error_num = vrs_send_connect_request(argv[optind], "12344", flags, &session_id); #endif if(error_num != VRS_SUCCESS) { printf("ERROR: %s\n", vrs_strerror(error_num)); return EXIT_FAILURE; } /* Never ending loop */ while(1) { vrs_callback_update(session_id); usleep(1000000/FPS); } return EXIT_SUCCESS; }