-w, -W, -r all working
This commit is contained in:
@ -5,7 +5,7 @@ pending = 20
|
|||||||
|
|
||||||
[files]
|
[files]
|
||||||
|
|
||||||
MaxFiles = 20
|
MaxFiles = 2
|
||||||
MaxSize = 10000000
|
MaxSize = 10000000
|
||||||
|
|
||||||
[log]
|
[log]
|
||||||
|
|||||||
@ -1259,7 +1259,6 @@ int reciveData(response_t *res, int expected) {
|
|||||||
readnres = readn(fd_skt, &res->numfiles, sizeof(int));
|
readnres = readn(fd_skt, &res->numfiles, sizeof(int));
|
||||||
if(readnres<=0) // readn sets errno
|
if(readnres<=0) // readn sets errno
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if(res->rf)
|
if(res->rf)
|
||||||
free(res->rf);
|
free(res->rf);
|
||||||
res->rf = calloc(res->numfiles, sizeof(recivedFile_t));
|
res->rf = calloc(res->numfiles, sizeof(recivedFile_t));
|
||||||
@ -1267,6 +1266,7 @@ int reciveData(response_t *res, int expected) {
|
|||||||
perror("calloc");
|
perror("calloc");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get files
|
// get files
|
||||||
for(int i=0;i<res->numfiles;++i) {
|
for(int i=0;i<res->numfiles;++i) {
|
||||||
// read path
|
// read path
|
||||||
@ -1350,10 +1350,11 @@ _nofile:
|
|||||||
// file purged
|
// file purged
|
||||||
res->meerrno = 0;
|
res->meerrno = 0;
|
||||||
// get number of files sent
|
// get number of files sent
|
||||||
readnres = readn(fd_skt, &res->numfiles, sizeof(int));
|
readnres = readn(fd_skt, &res->numfiles, sizeof(int64_t));
|
||||||
if(readnres<=0) // readn sets errno
|
if(readnres<=0) // readn sets errno
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
|
||||||
if(res->rf)
|
if(res->rf)
|
||||||
free(res->rf);
|
free(res->rf);
|
||||||
res->rf = calloc(res->numfiles, sizeof(recivedFile_t));
|
res->rf = calloc(res->numfiles, sizeof(recivedFile_t));
|
||||||
@ -1386,6 +1387,16 @@ _nofile:
|
|||||||
readnres = readn(fd_skt, &res->rf[i].filelen, sizeof(int64_t));
|
readnres = readn(fd_skt, &res->rf[i].filelen, sizeof(int64_t));
|
||||||
if(readnres<=0) // readn sets errno
|
if(readnres<=0) // readn sets errno
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
// file has lenght 0 -> allocate memory but dont read
|
||||||
|
if(res->rf[i].filelen == 0) {
|
||||||
|
res->rf[i].file = calloc(1, sizeof(char));
|
||||||
|
if(!res->rf[i].file){
|
||||||
|
perror("calloc");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
res->rf[i].file = calloc(res->rf[i].filelen, sizeof(char));
|
res->rf[i].file = calloc(res->rf[i].filelen, sizeof(char));
|
||||||
if(!res->rf[i].file){
|
if(!res->rf[i].file){
|
||||||
perror("calloc");
|
perror("calloc");
|
||||||
|
|||||||
@ -96,16 +96,18 @@ int sendFile(fileT *f, long fd_c, taglia_t *taglia) {
|
|||||||
perror("writen");
|
perror("writen");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (writen(fd_c, f->data, f->valid) < 0) {
|
if(validLength != 0) { // if file has length 0 dont write
|
||||||
|
if (writen(fd_c, f->data, validLength) < 0) {
|
||||||
perror("writen");
|
perror("writen");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
char tmp_log[LOGBUFSIZE];
|
char tmp_log[LOGBUFSIZE];
|
||||||
int n = 0;
|
int n = 0;
|
||||||
size_t m = sizeof(tmp_log);
|
size_t m = sizeof(tmp_log);
|
||||||
|
|
||||||
n += snprintf(tmp_log+n, m-n, "File \"%s\", di dimensione %"PRId64" Bytes al client %ld .\n", f->filepath, validLength, fd_c);
|
n += snprintf(tmp_log+n, m-n, "Inviato file \"%s\", di dimensione %"PRId64" Bytes al client %ld .\n", f->filepath, validLength, fd_c);
|
||||||
if(taglia_write(taglia, tmp_log) < 0) {
|
if(taglia_write(taglia, tmp_log) < 0) {
|
||||||
perror("taglia_write");
|
perror("taglia_write");
|
||||||
return 1;
|
return 1;
|
||||||
@ -132,7 +134,7 @@ void sendMessageFile(char *m, fileT *f, long fd_c, taglia_t *taglia, char *mlog)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int64_t *n = calloc(1, sizeof(*n));
|
int64_t *n = calloc(1, sizeof(*n));
|
||||||
if(n==NULL) {
|
if(!n) {
|
||||||
perror("calloc");
|
perror("calloc");
|
||||||
goto _sendMF_cleanup;
|
goto _sendMF_cleanup;
|
||||||
}
|
}
|
||||||
@ -275,7 +277,7 @@ void openFile(char *filepath, int flags, queueT *q, long fd_c, taglia_t *taglia)
|
|||||||
taglia_update(taglia, q, 1); // removed only one file
|
taglia_update(taglia, q, 1); // removed only one file
|
||||||
n += snprintf(tmp_buf+n, m-n, "Client %ld ha richiesto una openFile (flags = %x) sul file \"%s\" ha causato una capacity miss. File espulso \"%s\"\n", fd_c, flags, filepath, removed->filepath);
|
n += snprintf(tmp_buf+n, m-n, "Client %ld ha richiesto una openFile (flags = %x) sul file \"%s\" ha causato una capacity miss. File espulso \"%s\"\n", fd_c, flags, filepath, removed->filepath);
|
||||||
sendMessageFile(MEFP, removed, fd_c, taglia, tmp_buf);
|
sendMessageFile(MEFP, removed, fd_c, taglia, tmp_buf);
|
||||||
free(removed);
|
destroyFile(removed);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
23
src/client.c
23
src/client.c
@ -491,7 +491,7 @@ int cmd_w(char *dirname, char *Dir, int print) {
|
|||||||
int num;
|
int num;
|
||||||
|
|
||||||
// we copy dirname because we are nice
|
// we copy dirname because we are nice
|
||||||
char *tofree = malloc(strnlen(dirname, MAXARGLENGTH)+1);
|
char *tofree = calloc(strnlen(dirname, MAXARGLENGTH)+1, sizeof(char));
|
||||||
if(!tofree) {
|
if(!tofree) {
|
||||||
perror("malloc");
|
perror("malloc");
|
||||||
return -1;
|
return -1;
|
||||||
@ -522,7 +522,7 @@ int cmd_w(char *dirname, char *Dir, int print) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (print) {
|
if (print) {
|
||||||
printf("\nw - Scrivo i seguenti file sul server: ");
|
printf("\nw - Scrivo i seguenti file sul server: \n");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -544,12 +544,22 @@ int cmd_w(char *dirname, char *Dir, int print) {
|
|||||||
snprintf(tmp, child->fts_namelen + child->fts_pathlen + 2, "%s/%s", child->fts_path, child->fts_name);
|
snprintf(tmp, child->fts_namelen + child->fts_pathlen + 2, "%s/%s", child->fts_path, child->fts_name);
|
||||||
|
|
||||||
if(print) {
|
if(print) {
|
||||||
printf("%s\n", tmp);
|
printf("%s [", tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// we send the file with the other function but set print to
|
// we send the file with the other function but set print to
|
||||||
// 0 since we do the printing before
|
// 0 since we do the printing before
|
||||||
cmd_W(tmp, Dir, 0);
|
int r = cmd_W(tmp, Dir, 0);
|
||||||
|
|
||||||
|
if(print && !r) {
|
||||||
|
printf("Esito: ok");
|
||||||
|
} else if (print && r) {
|
||||||
|
printf("Esito: errore");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(print) {
|
||||||
|
printf("]\n");
|
||||||
|
}
|
||||||
|
|
||||||
free(tmp);
|
free(tmp);
|
||||||
--num;
|
--num;
|
||||||
@ -586,6 +596,7 @@ int cmd_W(char *filelist, char *Dir, int print) {
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int r = 0;
|
||||||
while ((token = strsep_gnu(&string, ",")) != NULL) {
|
while ((token = strsep_gnu(&string, ",")) != NULL) {
|
||||||
int ok = 1;
|
int ok = 1;
|
||||||
int opened = 0;
|
int opened = 0;
|
||||||
@ -624,10 +635,12 @@ int cmd_W(char *filelist, char *Dir, int print) {
|
|||||||
printf("]\n");
|
printf("]\n");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
if(!ok)
|
||||||
|
r = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(tofree);
|
free(tofree);
|
||||||
return 0;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cmd_r(char *filelist, char *dir, int print) {
|
int cmd_r(char *filelist, char *dir, int print) {
|
||||||
|
|||||||
Reference in New Issue
Block a user