enlightenment-module-net/src/e_mod_config.c

115 lines
2.4 KiB
C

#include <e.h>
#include "e_mod_config.h"
#include "e_mod_main.h"
#include "e_mod_net.h"
#include "e_mod_gadcon.h"
Config_Item *
_net_config_item_get(const char *id)
{
Eina_List *l;
Config_Item *ci;
char buf[128];
if (!id)
{
int num = 0;
/* Create id */
if (net_cfg->items)
{
const char *p;
ci = eina_list_last(net_cfg->items)->data;
p = strrchr(ci->id, '.');
if (p) num = atoi(p + 1) + 1;
}
snprintf(buf, sizeof(buf), "%s.%d", _net_gc_name(), num);
id = buf;
}
else
{
for (l = net_cfg->items; l; l = l->next)
{
ci = l->data;
if (!ci->id) continue;
if (!strcmp(ci->id, id)) return ci;
}
}
ci = E_NEW(Config_Item, 1);
ci->id = eina_stringshare_add(id);
ci->device = eina_stringshare_add("eth0");
ci->app = eina_stringshare_add("");
ci->limit = 0;
ci->show_text = 1;
ci->show_popup = 0;
net_cfg->items = eina_list_append(net_cfg->items, ci);
return ci;
}
Eina_List *
_net_config_devices_get(void)
{
Eina_List *devs = NULL;
#ifndef __FreeBSD__
FILE *f;
char buf[256];
char dev[64];
unsigned long dummy;
f = fopen("/proc/net/dev", "r");
if (!f) return NULL;
while (fgets(buf, 256, f))
{
int i = 0;
for (; buf[i] != 0; i++)
if (buf[i] == ':') buf[i] = ' ';
if (sscanf (buf, "%s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu "
"%lu %lu %lu %lu\n", dev, &dummy, &dummy, &dummy,
&dummy, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy,
&dummy, &dummy, &dummy, &dummy, &dummy, &dummy) < 17)
continue;
devs = eina_list_append(devs, strdup(dev));
}
fclose(f);
#else
DIR *d = NULL;
struct dirent *dentry = NULL;
d = opendir("/dev/net");
if (!d) return NULL;
while ((dentry = readdir(d)))
{
if (!strstr(dentry->d_name, "."))
devs = eina_list_append(devs, strdup(dentry->d_name));
}
closedir(d);
#endif
return devs;
}
void
_net_config_updated(Config_Item *ci)
{
Eina_List *l;
if (!net_cfg) return;
for (l = net_cfg->instances; l; l = l->next)
{
Instance *inst;
inst = l->data;
if (inst->ci != ci) continue;
if (!inst->timer)
inst->timer = ecore_timer_add(0.5, _net_cb_poll, inst);
if (!ci->show_text)
edje_object_signal_emit(inst->o_net, "e,state,text,hide", "e");
else
edje_object_signal_emit(inst->o_net, "e,state,text,show", "e");
}
}