disable NR in NETSPOOL mode due to fatal incompatibility

master
Sergey Dorofeev 13 years ago
parent e3533cfbe0
commit 64074ffb24

@ -1,6 +1,8 @@
=== 2012-02 === === 2012-02 ===
Netspool support Netspool support
Netspool forcibly disables NR mode in binkp
(due to NR mode requires access to file on local filesystem)
=== 2011-12-25 === === 2011-12-25 ===

@ -363,7 +363,9 @@ int binkp_incoming(s_binkp_sysinfo *local_data, s_binkp_sysinfo *remote_data)
override_get (&ovr, remote_data->addrs[i].addr, 0); override_get (&ovr, remote_data->addrs[i].addr, 0);
if (!nodelist_checkflag (ovr.sFlags, "NR")) if (!nodelist_checkflag (ovr.sFlags, "NR"))
{ {
#ifndef NETSPOOL
szOpt = xstrcat (szOpt, " NR"); szOpt = xstrcat (szOpt, " NR");
#endif
break; break;
} }
} }
@ -439,6 +441,7 @@ int binkp_transfer(s_protinfo *pi) {
if (remote->options & BINKP_OPT_NR) { if (remote->options & BINKP_OPT_NR) {
binkp_queuemsgf(&bpi,BPMSG_FILE,"%s %ld %ld -1",name,total,time); binkp_queuemsgf(&bpi,BPMSG_FILE,"%s %ld %ld -1",name,total,time);
binkp_send_state = BPT_Wait_M_GET; binkp_send_state = BPT_Wait_M_GET;
log("binkp going to BPT_Wait_M_GET");
} else { } else {
binkp_queuemsgf(&bpi,BPMSG_FILE,"%s %ld %ld 0", name,total,time); binkp_queuemsgf(&bpi,BPMSG_FILE,"%s %ld %ld 0", name,total,time);
binkp_send_state = BPT_Send_File; binkp_send_state = BPT_Send_File;
@ -446,6 +449,7 @@ int binkp_transfer(s_protinfo *pi) {
} }
} }
if (binkp_send_state == BPT_Send_File) { if (binkp_send_state == BPT_Send_File) {
log("binkp BPT_Send_File");
if (bpi.opos == 0 && bpi.n_msgs == 0) { if (bpi.opos == 0 && bpi.n_msgs == 0) {
if((n = p_tx_readfile (bpi.obuf+BINKP_BLK_HDRSIZE,4096,pi))<0) { if((n = p_tx_readfile (bpi.obuf+BINKP_BLK_HDRSIZE,4096,pi))<0) {
p_tx_fclose (pi); p_tx_fclose (pi);

@ -538,8 +538,10 @@ void binkp_queue_sysinfo(s_bpinfo *bpi, s_binkp_sysinfo *binkp)
if (state.caller) if (state.caller)
{ {
char *szOpt = xstrcpy (" MB"); char *szOpt = xstrcpy (" MB");
#ifndef NETSPOOL
if (!nodelist_checkflag (state.node.flags, "NR")) if (!nodelist_checkflag (state.node.flags, "NR"))
szOpt = xstrcat (szOpt, " NR"); szOpt = xstrcat (szOpt, " NR");
#endif
if (!nodelist_checkflag (state.node.flags, "ND")) if (!nodelist_checkflag (state.node.flags, "ND"))
szOpt = xstrcat (szOpt, " ND"); szOpt = xstrcat (szOpt, " ND");
if (*szOpt) if (*szOpt)
@ -732,9 +734,12 @@ void binkp_parse_options(s_binkp_sysinfo *binkp, char *options)
for( p = string_token(options, &n, NULL, 0); p; for( p = string_token(options, &n, NULL, 0); p;
p = string_token(NULL, &n, NULL, 0) ) p = string_token(NULL, &n, NULL, 0) )
{ {
if( !strcmp(p, "NR") ) #ifndef NETSPOOL
if( !strcmp(p, "NR") ) {
binkp->options |= BINKP_OPT_NR; binkp->options |= BINKP_OPT_NR;
else if( !strcmp(p, "MB") ) } else
#endif
if( !strcmp(p, "MB") )
binkp->options |= BINKP_OPT_MB; binkp->options |= BINKP_OPT_MB;
else if( !strcmp(p, "MPWD") ) else if( !strcmp(p, "MPWD") )
binkp->options |= BINKP_OPT_MPWD; binkp->options |= BINKP_OPT_MPWD;

@ -102,9 +102,9 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi)
/* network queue */ /* network queue */
#ifdef NETSPOOL #ifdef NETSPOOL
log("start netspool"); log("netspool next file");
if(state.netspool.state == NS_NOTINIT) { if(state.netspool.state == NS_NOTINIT) {
log("netspool connection"); log("new netspool connection");
char password[100]; char password[100];
char address[300]; char address[300];
char *host = conf_string(cf_netspool_host); char *host = conf_string(cf_netspool_host);
@ -135,7 +135,7 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi)
log("netspool begin receive"); log("netspool begin receive");
netspool_receive(&state.netspool); netspool_receive(&state.netspool);
} else { } else {
log("netspool is busy"); log("netspool could not start receive");
return 1; return 1;
} }
@ -145,10 +145,13 @@ static int prot_get_next_file(s_filelist **dest, s_protinfo *pi)
return 0; return 0;
} }
if(state.netspool.state == NS_READY) {
log("no files to receive");
netspool_end(&state.netspool);
}
if(state.netspool.state==NS_ERROR) { if(state.netspool.state==NS_ERROR) {
log("netspool error %s", state.netspool.error); log("no next file: netspool error %s", state.netspool.error);
} else {
log("netspool gives no more files");
} }
#endif #endif
@ -452,6 +455,7 @@ int p_tx_fclose(s_protinfo *pi)
break; break;
#ifdef NETSPOOL #ifdef NETSPOOL
case ACTION_ACKNOWLEDGE: case ACTION_ACKNOWLEDGE:
log("netspool commit %s", state.netspool.filename);
netspool_acknowledge(&state.netspool); netspool_acknowledge(&state.netspool);
break; break;
#endif #endif
@ -482,6 +486,7 @@ int p_tx_readfile(char *buffer, size_t buflen, s_protinfo *pi)
#ifdef NETSPOOL #ifdef NETSPOOL
if(pi->send->fname==NULL && strcmp(pi->send->local_name, "NETSPOOL")==0 ) { if(pi->send->fname==NULL && strcmp(pi->send->local_name, "NETSPOOL")==0 ) {
log("reading netspool file");
if( state.netspool.state != NS_RECVFILE ) { if( state.netspool.state != NS_RECVFILE ) {
log("send: wrong netspool state"); log("send: wrong netspool state");
pi->send->status = FSTAT_SKIPPED; pi->send->status = FSTAT_SKIPPED;
@ -490,12 +495,14 @@ int p_tx_readfile(char *buffer, size_t buflen, s_protinfo *pi)
n = netspool_read(&state.netspool, buffer, buflen); n = netspool_read(&state.netspool, buffer, buflen);
pi->send->eofseen = state.netspool.length == 0; pi->send->eofseen = state.netspool.length == 0;
if( n==-1 ) { if( n==-1 ) {
log("send: netspool error"); log("send: netspool error %s", state.netspool.error);
log(state.netspool.error);
pi->send->status = FSTAT_SKIPPED; pi->send->status = FSTAT_SKIPPED;
return -2; return -2;
} }
log("got %d bytes from netspool", n);
return n; return n;
} else {
log("reading local file");
} }
#endif #endif
/* /*
@ -1295,9 +1302,9 @@ void p_session_cleanup(s_protinfo *pi, bool success)
#ifdef NETSPOOL #ifdef NETSPOOL
if(state.netspool.state==NS_ERROR) { if(state.netspool.state==NS_ERROR) {
log("netspool error %s", state.netspool.error); log("end session: netspool error %s", state.netspool.error);
} }
netspool_end(&state.netspool); /*netspool_end(&state.netspool);*/
#endif #endif
} }

Loading…
Cancel
Save