Fixed NR mode: prevent to open multiple files
This commit is contained in:
		
							parent
							
								
									1e13eb5557
								
							
						
					
					
						commit
						1aff894fc3
					
				@ -121,7 +121,7 @@ int binkp_loop(s_binkp_state *bstate) {
 | 
			
		||||
        }
 | 
			
		||||
        if (have_to_write==0 && (!no_more_to_send || bstate->extracmd[0]!=-1)) {
 | 
			
		||||
            m = binkp_getforsend(bstate, writebuf+BINKP_HEADER, &block_type, &block_length);
 | 
			
		||||
            if( m==1) {
 | 
			
		||||
            if(m==1 || m==3) {
 | 
			
		||||
                //log("got block for sending %d %hu", block_type, block_length);
 | 
			
		||||
                write_pos = 0;
 | 
			
		||||
                have_to_write = block_length+BINKP_HEADER;
 | 
			
		||||
@ -135,13 +135,15 @@ int binkp_loop(s_binkp_state *bstate) {
 | 
			
		||||
                    return -1;
 | 
			
		||||
                }
 | 
			
		||||
                writebuf[1] = block_length&0xff;
 | 
			
		||||
            } else if (m==2) {
 | 
			
		||||
            }
 | 
			
		||||
            if (m==2 || m==3) {
 | 
			
		||||
                log("no more to send");
 | 
			
		||||
                no_more_to_send = true;
 | 
			
		||||
            }
 | 
			
		||||
            else if (m==0) {
 | 
			
		||||
            if (m==0) {
 | 
			
		||||
                log("binkp: nothing to write");
 | 
			
		||||
            } else {
 | 
			
		||||
            }
 | 
			
		||||
            if (m<0 || m>3) {
 | 
			
		||||
                log("getforsend error");
 | 
			
		||||
                return -1;
 | 
			
		||||
            }
 | 
			
		||||
@ -524,9 +526,9 @@ case 4:
 | 
			
		||||
                    log("send M_FILE with -1");
 | 
			
		||||
                    buf[0] = BPMSG_FILE;
 | 
			
		||||
                    *block_length = 1+sprintf(buf+1, "%s %ld %ld -1", bstate->pi->send->net_name, 
 | 
			
		||||
                            bstate->pi->send->bytes_total, bstate->pi->send->mod_time);
 | 
			
		||||
                            (long)bstate->pi->send->bytes_total, (long)bstate->pi->send->mod_time);
 | 
			
		||||
                    *block_type = BINKP_BLK_CMD;
 | 
			
		||||
                    return 2; // no state change. phase would be changed to 1 by recv when M_GET is received
 | 
			
		||||
                    return 3; // no state change. phase would be changed to 1 by recv when M_GET is received
 | 
			
		||||
                }
 | 
			
		||||
                bstate->phase += 1;
 | 
			
		||||
 | 
			
		||||
@ -865,7 +867,7 @@ case BPMSG_SKIP:
 | 
			
		||||
	            if (buf[0] == BPMSG_SKIP) {
 | 
			
		||||
	                if (bstate->pi->send->netspool) {
 | 
			
		||||
	                    log("cannot skip netspool");
 | 
			
		||||
	                    return -1;
 | 
			
		||||
	                    return -1; // no reason to continue sending
 | 
			
		||||
	                }
 | 
			
		||||
	                log("skipped %s", fi.fn);
 | 
			
		||||
	                bstate->pi->send->status = FSTAT_REFUSED;
 | 
			
		||||
@ -877,7 +879,7 @@ case BPMSG_SKIP:
 | 
			
		||||
	                    log("confirmed not sent file - skipped %s", fi.fn);
 | 
			
		||||
	                    if (bstate->pi->send->netspool) {
 | 
			
		||||
	                        log("cannot skip netspool");
 | 
			
		||||
	                        return -1;
 | 
			
		||||
	                        return -1; // no reason to continue sending
 | 
			
		||||
	                    }
 | 
			
		||||
		            bstate->pi->send->status = FSTAT_SKIPPED;
 | 
			
		||||
	                }
 | 
			
		||||
 | 
			
		||||
@ -43,6 +43,7 @@ int binkp_parsfinfo(const char *str, s_bpfinfo *fi, bool with_offset)
 | 
			
		||||
        log("too long string, overflow may occur");
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
    log("info to parse: %s", str);
 | 
			
		||||
    r = sscanf(str, with_offset? "%s %d %d %d": "%s %d %d", &fi->fn, &fi->sz, &fi->tm, &fi->offs);
 | 
			
		||||
    if (r==(with_offset? 4: 3)) {
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
@ -229,9 +229,10 @@ int p_tx_fopen(s_protinfo *pi, s_filehint *hint)
 | 
			
		||||
		return 1;
 | 
			
		||||
		
 | 
			
		||||
	if (hint) {
 | 
			
		||||
	    log("trying to reopen file");
 | 
			
		||||
	    log("trying to reopen file %s size %d time %d", hint->fn, hint->sz, hint->tm);
 | 
			
		||||
	    int i;
 | 
			
		||||
	    for (i=0; i++; i<pi->n_sentfiles) {
 | 
			
		||||
	        log("check %s %d %d", pi->sentfiles[i].net_name, pi->sentfiles[i].bytes_total, pi->sentfiles[i].mod_time);
 | 
			
		||||
	        if (strcmp(pi->sentfiles[i].net_name, hint->fn)==0) {
 | 
			
		||||
	            log("name match");
 | 
			
		||||
	            if (pi->sentfiles[i].bytes_total == hint->sz) {
 | 
			
		||||
@ -251,6 +252,8 @@ int p_tx_fopen(s_protinfo *pi, s_filehint *hint)
 | 
			
		||||
	            }
 | 
			
		||||
	        }
 | 
			
		||||
	    }
 | 
			
		||||
	    log("no file for this hint");
 | 
			
		||||
	    return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
get_next_file:
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user