int send_files(unsigned char **files_path, int files_count, const char *ip) { char block_type; int sock, file, c; int trans_cond = EXIT_SUCCESS; /** Opening socket descriptor */ if ((sock = open_socket(ip)) == EXIT_FAILURE) { return EXIT_FAILURE; } for (c = 0; c < files_count; c++) { /** Opening file descriptor */ if ((file = open_file((const char *) files_path[c], O_RDONLY)) == EXIT_FAILURE) { return EXIT_FAILURE; } /** Sending block, file name and file size **/ block_type = BLOCK_FILE_START; write_total(sock, &block_type, 1); const char *file_name = fname((const char *) files_path[c]); write_total(sock, file_name, strlen(file_name)); write_total(sock, &"\n", 1); off_t file_size = fsize((const char *) files_path[c]); /** Checking for file size unavailable **/ if (file_size == -1) { return EXIT_FAILURE; } write_total(sock, &file_size, 8); setup_bar(file_name, file_size); trans_cond = transfer_data(file, sock, 0, file_size); /** Closing streams **/ close(file); /** Checking for transfer condition **/ if (trans_cond == EXIT_FAILURE) { /** Nothing to do **/ break; } printf("\n"); } /** Checking for transaction success **/ if (trans_cond == EXIT_SUCCESS) { /** Sending end-block **/ block_type = BLOCK_FILE_END; write_total(sock, &block_type, 1); } shutdown(sock, SHUT_RDWR); return trans_cond; }
void n_addrec (NDX *n, char *r, unsigned long index_num) { unsigned char i, num; char *rs; int cmp, top; unsigned long page_index; bool changed[64], header_changed; NDX_NODE* key; key=(NDX_NODE*)malloc(8+n->key_length); rs=(char*)malloc(n->key_length); strscpy(rs,r,n->key_length); memset(changed,0,sizeof(changed)); header_changed=false; page_index=n->root_page; top=-1; while (page_index) { get_page(n,page_index,++top); if (pages[top].keys[0]->index) break; for (i=0;i<pages[top].key_num;i++) { cmp=memcmp(rs,pages[top].keys[i]->key_data,n->key_length); if ((cmp<0) || (cmp==0 && index_num<pages[top].keys[i]->index)) { page_index=pages[top].keys[i]->left_page; break; } } if (i==pages[top].key_num) { memcpy(pages[top].keys[--i],rs,n->key_length); changed[i]=true; page_index=pages[top].keys[--i]->left_page; } } key=make_node(n,0,index_num,rs); addrec(n,num=top,key); changed[top]=true; while (pages[num].key_num>n->max_keys && num>1) { spilt_page(n,num,++top); header_changed=true; addrec(n,num-1,get_last(n,num)); changed[num]=changed[top]=true; } if (pages[num].key_num>n->max_keys) { spilt_page(n,num,++top); header_changed=true; changed[num]=changed[top]=true; make_page(n,num,top,top+1); top++; changed[top]=true; } for (i=0;i<=top;i++) { if (changed[i]) put_page(n,i); dispose_page(i); } if (header_changed) write_total(n); }
int load_file(const char *directory, const char *ip) { char block_type; int sock, file; int trans_cond = EXIT_SUCCESS; /** Opening socket descriptor */ if ((sock = open_socket(ip)) == EXIT_FAILURE) { return EXIT_FAILURE; } /** Reading block until all files will not be received **/ while (read_total(sock, &block_type, 1) == 1 && block_type == BLOCK_FILE_START) { /** Reading file name **/ const char *file_name = (const char *) read_data(sock, '\n', 0); /** Concatinating into file path **/ char *file_path = fpath(file_name, directory); /** Reading file size **/ off_t file_size = *((unsigned long *) read_data(sock, 0, 8)); /** Opening file descriptor */ if ((file = open_file(file_path, O_CREAT | O_WRONLY)) == EXIT_FAILURE) { return EXIT_FAILURE; } setup_bar(file_name, file_size); trans_cond = transfer_data(sock, file, 0, file_size); /** Closing streams **/ close(file); /** Checking for transfer condition **/ if (trans_cond == EXIT_FAILURE) { /** Nothing to do now **/ break; } printf("\n"); } /** Checking for transaction success **/ if (trans_cond == EXIT_SUCCESS) { block_type = BLOCK_FILE_END; write_total(sock, &block_type, 1); } shutdown(sock, SHUT_RDWR); return trans_cond; }