/* rename or move (file&folder) */ int SMB_remo(char *localoldpath, char *localnewpath, int index) { SMB_init(index); char *serveroldpath, *servernewpath; serveroldpath = localpath_to_serverpath(localoldpath, index); servernewpath = localpath_to_serverpath(localnewpath, index); int res = smbc_rename(serveroldpath, servernewpath); if(res != 0) { if(!test_if_dir(localnewpath)){ res = SMB_upload(localnewpath, index); if(res == 0) { time_t modtime = Getmodtime(servernewpath, index); if(ChangeFile_modtime(localnewpath, modtime, index)) { printf("ChangeFile_modtime failed!\n"); } } }else{ res = moveFolder(localoldpath, localnewpath, index); } } free(serveroldpath); free(servernewpath); return res; }
/* upload file */ int SMB_upload(char *localpath, int index) { if(access(localpath, F_OK) != 0) { printf("Local has no %s\n", localpath); return LOCAL_FILE_LOST; } write_log(S_UPLOAD, "", localpath, index); SMB_init(index); int buflen; char buffer[4096] = {0}; char *serverpath = localpath_to_serverpath(localpath, index); int smb_fd = smbc_open(serverpath, O_RDWR|O_CREAT, FILE_MODE); int cli_fd; if((cli_fd = open(localpath, O_RDONLY, FILE_MODE)) > 0) {//以只读的方式打开,文件 DEBUG("open localpath sucess\n"); unsigned long long cli_filesize = 0; unsigned long long smb_filesize = 0; cli_filesize = lseek(cli_fd, 0L, SEEK_END); lseek(cli_fd, 0L, SEEK_SET);//read or write 文件的偏移量 //2014.11.19 by sherry 判断上传是否成功 //buflen = read(cli_fd, buffer, sizeof(buffer)); //DEBUG("buflen=%d\n",buflen); //while(buflen > 0 && exit_loop == 0) while((buflen = read(cli_fd, buffer, sizeof(buffer))) > 0 && exit_loop == 0) { smb_filesize += buflen; //2014.11.19 by sherry 判断上传是否成功 //smbc_write(smb_fd, buffer, buflen);//smb_fd为server端的文件 int res=0; res=smbc_write(smb_fd, buffer, buflen); if(res==-1) return -1; printf("\rUpload [%s] percent - %f ", localpath, (float)smb_filesize/(float)cli_filesize); } if(smb_filesize != cli_filesize && exit_loop != 0) { DEBUG("smb_filesize != cli_filesize && exit_loop != 0"); FILE *f_stream = fopen(g_pSyncList[index]->up_item_file, "w"); fprintf(f_stream, "%s", localpath); fclose(f_stream); } smbc_close(smb_fd); close(cli_fd); DEBUG("upload --end\n"); } free(serverpath); return 0; }
/* unlink (file) */ int SMB_rm(char *localpath, int index) { printf("SMB_rm() - %s start\n", localpath); int res = 0; int exsit = is_server_exist(localpath, index); if(!exsit) return res; char *serverpath = localpath_to_serverpath(localpath, index); res = SMB_del(serverpath, index); free(serverpath); return res; }
/* mkdir (folder) */ int SMB_mkdir(char *localpath, int index) { if(access(localpath, F_OK) != 0) { printf("Local has no %s\n", localpath); return LOCAL_FILE_LOST; } SMB_init(index); char *serverpath = localpath_to_serverpath(localpath, index); int res = smbc_mkdir(serverpath, DIR_MODE); free(serverpath); return res; }
/* mkdir (folder) */ int SMB_mkdir(char *localpath, int index) { DEBUG("SMB_mkdir start\n"); if(access(localpath, F_OK) != 0) { printf("Local has no %s\n", localpath); return LOCAL_FILE_LOST; } SMB_init(index); char *serverpath = localpath_to_serverpath(localpath, index); DEBUG("SMB_mkdir --serverpath=%s\n",serverpath); int res = smbc_mkdir(serverpath, DIR_MODE); DEBUG("SMB_mkdir --res=%d\n",res); free(serverpath); DEBUG("SMB_mkdir end\n"); return res; }
/* upload file */ int SMB_upload(char *localpath, int index) { if(access(localpath, F_OK) != 0) { printf("Local has no %s\n", localpath); return LOCAL_FILE_LOST; } write_log(S_UPLOAD, "", localpath, index); SMB_init(index); int buflen; char buffer[4096] = {0}; char *serverpath = localpath_to_serverpath(localpath, index); int smb_fd = smbc_open(serverpath, O_RDWR|O_CREAT, FILE_MODE); int cli_fd; if((cli_fd = open(localpath, O_RDONLY, FILE_MODE)) > 0){ unsigned long long cli_filesize = 0; unsigned long long smb_filesize = 0; cli_filesize = lseek(cli_fd, 0L, SEEK_END); lseek(cli_fd, 0L, SEEK_SET); while((buflen = read(cli_fd, buffer, sizeof(buffer))) > 0 && exit_loop == 0){ smb_filesize += buflen; smbc_write(smb_fd, buffer, buflen); printf("\rUpload [%s] percent - %f ", localpath, (float)smb_filesize/(float)cli_filesize); } if(smb_filesize != cli_filesize && exit_loop != 0) { FILE *f_stream = fopen(g_pSyncList[index]->up_item_file, "w"); fprintf(f_stream, "%s", localpath); fclose(f_stream); } smbc_close(smb_fd); close(cli_fd); } free(serverpath); return 0; }
int upload_serverlist(Server_TreeNode *treenode,Browse *perform_br, LocalFolder *localfoldertmp,int index){ wd_DEBUG("upload_serverlist\n"); CloudFile *foldertmp = NULL,*foldertmp_1=NULL; foldertmp=(CloudFile *)malloc(sizeof(struct node)); memset(foldertmp,0,sizeof(foldertmp)); foldertmp_1=perform_br->folderlist; while(foldertmp_1->next != NULL) { foldertmp_1=foldertmp_1->next; } if(foldertmp_1->next == NULL){ //wd_DEBUG("1111\n"); char *serverpath; serverpath=localpath_to_serverpath(localfoldertmp->path,index); foldertmp->href=(char *)malloc(sizeof(char)*(strlen(serverpath)+1)); memset(foldertmp->href,'\0',sizeof(char)*(strlen(serverpath)+1)); strcpy(foldertmp->href,serverpath); foldertmp->size=0; foldertmp->name=parse_name_from_path(foldertmp->href); foldertmp->isFolder=1; foldertmp_1->next=foldertmp; foldertmp_1=foldertmp; foldertmp->next=NULL; free(serverpath); } Browse *br; br=getb(Browse); memset(br,0,sizeof(br)); TreeFolderList = (CloudFile *)malloc(sizeof(CloudFile)); memset(TreeFolderList,0,sizeof(CloudFile)); TreeFileList = (CloudFile *)malloc(sizeof(CloudFile)); memset(TreeFileList,0,sizeof(CloudFile)); TreeFolderList->href = NULL; TreeFileList->href = NULL; TreeFolderTail = TreeFolderList; TreeFileTail = TreeFileList; TreeFolderTail->next = NULL; TreeFileTail->next = NULL; br->filelist = TreeFileList; br->folderlist = TreeFolderList; br->filenumber=0; br->foldernumber=0; Server_TreeNode *treenodetmp,*p1=NULL,*p2=NULL; treenodetmp=create_server_treeroot(); treenodetmp->parenthref=(char *)malloc(sizeof(char)*(strlen(foldertmp->href)+1)); treenodetmp->level = treenode->level + 1; memset(treenodetmp,'\0',sizeof(treenodetmp)); strcpy(treenodetmp->parenthref,foldertmp->href); treenodetmp->browse=br; if(treenode->Child == NULL) { //wd_DEBUG("222\n"); treenode->Child = treenodetmp; } else { //wd_DEBUG("333\n"); //printf("have child\n"); p2 = treenode->Child; p1 = p2->NextBrother; while(p1 != NULL) { //printf("p1 nextbrother have\n"); p2 = p1; p1 = p1->NextBrother; } p2->NextBrother = treenodetmp; treenodetmp->NextBrother = NULL; } }