/* * interface-declaration :== * INTERFACE string LBRACE client-declarations RBRACE */ void parse_interface_declaration(FILE *cfile, struct client_config *outer_config) { int token; char *val; struct interface_info *ip; token = next_token(&val, cfile); if (token != STRING) { parse_warn("expecting interface name (in quotes)."); skip_to_semi(cfile); return; } ip = interface_or_dummy(val); if (!ip->client) make_client_state(ip); if (!ip->client->config) make_client_config(ip, outer_config); token = next_token(&val, cfile); if (token != LBRACE) { parse_warn("expecting left brace."); skip_to_semi(cfile); return; } do { token = peek_token(&val, cfile); if (token == EOF) { parse_warn("unterminated interface declaration."); return; } if (token == RBRACE) break; parse_client_statement(cfile, ip, ip->client->config); } while (1); token = next_token(&val, cfile); }
/**************************************************************************** * Public Functions ****************************************************************************/ int mqtt_client_sub_task(void *arg) { int result = -1; int ret = 0; int argc; char **argv; argc = ((struct mqtt_sub_input *)arg)->argc; argv = ((struct mqtt_sub_input *)arg)->argv; if (argc == 1) { print_usage(); return 0; } /* set the seed of a new sequence of random values */ mqtt_set_srand(); /* check options and set variables */ init_variables(); ret = process_options(argc, argv); if (ret != 0) { if (ret == 2) { print_usage(); result = 0; } goto done; } /* check and do options when a client is running */ ret = check_option_on_client_running(); if (ret == CHECK_OPTION_RESULT_CHECKED_OK) { result = 0; goto done; } else if (ret == CHECK_OPTION_RESULT_CHECKED_ERROR) { goto done; } /* make mqtt subscriber client config */ if (make_client_config() != 0) { goto done; } /* create mqtt subscriber client */ if (g_debug) { printf("initialize MQTT client context.\n"); } g_mqtt_client_handle = mqtt_init_client(&g_mqtt_client_config); if (g_mqtt_client_handle == NULL) { fprintf(stderr, "Error: mqtt_init_client() failed.\n"); clean_client_config(); goto done; } /* connect to a mqtt broker */ if (g_debug) { printf("connect to a MQTT broker (%s : %d).\n", g_host_addr, g_port); } if (mqtt_connect(g_mqtt_client_handle, g_host_addr, g_port, g_keepalive) != 0) { fprintf(stderr, "Error: mqtt_connect() failed.\n"); if (mqtt_deinit_client(g_mqtt_client_handle) != 0) { fprintf(stderr, "Error: mqtt_deinit_client() failed.\n"); } else { g_mqtt_client_handle = NULL; } clean_client_config(); goto done; } if (g_debug) { printf("MQTT subscriber has started successfully.\n"); } /* result is success */ result = 0; done: deinit_variables(); return result; }