Ejemplo n.º 1
0
/* 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;
}
Ejemplo n.º 2
0
/* 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;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
0
/* 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;
}
Ejemplo n.º 5
0
/* 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;
}
Ejemplo n.º 6
0
/* 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;
}
Ejemplo n.º 7
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;
    }

}