diff options
| -rwxr-xr-x | PICA_node.c | 12 | ||||
| -rwxr-xr-x | PICA_nodeaddrlist.c | 66 | ||||
| -rwxr-xr-x | PICA_nodeaddrlist.h | 2 |
3 files changed, 57 insertions, 23 deletions
diff --git a/PICA_node.c b/PICA_node.c index 72c30cc..3f3b2e5 100755 --- a/PICA_node.c +++ b/PICA_node.c @@ -581,11 +581,12 @@ while(listleft) } else { - char addr[256]; + struct PICA_nodeaddr na; + //char addr[256]; struct newconn nc; struct nodelink *nlp; - memset(addr,0,256); + memset(na.addr,0,256); memset(&nc,0,sizeof(struct newconn)); switch(buf[size-listleft]) @@ -595,8 +596,8 @@ while(listleft) na_ipv4.addr=*(in_addr_t*)(buf+size-listleft+1); na_ipv4.port=*(in_port_t*)(buf+size-listleft+5); - sprintf(addr,"%.16s",inet_ntoa(*(struct in_addr*)&na_ipv4.addr)); - if (try_connect_to_node(addr,ntohs(na_ipv4.port),&nc)) + sprintf(na.addr,"%.16s",inet_ntoa(*(struct in_addr*)&na_ipv4.addr)); + if (try_connect_to_node(na.addr,ntohs(na_ipv4.port),&nc)) if (try_get_reply(&nc)) { nlp=nodelink_list_addnew(&nc); @@ -604,10 +605,13 @@ while(listleft) nodelink_attach_nodeaddr(nlp,na_ipv4.magick,&na_ipv4,sizeof(struct PICA_nodeaddr_ipv4)); printf("LINKED NODE:%s\n",inet_ntoa(*(struct in_addr*)&na_ipv4.addr));//debug } + + na.port = ntohs(na_ipv4.port); listleft-=PICA_PROTO_NODELIST_ITEM_IPV4_SIZE; break; } + PICA_nodeaddr_save("nodes.sqlite", &na);//CONF filename } } diff --git a/PICA_nodeaddrlist.c b/PICA_nodeaddrlist.c index db942b6..e1b4ff0 100755 --- a/PICA_nodeaddrlist.c +++ b/PICA_nodeaddrlist.c @@ -74,35 +74,65 @@ return N; -int PICA_nodeaddr_list_save(char* listfilename,struct PICA_nodeaddr *list_head) +int PICA_nodeaddr_save(char* dbfilename, struct PICA_nodeaddr *naddr) { -/* -FILE *f_list; -struct PICA_nodeaddr *list_item; +sqlite3 *db; +sqlite3_stmt *stmt; +int ret; +const char query[] = "insert into nodes (address, port, last_active, inactive_count) values(:addr, :port, strftime('%s','now'), 0);"; -f_list=fopen(listfilename,"w"); +ret = sqlite3_open(dbfilename, &db); -if (f_list==0) +if (ret != SQLITE_OK) { - puts("error opening node list for save"); - //ERR_CHECK - return -1; // -1 коды ошибок + fprintf(stderr, "Can't open nodelist database: %s\n", sqlite3_errmsg(db)); + sqlite3_close(db); + return -1; } -list_item=list_head; -while(list_item) +ret = sqlite3_prepare_v2(db, query, -1, &stmt, NULL); + +if (ret != SQLITE_OK) + { + fprintf(stderr, "Can't prepare SQLite statement: %s\n", sqlite3_errmsg(db)); + sqlite3_close(db); + return -1; + } + +ret = sqlite3_bind_text(stmt, 1, naddr->addr, -1, SQLITE_STATIC); + +if (ret != SQLITE_OK) { - int ret; - ret=fprintf(f_list,"%s %u %u\n",list_item->addr,list_item->port,list_item->unavail_count); + fprintf(stderr, "Can't bind address value: %s\n", sqlite3_errmsg(db)); + sqlite3_finalize(stmt); + sqlite3_close(db); + return -1; + } + +ret = sqlite3_bind_int(stmt, 2, naddr->port); - if (ret<0) - return -1; - - list_item=list_item->next; +if (ret != SQLITE_OK) + { + fprintf(stderr, "Can't bind port value: %s\n", sqlite3_errmsg(db)); + sqlite3_finalize(stmt); + sqlite3_close(db); + return -1; } +ret = sqlite3_step(stmt); + +if (ret !=SQLITE_DONE) +{ + fprintf(stderr, "Can't execute query: %s\n", sqlite3_errmsg(db)); + sqlite3_finalize(stmt); + sqlite3_close(db); + return -1; +} + +sqlite3_finalize(stmt); +sqlite3_close(db); -return fclose(f_list);*/ +return 1; } void PICA_nodeaddr_list_free(struct PICA_nodeaddr *list_head) diff --git a/PICA_nodeaddrlist.h b/PICA_nodeaddrlist.h index 468dfbb..24c48cd 100755 --- a/PICA_nodeaddrlist.h +++ b/PICA_nodeaddrlist.h @@ -36,7 +36,7 @@ struct PICA_nodeaddr *next; }; int PICA_nodeaddr_list_load(char* dbfilename,struct PICA_nodeaddr **list_head); -int PICA_nodeaddr_list_save(char* dbfilename,struct PICA_nodeaddr *list_head); +int PICA_nodeaddr_save(char* dbfilename, struct PICA_nodeaddr *naddr); int PICA_nodeaddr_list_add();// int PICA_nodeaddr_list_remove();// void PICA_nodeaddr_list_free(struct PICA_nodeaddr *list_head); |
