summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xPICA_node.c12
-rwxr-xr-xPICA_nodeaddrlist.c66
-rwxr-xr-xPICA_nodeaddrlist.h2
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);