www.pudn.com > isync2[1].0.rar > isync_bak.cpp
// // isync.cpp // #include//for int chdir(const char *path); #include #include #include "isync.h" #include "showcard.h" #include "show_free.h" #include "warn.xpm" #include "isync.xpm" #define ISYNC_RUN_ATOM "ISYNC_RUN_ATOM" #define CARD_RUN_ATOM "CARD_RUN_FLAG" #define EMAIL_RUN_ATOM "EMAIL_RUN_FLAG" #define SMS_MAIN_ATOM "messagewindow1" #define SEND2SET_INFORM_ATOM "SEND2SET_INFORM_ATOM" #define SET_RUN_ATOM "SET_RUN_ATOM" Atom isync_run_atom; extern FL_EXPORT Display *fl_display; const char *pathtmp="/tmp/isync"; char sendtoiphoneFileName[] = "/tmp/isync/sendtoiphone.tmp"; char lasttimeFileName[] = "/tmp/isync/lasttime.tmp"; char sendtopcFileName[] = "/tmp/isync/sendtopc.tmp"; char backuptopcFileName[] = "/tmp/isync/home.tgz"; char com_tarbackup[]="tar czf /tmp/isync/home.tgz set/ notepad/ telephone/ card/ email/ user/ chinput/ sms/ gbrow/"; char com_tarrecover[]="tar zxf /tmp/isync/home.tgz"; char clean_command[]="rm set/ notepad/ telephone/ card/ email/ user/ chinput/ sms/ gbrow/ -rf"; pthread_t Threadisync; TransferDetail icard[CARD_MAX_COUNT+1]; struct timeval nowtime; long lasttime; int isync_type; //0: card; 1: backup; 2: recover int g_threadStatus = 0; //0 sending; 1: over int cardcount; int addcardcount; char strmessage[50]; bool isyncover=false; bool backupflag=false; bool recoverflag=false; bool restartflag=false; int s_sock;//server's sock int a_sock;//accept's sock Fl_Window *window; Fl_Window *popwin_title=(Fl_Window *)0; Fl_Window *popwin_message=(Fl_Window *)0; Fl_Round_Button *btnRound[3]; Fl_Box *title=(Fl_Box *)0; Fl_Box *box_message=(Fl_Box *)0; Fl_Button *exit_btn = (Fl_Button *)0; void exec_program(char* path, char *param = NULL) { if (fork() == 0) { if (fork() == 0) { execlp(path,path,param,NULL); exit(1); } exit(0); } wait((int *) 0); } //去掉字符串两端空格 void chopwhitespace(char *str) { int ln = strlen (str); while ( (ln>0) && ( (str[ln-1]==' ') ) ) str[--ln] = 0; while ((str[0] == ' ')||(str[0] == '\t')) { memmove (str,str+1,(size_t) strlen(str)); } } long GetFileSize(char *FileName) { /* long size=0; FILE *fp; fp=fopen(FileName,"r"); if(fp==NULL) { printf("GetFileSIze Open %s File Error\n",FileName); return 0; } fseek(fp,0,SEEK_END); size=ftell(fp); fclose(fp); return size; */ struct stat mystat; long need_read; if (stat (FileName, &mystat) != 0) { // InformDlg ("读消息管道出错!","错误信息"); return 1; } need_read = mystat.st_size; return need_read; } int tell_set(void) { Window twin; Atom send2set_inform_atom; send2set_inform_atom= XInternAtom (fl_display,SEND2SET_INFORM_ATOM , False); Atom set_run_atom; set_run_atom=XInternAtom (fl_display,SET_RUN_ATOM , False); //通知set if ((twin = XGetSelectionOwner (fl_display, set_run_atom)) != 0) { XClientMessageEvent event; event.type = ClientMessage; event.window = 0; event.message_type =send2set_inform_atom; event.format = 32; XSendEvent (fl_display, twin, False, 0, (XEvent *) & event); } return 0; } int writelasttime() { FILE *fp; char tempbuf[200]; if((fp = fopen(lasttimeFileName , "wb")) == NULL) { printf ("can't open write /temp/isync/lasttime.tmp\n"); return -1; } gettimeofday(&nowtime,0); sprintf(tempbuf,"%ld",nowtime.tv_sec); strcat(tempbuf, "\n"); fputs(tempbuf, fp); fclose(fp); return 0; } int readlasttime() { FILE *fp; char strline[100]; if ((fp = fopen (lasttimeFileName, "r")) == NULL) { // printf ("can't open read /temp/isync/lasttime.tmp\n"); return -1; } fgets(strline, 100, fp); chopwhitespace(strline); // printf("strline=%s\n",strline); if (sscanf(strline, "%ld", &lasttime) != 1) { printf("lasttime.tmp file format error\n"); return -1; } // printf("lasttime=%ld\n",lasttime); fclose(fp); return 0; } int comparetime() { gettimeofday(&nowtime,0); // printf("nowtime.tv_sec=%ld\n",nowtime.tv_sec); // printf("lasttime=%ld\n",lasttime); if((nowtime.tv_sec-lasttime>=0)&&(nowtime.tv_sec-lasttime<=5)) return -1; return 0; } void exit_cb(Fl_Widget*) { if (1 == g_threadStatus) { return; } printf("close(a_sock)\n"); printf("close(s_sock)\n"); close(a_sock); close(s_sock); if(backupflag||recoverflag) { writelasttime(); exec_program("/Xapp/tel"); exec_program("/Xapp/pm"); exec_program("/Xapp/notepad"); } system("rm /tmp/card -rf"); exit(0); } void init_Display(void) { fl_open_display(); } void initAtom(void) { Window twin; Window root_ret; Window parent_ret; Window *children_ret; unsigned int nchildren_ret; isync_run_atom = XInternAtom (fl_display, ISYNC_RUN_ATOM, False); if((twin = XGetSelectionOwner (fl_display, isync_run_atom)) != None) { XQueryTree (fl_display, twin, &root_ret, &parent_ret, &children_ret, &nchildren_ret); XRaiseWindow (fl_display, parent_ret); twin = parent_ret; XQueryTree (fl_display, twin, &root_ret, &parent_ret, &children_ret, &nchildren_ret); XRaiseWindow (fl_display, parent_ret); XQueryTree (fl_display, twin, &root_ret, &parent_ret, &children_ret, &nchildren_ret); exit (127); } } int search_cardprogram() { // printf("run search_cardprogram()\n"); Atom card_run_atom; card_run_atom = XInternAtom (fl_display, CARD_RUN_ATOM, False); Window twin; twin = XGetSelectionOwner (fl_display, card_run_atom); if(twin != 0) return -1; else return 0; } int search_emailprogram() { // printf("run search_emailprogram()\n"); Atom email_run_atom; email_run_atom = XInternAtom (fl_display, EMAIL_RUN_ATOM, False); Window twin; twin = XGetSelectionOwner (fl_display, email_run_atom); if(twin != 0) return -1; else return 0; } int search_smsprogram() { // printf("run search_smsprogram()\n"); Atom sms_run_atom; sms_run_atom = XInternAtom (fl_display, SMS_MAIN_ATOM, False); Window twin; twin = XGetSelectionOwner (fl_display, sms_run_atom); if(twin != 0) return -1; else return 0; } void timer_cb(void*) { if (1 == g_threadStatus) { title->label(" 正在更新名片数据,请稍候 . . ."); exit_btn->hide(); } if(isyncover) { g_threadStatus = 0; tell_set(); XFlush(fl_display); // window->hide(); // popwin_title->hide(); box_message->label(strmessage); popwin_message->show(); Fl::remove_timeout(timer_cb); } else Fl::repeat_timeout(0.1, timer_cb); } void isync_yes(Fl_Widget *) { if (btnRound[0]->value() == 1) { title->label(" 请同时运行PC端i风名片管理软件, 进\n\n 行数据传输, 退出将中断数据传输."); popwin_title->label("名片同步"); } else if (btnRound[1]->value() == 1) { //printf("run KillAllSRProg()\n"); KillAllSRProg(); backupflag=true; title->label(" 请同时运行PC端i风数据备份与恢复软\n\n 件, 进行数据备份, 退出将中断备份."); popwin_title->label("数据备份"); } else if (btnRound[2]->value() == 1) { KillAllSRProg(); recoverflag=true; title->label(" 请同时运行PC端i风数据备份与恢复软\n\n 件, 进行数据恢复, 退出将中断恢复并有\n\n 可能造成数据丢失."); popwin_title->label("数据恢复"); } // window->hide(); popwin_title->show(); Fl::add_timeout(0.1,timer_cb); isynctransfers(); } void isync_cancel(Fl_Widget *) { printf("close(a_sock)\n"); printf("close(s_sock)\n"); close(a_sock); close(s_sock); if(restartflag) system("reboot"); else if(backupflag|recoverflag) { writelasttime(); exec_program("/Xapp/tel"); exec_program("/Xapp/pm"); exec_program("/Xapp/notepad"); exit(0); } else exit(0); } ///////////////////////////////////////////////////////////////////// // main ///////////////////////////////////////////////////////////////////// int main(int argc, char **argv) { init_Display(); struct stat mystat; if (stat(pathtmp, &mystat) != 0) mkdir(pathtmp, 0700); int ret=readlasttime(); // printf("ret=%d\n",ret); if(ret==0) { int rc=comparetime(); // printf("rc=%d\n",rc); if(rc==-1) { printf("time too short! ->>>exit(0)!\n"); Cursor cursor; int cursor_shape = 68; cursor = XCreateFontCursor(fl_display, cursor_shape); XDefineCursor(fl_display, DefaultRootWindow(fl_display), cursor); exit(0); } } if (stat("/home/set", &mystat) != 0) mkdir("/home/set", 0700); if (stat("/home/notepad", &mystat) != 0) mkdir("/home/notepad", 0700); if (stat("/home/telephone", &mystat) != 0) mkdir("/home/telephone", 0700); if (stat("/home/card", &mystat) != 0) mkdir("/home/card", 0700); if (stat("/home/email", &mystat) != 0) mkdir("/home/email", 0700); if (stat("/home/user", &mystat) != 0) mkdir("/home/user", 0700); if (stat("/home/chinput", &mystat) != 0) mkdir("/home/chinput", 0700); if (stat("/home/sms", &mystat) != 0) mkdir("/home/sms", 0700); if (stat("/home/gbrow", &mystat) != 0) mkdir("/home/gbrow", 0700); initAtom(); fl_mapcolor(FL_FREE_COL1, 234, 206, 245); fl_mapcolor(FL_FREE_COL2, 133, 169, 237); window = new Fl_Window(195,175,250,130,"数据传输"); fl_set_object_color(window,FL_FREE_COL1,FL_FREE_COL1); fl_redraw_object(window); { Fl_FormsPixmap *o = new Fl_FormsPixmap(FL_NORMAL_PIXMAP, 35,15,40,40, ""); o->set(isync_xpm); } { btnRound[0]=new Fl_Round_Button(80,10,100,25,"名片同步"); btnRound[1]=new Fl_Round_Button(80,35,100,25,"数据备份"); btnRound[2]=new Fl_Round_Button(80,60,100,25,"数据恢复"); } for (int i=0;i<3;i++) { btnRound[i]->type(FL_RADIO_BUTTON); } btnRound[0]->value(1); { Fl_Button *o=new Fl_Button(35,95,86,25,"确定"); fl_set_object_color(o,FL_FREE_COL2,FL_FREE_COL2); fl_redraw_object(o); o->callback((Fl_Callback*)isync_yes); } { Fl_Button *o=new Fl_Button(129,95,86,25,"取消"); fl_set_object_color(o,FL_FREE_COL2,FL_FREE_COL2); fl_redraw_object(o); o->callback((Fl_Callback*)isync_cancel); } window->end(); //////////////////////////////////////////////////// //提示界面 //////////////////////////////////////////////////// popwin_title = new Fl_Window(140,145,360,165,""); popwin_title->set_modal(); fl_set_object_color(popwin_title,FL_FREE_COL1,FL_FREE_COL1); fl_redraw_object(popwin_title); popwin_title->callback((Fl_Callback*)exit_cb); { Fl_FormsPixmap *o = new Fl_FormsPixmap(FL_NORMAL_PIXMAP, 15,25,25,25, ""); o->set(warn_xpm); } //产生一个提示信息 { title= new Fl_Box(50,30,100,75, ""); title->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT); } { Fl_Button *o = exit_btn = new Fl_Button(137,125,86,25,"退出"); fl_set_object_color(o,FL_FREE_COL2,FL_FREE_COL2); fl_redraw_object(o); o->callback((Fl_Callback*)exit_cb); } popwin_title->end(); //////////////////////////////////////////////////// //警告信息界面 //////////////////////////////////////////////////// popwin_message = new Fl_Window(130, 166, 380, 100, "信息"); popwin_message->set_modal(); popwin_message->callback((Fl_Callback *)isync_cancel); fl_set_object_color(popwin_message, FL_FREE_COL1, FL_FREE_COL1); fl_redraw_object(popwin_message); { box_message = new Fl_Box(FL_FLAT_BOX, 60, 25, 200, 25,""); box_message->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT); fl_set_object_color(box_message, FL_FREE_COL1, FL_FREE_COL1); fl_redraw_object(box_message); } { Fl_FormsPixmap *o = new Fl_FormsPixmap(FL_NORMAL_PIXMAP, 15,15,40,40, ""); o->set(warn_xpm); } { Fl_Button *o = new Fl_Button(147, 65, 86, 25, "确定"); fl_set_object_color(o, FL_FREE_COL2, FL_FREE_COL2); fl_redraw_object(o); o->callback((Fl_Callback*)isync_cancel); } popwin_message->end(); int rc=search_cardprogram(); int rd=search_emailprogram(); int rs=search_smsprogram(); if(rc==-1||rd==-1||rs==-1) { box_message->label("名片,邮件,短信启动后,数据传输禁止使用!"); popwin_message->show(); XSetSelectionOwner(fl_display, isync_run_atom, fl_xid(popwin_message),CurrentTime); } else { window->show(); XSetSelectionOwner(fl_display, isync_run_atom, fl_xid(window),CurrentTime); } return Fl::run(); } void isynctransfers() { /* FILE *fp; fp = fopen(sendtoiphoneFileName , "r"); if(fp) { fclose(fp); if (fl_ask("发现未完成的文件,是否继续处理?")) //gggggg { AddToDB(); } remove(sendtoiphoneFileName);//删除文件 } */ pthread_create(&Threadisync , NULL ,NetLink, NULL); } void *NetLink(void *pArg) { struct sockaddr_in s_in; struct sockaddr_in a_in; char message[5]; //char updatetype[3]; char updatetype[4]; char strcardcount[5]; char straddcardcount[5]; int rc; unsigned long tmpfreesize; int retadd; retadd=false; isyncover=false; restartflag=false; s_sock = socket(AF_INET , SOCK_STREAM , 0); // printf("create sock success!\n"); int pram = 1; setsockopt(s_sock, SOL_SOCKET, SO_REUSEADDR, (char *) &pram, sizeof (int)); bzero(&s_in , sizeof(sockaddr_in)); s_in.sin_family = AF_INET; s_in.sin_port = htons(PORT); s_in.sin_addr.s_addr = htonl(INADDR_ANY); rc = bind(s_sock, (struct sockaddr *)&s_in , sizeof(struct sockaddr)); //bind if(-1 == rc) { printf("bind fail!\n"); close(a_sock); close(s_sock); strcpy(strmessage,"网络操作失败,请重新运行数据传输程序!"); isyncover=true; return NULL; } // printf("bind success!\n"); //skip_continue: if (-1 == listen(s_sock , 5)) //listen { printf("listen fail!\n"); close(s_sock); strcpy(strmessage,"网络操作失败,请重新运行数据传输程序!"); isyncover=true; return NULL; } // printf("listen success!\n"); int ainsize = sizeof(struct sockaddr_in); a_sock = accept(s_sock , (struct sockaddr *)&a_in , (socklen_t *)&ainsize); //accept if (-1 == a_sock) { printf("accept fail!\n"); close(s_sock); strcpy(strmessage,"网络操作失败,请重新运行数据传输程序!"); isyncover=true; return NULL; } // printf("\naccept success!\n"); /////////////////////////////////////// //read pc message /////////////////////////////////////// strcpy(message,""); rc = recv(a_sock , message , 4 , 0); message[4]='\0'; // printf("(message=%s)\n",message); if (-1 == rc) { printf("error when received client message!\n"); //接收数据时出现错误 close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } //PC read card from IPHONE if(strcmp(message,"read")==0) { // printf("get (read) flag when IPHONE send to PC!\n"); FILE *fpsendtopc; int j=0; int rec; fpsendtopc = fopen(sendtopcFileName, "wb"); if(fpsendtopc) { // printf("seccess open sendtopcFileName to write\n"); while((rec=LoadNameCard(&(icard[j])))>0) { // printf("icard[j].card.szMobileTel=%s\n",icard[j].card.szMobileTel); // printf("icard[j].card.szEmail=%s\n",icard[j].card.szEmail); if(fwrite(&icard[j], sizeof(struct TransferDetail), 1, fpsendtopc)!= 1) printf ("file fpsendtopc write error\n"); j++; cardcount=j; } if(rec==0){} // printf("read card DB over\n"); if(rec==-1) printf("read card DB error\n"); fclose(fpsendtopc); // printf("read card count=%d\n",cardcount); } if (-1 == send(a_sock , &cardcount , sizeof(int), 0) ) { printf("error when send cardcount!\n"); close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } unsigned long filelength; filelength=GetFileSize(sendtopcFileName); if (-1 == send(a_sock , &filelength , sizeof(unsigned long), 0) ) { printf("error when send filelength!\n"); close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } char *str=(char*)malloc(filelength); fpsendtopc = fopen(sendtopcFileName, "rb"); if(fpsendtopc) { fread(str,filelength,1,fpsendtopc); // printf("str=%s\n",str); } if (-1 == send(a_sock , str , filelength , 0) ) { printf("error when send sendtopcFileName!\n"); fclose(fpsendtopc); free(str); close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } fclose(fpsendtopc); free(str); // printf("send over!\n"); remove(sendtopcFileName); // goto skip_continue; close(a_sock); close(s_sock); sprintf(strcardcount,"%d",cardcount); strcpy(strmessage,"向PC端发送"); strcat(strmessage, strcardcount); strcat(strmessage,"张名片!"); } //PC send card to IPHONE else if(strcmp(message,"send")==0) { // printf("get (send) flag when PC send to IPHONE!\n"); strcpy(updatetype,""); rc = recv(a_sock , updatetype , 3 , 0); updatetype[3]='\0'; if(strcmp(updatetype,"rep")==0) { // printf("get (rep) flag\n"); DeleteAllNamecard(); SaveNamecardLogFile(0,0,false); } //strcpy(strcardcount,""); cardcount=0; //rc = recv(a_sock, strcardcount , 4 , 0); rc = recv(a_sock, &cardcount, 4 , 0); //printf("\t\t\tstrcardcount return = %d\n", rc); if (-1 == rc) { printf("error when received cardcount data!\n"); //接收数据时出现错误 close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } //strcardcount[4]='\0'; //cardcount=atoi(strcardcount); printf("get cardcount=%d\n" , cardcount); char szBuf[1024]; unsigned long nBufSize = 0; unsigned long nCnt = 0; unsigned long nRecived = 0;//已经接收到的数据个数 //rc = recv(a_sock , &nBufSize , sizeof(nBufSize) , 0); rc = recv(a_sock , &nBufSize , sizeof(unsigned long) , 0); if (-1 == rc) { printf("error when received data!\n"); //接收数据时出现错误 close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } printf("be going to receive datacount=%d byte\n" , nBufSize); if (nBufSize > 0) { FILE *fpsendtoiphone; fpsendtoiphone = fopen(sendtoiphoneFileName , "wb");// if (fpsendtoiphone) { nCnt = nBufSize; // while( (nCnt > 0) && (rc != -1) ) { memset(szBuf , 0 , 1024); rc = recv(a_sock , szBuf , 1024 , 0); if(rc == -1) { printf("error when received data!"); // break; } fwrite(szBuf , sizeof(char) , rc , fpsendtoiphone);// nCnt -= rc; nRecived += rc; // printf("已经接收了 %d 字节\n" , nRecived); // printf("rc=%d , nCnt=%d , nRecived=%d\n" , rc , nCnt , nRecived); // if(pbar->position() < 100) // { // pbar->step(10+(nRecived/nBufSize)*90);// // XFlush(fl_display); // } } } fclose(fpsendtoiphone); printf("receive over!\n"); if(nRecived != nBufSize) { printf("recv data incorrect\n"); //接收的数据不正确,请重新获取 remove(sendtoiphoneFileName); } printf("begin fill record in card_db!\n"); retadd=AddToDB(); //向数据库中增加记录 printf("fill record in card_db over!\n"); remove(sendtoiphoneFileName);// } close(a_sock); close(s_sock); if(retadd==0) { sprintf(straddcardcount,"%d",addcardcount); strcpy(strmessage,"从PC端接收"); strcat(strmessage, straddcardcount); strcat(strmessage,"张名片!"); } else if (retadd == -2) { strcpy(strmessage,"永久空间不足,添加名片失败!"); } else if (retadd == -3) { strcpy(strmessage,"名片张数达到最大值,添加名片失败!"); } else if (retadd == -4) { strcpy(strmessage,"临时空间不足,添加名片失败!"); } else strcpy(strmessage,"添加名片失败!"); } //backup else if(strcmp(message,"back")==0) { // printf("get (back) flag when IPHONE backup to PC!\n"); tmpfreesize=(unsigned long) show_free("",(char*)pathtmp); if(tmpfreesize<6*1024*1024) { if (-1 == send(a_sock, "fail", 4, 0) ) { printf("error when send (fail)!\n"); close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } close(a_sock); close(s_sock); strcpy(strmessage,"临时存储空间不足,数据备份失败!"); isyncover=true; return NULL; } else { if (-1 == send(a_sock, "succ", 4, 0) ) { printf("error when send (succ)!\n"); close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } // printf("/tmp/isync have enough free!\n"); } chdir("/home/"); printf("tar czf /tmp/isync/home.tgz\n"); int ret=system(com_tarbackup); if(ret==-1) printf("tar czf /tmp/isync/home.tgz fail\n"); unsigned long filelength; filelength=GetFileSize(backuptopcFileName); if (-1 == send(a_sock , &filelength , sizeof(unsigned long), 0) ) { printf("error when send filelength!\n"); close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } char *str=(char*)malloc(filelength); FILE *fpbackuptopc; fpbackuptopc = fopen(backuptopcFileName, "rb"); if(fpbackuptopc) { fread(str,filelength,1,fpbackuptopc); // printf("str=%s\n",str); } if (-1 == send(a_sock , str , filelength , 0) ) { printf("error when send backuptopcFileName!\n"); fclose(fpbackuptopc); free(str); close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } fclose(fpbackuptopc); free(str); // printf("send backup data over!\n"); remove(backuptopcFileName);// close(a_sock); close(s_sock); strcpy(strmessage,"i风数据已成功发送到PC端!"); } //recover else if(strcmp(message,"reco")==0) { // printf("get (reco) flag when PC recover to IPHONE!\n"); tmpfreesize=(unsigned long) show_free("",(char*)pathtmp); if(tmpfreesize<6*1024*1024) { if (-1 == send(a_sock, "fail", 4, 0) ) { printf("error when send (fail)!\n"); close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } close(a_sock); close(s_sock); strcpy(strmessage,"临时存储空间不足,数据恢复失败!"); isyncover=true; return NULL; } else { if (-1 == send(a_sock, "succ", 4, 0) ) { printf("error when send (succ)!\n"); close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } // printf("/tmp/isync have enough free!\n"); } char szBuf[1024]; unsigned long nBufSize = 0; unsigned long nCnt = 0; unsigned long nRecived = 0;// //rc = recv(a_sock , &nBufSize , sizeof(nBufSize) , 0); rc = recv(a_sock , &nBufSize , sizeof(unsigned long) , 0); if (-1 == rc) { printf("error when received recover data!\n"); // close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } // printf("be going to receive datacount=%d byte\n" , nBufSize); if (nBufSize > 0) { FILE *fpbackuptopc; fpbackuptopc = fopen(backuptopcFileName , "wb");// if (fpbackuptopc) { nCnt = nBufSize; // while( (nCnt > 0) && (rc != -1) ) { memset(szBuf , 0 , 1024); rc = recv(a_sock , szBuf , 1024 , 0); if(rc == -1) { printf("error when received data!"); // break; } fwrite(szBuf , sizeof(char) , rc , fpbackuptopc);// nCnt -= rc; nRecived += rc; // printf("已经接收了 %d 字节\n" , nRecived); // printf("rc=%d , nCnt=%d , nRecived=%d\n" , rc , nCnt , nRecived); // if(pbar->position() < 100) // { // pbar->step(10+(nRecived/nBufSize)*90);// // XFlush(fl_display); // } } } fclose(fpbackuptopc); // printf("receive recover data over!\n"); if(nRecived != nBufSize) { printf("recv data incorrect!\n"); // remove(backuptopcFileName); close(a_sock); close(s_sock); strcpy(strmessage,"数据传输出现错误,请重试!"); isyncover=true; return NULL; } chdir("/home/"); // printf("clean home path file!\n"); int ret=system(clean_command); // printf("%s\n",clean_command); if(ret==-1) printf("clean home path file fail!\n"); printf("tar zxf /tmp/isync/home.tgz\n"); ret=system(com_tarrecover); if(ret==-1) printf("tar zxf /tmp/isync/home.tgz fail!\n"); // printf("update home over!\n"); remove(backuptopcFileName);// } // goto skip_continue; close(a_sock); close(s_sock); strcpy(strmessage,"i风数据已成功恢复,确定后系统重新启动!"); restartflag=true; } isyncover=true; return NULL; } int AddToDB(void) { FILE *fp; datum key; // printf("run AddToDB\n"); //正在向数据库中增加资料 if((fp = fopen (sendtoiphoneFileName, "rb+")) == NULL) //打开数据临时文件 return -1; // printf("cardcount=%d\n", cardcount); int retadd; for(int i=0; i 0) { g_threadStatus = 1; addcardcount=SaveNameCardComplete(); if(addcardcount<0) { fclose (fp); return -2; } else break; } } if(retadd==0) { g_threadStatus = 1; addcardcount=SaveNameCardComplete(); if(addcardcount<0) { fclose (fp); return -2; } } fclose (fp); return 0; }