⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 network_db.c

📁 Linux下无线网卡扫描工具源代码
💻 C
字号:
#include <stdio.h>#ifdef __OLD_DB__#include <db1/db.h>#else#include <db_185.h>#endif#include "gtkskan.h"#include "scan_data.h"#include "network_db.h"#include "skan.h"#include <esd.h>#include "skan_config.h"extern gtkskan_config_t skan_conf;static DB * network_db = NULL;/* i'm not checking the return values here because i don't remember what    they are and don't have the man page handy */int network_db_open(void){	GString *path = g_string_new(g_get_home_dir());	g_string_append(path, "/.gtkskan-db");	  if(network_db == NULL) {    if ((network_db = dbopen(path->str, O_RDWR|O_CREAT, 0664, DB_BTREE, NULL)) == NULL) {		g_string_free(path, TRUE);			return 0;	}    atexit(network_db_close);  }  g_string_free(path, TRUE);  return 1;}void network_db_sync(void){  network_db_open();  (network_db)->sync(network_db, 0);}void network_db_close(void){  if(network_db != NULL) {    (network_db)->close(network_db);  }}int network_db_delete_data(scan_data_t *scan){	DBT key = { 0, 0 };	scan_data_t * temp;	if (scan == NULL) return 0;	network_db_open();	if ((temp = network_db_lookup_data(scan->ap_mac)) == NULL)		return 0;	else free(temp);		key.data = scan->ap_mac;	key.size = strlen(scan->ap_mac) + 1;	(network_db)->del(network_db, &key, 0);	return 1;}int network_db_save_data(scan_data_t *scan){  DBT key   = { 0, 0 };  DBT value = { 0, 0 };  scan_data_t * temp;	if (strlen(scan->essid)==0) return 0;  network_db_open();	if ((temp = network_db_lookup_data(scan->ap_mac)) == NULL && skan_conf.sound) 		esd_play_file(NULL, skan_conf.snd_path, 1);	else free(temp);  key.data   = scan->ap_mac;  key.size   = strlen(scan->ap_mac) + 1;  value.data = scan;  value.size = sizeof(scan_data_t);  (network_db)->put(network_db, &key, &value, 0);	gtkskan_update_netcount();  return 1;}scan_data_t * network_db_lookup_data(const char *ap_mac){  DBT key    = { 0, 0 };  DBT value  = { 0, 0 };  char keybuf[strlen(ap_mac) + 1];  if(ap_mac == NULL)    return 0;  key.data = keybuf;  key.size = strlen(ap_mac) + 1;    strcpy(keybuf, ap_mac);  network_db_open();  (network_db)->get(network_db, &key, &value, 0);  if(value.size == sizeof(scan_data_t)) {    scan_data_t * outbuf = (scan_data_t*)calloc(1, sizeof(scan_data_t));    memcpy(outbuf, value.data, value.size);    return outbuf;  }    return NULL;}int network_db_exists(const char *ap_mac){  DBT key = { 0, 0 };  DBT value = { 0, 0 };  char keybuf[strlen(ap_mac) + 1];  if(ap_mac == NULL)    return 0;  network_db_open();  key.data  = keybuf;  key.size  = strlen(ap_mac) + 1;  strcpy(keybuf, ap_mac);  (network_db)->get(network_db, &key, &value, 0);  if(value.size)    return 1;  return 0;}void network_db_iterate(void (*func)(scan_data_t *, void *), void *user){  DBT key   = { 0, 0 };  DBT value = { 0, 0 };  if (!network_db_open()) return;  (network_db)->seq(network_db, &key, &value, R_FIRST);  if(key.size == 0)    return;  do {    func((scan_data_t*)value.data, user);  } while((network_db)->seq(network_db, &key, &value, R_NEXT) == 0);    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -