Browse code

Ver0.9.0

Masanobu Yasui authored on 2008/10/08 03:02:45
Showing 2 changed files
... ...
@@ -303,17 +303,6 @@ int mexec_send(mcomm *c, int n)
303 303
 	  lprintf(0, "%s: out of memorry\n", __func__);
304 304
     return(0);
305 305
 	}
306
-	m->mdata.head.reqid  = getrid();
307
-	m->mdata.head.opcode = MAKUO_OP_SEND;
308
-	m->mdata.head.seqno  = 0;
309
-  m->mdata.head.nstate = MAKUO_SENDSTATE_STAT;
310
-	m->comm      = c;
311
-	m->sendwait  = 0;
312
-  m->sendto    = 0;
313
-  m->dryrun    = (mode == MAKUO_MEXEC_DRY);
314
-  m->initstate = 1;
315
-  m->ln[0]     = 0;
316
-	strcpy(m->fn, fn);
317 306
 	if(lstat(fn, &m->fs) == -1){
318 307
 	  cprintf(0, c, "error: lstat() error %s\n", fn);
319 308
 		lprintf(1,    "%s: lstat() error argc=%d cmd=%s\n", __func__, c->argc[n], c->cmdline[n]);
... ...
@@ -323,6 +312,17 @@ int mexec_send(mcomm *c, int n)
323 323
 		mfdel(m);
324 324
     return(0);
325 325
 	}
326
+	strcpy(m->fn, fn);
327
+	m->mdata.head.reqid  = getrid();
328
+	m->mdata.head.opcode = MAKUO_OP_SEND;
329
+  m->mdata.head.nstate = MAKUO_SENDSTATE_STAT;
330
+	m->comm      = c;
331
+  m->dryrun    = (mode == MAKUO_MEXEC_DRY);
332
+  m->initstate = 1;
333
+  m->seqnomax  = m->fs.st_size / MAKUO_BUFFER_SIZE;
334
+  if(m->fs.st_size % MAKUO_BUFFER_SIZE){
335
+    m->seqnomax++; 
336
+  }
326 337
 
327 338
   /*----- owner check -----*/
328 339
   if(moption.ownmatch && (moption.uid != m->fs.st_uid)){
... ...
@@ -536,6 +536,7 @@ static void mrecv_req_send_close(mfile *m, mdata *r)
536 536
     case MAKUO_RECVSTATE_MARK:
537 537
       m->mdata.head.ostate = m->mdata.head.nstate;
538 538
       m->mdata.head.nstate = MAKUO_RECVSTATE_CLOSE;
539
+      break;
539 540
     case MAKUO_RECVSTATE_CLOSE:
540 541
     case MAKUO_RECVSTATE_CLOSEERROR:
541 542
       break;
... ...
@@ -581,6 +582,7 @@ static void mrecv_req_send_close(mfile *m, mdata *r)
581 581
       }
582 582
     }
583 583
   }
584
+
584 585
   a = mfins(0);
585 586
   if(!a){
586 587
     lprintf(0,"%s: out of memory\n", __func__);
... ...
@@ -647,6 +649,10 @@ static mfile *mrecv_req_send_create(mdata *data, struct sockaddr_in *addr)
647 647
   uint16_t fnlen;
648 648
   uint16_t lnlen;
649 649
 
650
+  if(data->head.nstate != MAKUO_SENDSTATE_STAT){
651
+    return(NULL);
652
+  }
653
+
650 654
   /* create object */
651 655
   if(!(m = mfadd(1))){
652 656
     return(NULL);
... ...
@@ -692,6 +698,7 @@ static mfile *mrecv_req_send_create(mdata *data, struct sockaddr_in *addr)
692 692
 
693 693
 static void mrecv_req_send(mdata *data, struct sockaddr_in *addr)
694 694
 {
695
+  mfile *a; 
695 696
   mfile *m; 
696 697
   for(m=mftop[1];m;m=m->next){
697 698
     if(!memcmp(&m->addr, addr, sizeof(m->addr)) && m->mdata.head.reqid == data->head.reqid){
... ...
@@ -700,12 +707,25 @@ static void mrecv_req_send(mdata *data, struct sockaddr_in *addr)
700 700
   }
701 701
   if(!m){
702 702
     m = mrecv_req_send_create(data, addr);
703
-    if(!m){
704
-      lprintf(0, "%s: out of memory\n", __func__);
703
+  }
704
+  if(m){
705
+    mtimeget(&(m->lastrecv));
706
+    mrecv_req_send_next(m, data);
707
+  }else{
708
+    if(data->head.nstate != MAKUO_SENDSTATE_DATA){
709
+      a = mfins(0);
710
+      if(!a){
711
+        lprintf(0,"%s: out of memory\n", __func__);
712
+      }else{
713
+        a->mdata.head.flags |= MAKUO_FLAG_ACK;
714
+        a->mdata.head.opcode = data->head.opcode;
715
+        a->mdata.head.reqid  = data->head.reqid;
716
+        a->mdata.head.seqno  = data->head.seqno;
717
+        a->mdata.head.nstate = MAKUO_RECVSTATE_IGNORE;
718
+        memcpy(&(a->addr), addr, sizeof(a->addr));
719
+      }
705 720
     }
706 721
   }
707
-  mtimeget(&(m->lastrecv));
708
-  mrecv_req_send_next(m, data);
709 722
 }
710 723
 
711 724
 static void mrecv_req_md5_open(mfile *m, mdata *data, struct sockaddr_in *addr)