From 8df9466ada46e4b07990b9cb7e8b1cd61b96844a Mon Sep 17 00:00:00 2001 From: me_desk Date: Sun, 17 Jun 2012 21:15:12 +0000 Subject: todo list update git-svn-id: svn://localhost/project_picapica/trunk@128 fb96df88-216d-11de-830c-f3023f12d8ac --- PICA_nodeaddrlist.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100755 PICA_nodeaddrlist.c (limited to 'PICA_nodeaddrlist.c') diff --git a/PICA_nodeaddrlist.c b/PICA_nodeaddrlist.c new file mode 100755 index 0000000..db942b6 --- /dev/null +++ b/PICA_nodeaddrlist.c @@ -0,0 +1,119 @@ +#include "PICA_nodeaddrlist.h" +#include +#include +#include +#include + +struct cb_param +{ +struct PICA_nodeaddr **n_addr; +int *N; +}; + +static int nodeaddr_load_sqlite_cb(void *p, int argc, char **argv, char **ColName) +{ +struct cb_param *cp = (struct cb_param*)p; +struct PICA_nodeaddr *na; + +if (argc != 4) + return 1; + +na = (struct PICA_nodeaddr *)malloc(sizeof(struct PICA_nodeaddr)); + +if (!na) + return 1; + +printf("NODE: addr: %s port %s\n", argv[0], argv[1]);//debug + +strncpy(na->addr, argv[0], 255); +na->addr[255] = '\0'; + +na->port = atoi(argv[1]); + +na->inactive_count = atoi(argv[2]); + +na->last_active = atoi(argv[3]); + +na->next = NULL; + +*(cp->n_addr) = na; +(*(cp->N))++; + +return 0; +} + +int PICA_nodeaddr_list_load(char* dbfilename,struct PICA_nodeaddr **list_head) +{ + int N=0, ret; +sqlite3 *db; +char *zErrMsg = 0; +const char query[] = "select address, port, inactive_count, last_active from nodes order by inactive_count asc, last_active desc"; +struct cb_param p = {list_head, &N}; + + +ret = sqlite3_open(dbfilename, &db); + +if (ret != SQLITE_OK) + { + fprintf(stderr, "Can't open nodelist database: %s\n", sqlite3_errmsg(db)); + sqlite3_close(db); + return -1; + } + +ret = sqlite3_exec(db, query, nodeaddr_load_sqlite_cb, &p, &zErrMsg); + +if( ret != SQLITE_OK ) + { + fprintf(stderr, "SQL error: %s\n", zErrMsg); + sqlite3_free(zErrMsg); + } + +sqlite3_close(db); +return N; +} + + + +int PICA_nodeaddr_list_save(char* listfilename,struct PICA_nodeaddr *list_head) +{ +/* +FILE *f_list; +struct PICA_nodeaddr *list_item; + +f_list=fopen(listfilename,"w"); + +if (f_list==0) + { + puts("error opening node list for save"); + //ERR_CHECK + return -1; // -1 коды ошибок + } + +list_item=list_head; +while(list_item) + { + int ret; + ret=fprintf(f_list,"%s %u %u\n",list_item->addr,list_item->port,list_item->unavail_count); + + if (ret<0) + return -1; + + list_item=list_item->next; + } + + +return fclose(f_list);*/ +} + +void PICA_nodeaddr_list_free(struct PICA_nodeaddr *list_head) +{ +struct PICA_nodeaddr *pp,*pn; +pp=list_head; + +while(pp) + { + pn=pp->next; + free(pp); + pp=pn; + } +} \ No newline at end of file -- cgit v1.2.1