diff --git a/dfs.c b/dfs.c index 28ddaed99bc83a29b541037edece010aef671a6b..a3cf1716d57a8ae0f77507e792f50fc59c69080a 100644 --- a/dfs.c +++ b/dfs.c @@ -34,7 +34,6 @@ bool search(char *path, struct list_head *list) void clear_list(struct list_head *list) { struct directory *dr, *tmp; - print_list_dfs(list); if (list_empty(list)) return; diff --git a/dongle_infrastructure.c b/dongle_infrastructure.c index ba8a5f5bdbb9ba1b6314c79af1b4658b10246e76..dfbe529bd729f15e1a9502e1ab6eaa9bd92f4ef9 100644 --- a/dongle_infrastructure.c +++ b/dongle_infrastructure.c @@ -54,7 +54,6 @@ int tag_missing_devices(void) } dev->missing++; - printf("added to missing counter!\n"); if (dev->missing == 1) delete_device_by_obj(dev); } @@ -121,7 +120,6 @@ int delete_device_by_name(char *name) int delete_device_by_obj(struct device *dev) { - printf("lets remove %s\n", dev->usb.if_name); free(dev->usb.if_name); free(dev->ip); list_del(&dev->list); @@ -140,6 +138,29 @@ struct device *search_list(char *name) return NULL; } +char *lexer_chr(char **input, char delimiter) +{ + char *token, *substr; +printf("%s\n", *input); + if (strlen(*input) == 0) { + debug_print("empty input!\n"); + return NULL; + } +printf("%s\n", *input); + token = strchr(*input, delimiter); + printf("%s\n", token); + if (token) { + *token = '\0'; + substr = strdup(*input); + *input = token + 1; + } else { + substr = strdup(*input); + *input[0] = '\0'; + } + + return substr; +} + char *lexer(char **input, char *delimiter) { char *token, *substr; @@ -212,6 +233,7 @@ char *get_usb_stat(char *path, char *dir, char *stat) fgets(contents, 1024, f); remove_newline(contents); fclose(f); + return strdup(contents); fail: return NULL; @@ -273,7 +295,6 @@ char *get_device_name(char *dir_name) } if (strstr(dr->path, "net")) { - printf("de->d_name %s\n", de->d_name); name = strdup(de->d_name); goto success; } @@ -313,7 +334,6 @@ int get_devices(void) continue; snprintf(product_path, PATH_MAX, "%s%s/product", usb_path, de->d_name); - printf("product_path %s\n", product_path); memset(&st, 0, sizeof(struct stat)); rv = stat(product_path, &st); @@ -376,6 +396,39 @@ fail: return NULL; } +char *get_device_ip_alt(char *device_name) +{ + char route[1024]; + char *iface, *destination, *gateway, *flags; + FILE *fp; + + fp = fopen("/proc/net/route", "r"); + if (!fp) { + perror("fopen"); + goto fail; + } + + while ((fgets(route, 1024, fp)) != NULL) { + remove_newline(route); + /* + 1. delimiter on first tab, check if = usb0, else continue + 2. delimiter on 4th tab, convert to binary, check if 3rd bit = 1, else continue + 3. get destintion ip + */ + printf("route %s\n", route); + printf("some more test stuff\n"); + iface = lexer_chr(&route, 'a'); + printf("iface %s\n", iface); + destination = lexer_chr(&route, 'a'); + gateway = lexer_chr(&route, 'a'); + flags = lexer_chr(&route, 'a'); + printf("iface %s, destination %s, gateway %s, flags %s\n", iface, destination, gateway, flags); + } + fclose(fp); +fail: + return NULL; +} + char *get_device_ip(char *device_name) { int fd, rv; @@ -495,6 +548,14 @@ int clear(struct ubus_context *ctx, struct ubus_object *obj, return 0; } +int test(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) +{ + get_device_ip_alt(NULL); + return 0; +} + int remove_device(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) @@ -516,7 +577,7 @@ fail: } struct ubus_method infrastructure_object_methods[] = { - //UBUS_METHOD_NOARG("test", test), + UBUS_METHOD_NOARG("test", test), UBUS_METHOD_NOARG("list", print_list), UBUS_METHOD_NOARG("clear", clear), UBUS_METHOD("remove_device", remove_device, dev_policy)