[BACK]Return to oxmisc.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / plugin / Old

Annotation of OpenXM/src/kan96xx/plugin/Old/oxmisc.c, Revision 1.1

1.1     ! maekawa     1: #include <stdio.h>
        !             2: #include <sys/types.h>
        !             3: #include <sys/stat.h>
        !             4: #include <sys/socket.h>
        !             5: #include <sys/time.h>
        !             6: #include <netinet/in.h>
        !             7: #include <netdb.h>
        !             8: #include <fcntl.h>
        !             9: FILE *MyErrorOut = stdout;
        !            10: #include "ox_kan.h"
        !            11:
        !            12: #define READBUFSIZE 5000
        !            13:
        !            14: int UseOXPacketSerial = 0;
        !            15:
        !            16:
        !            17: int readOneByte(int fd)   /* blocking */
        !            18: {
        !            19:   static char data[1];
        !            20:   int size;
        !            21:   int ans;
        !            22:   int watch = 1;
        !            23:
        !            24:   if (fd < 0) {
        !            25:     fprintf(MyErrorOut,"readOneByte fd < 0 ??? .\n");
        !            26:     return(-1);
        !            27:   }
        !            28:
        !            29:   if (oxSocketSelect0(fd,-1)) { /* block */
        !            30:     size = read(fd,data,1);
        !            31:     if (size == 0) {
        !            32:       fprintf(MyErrorOut,"oxSocketSelect0() returns 1, but there is no data. You peer may be killed.\n");
        !            33:       return(-1);
        !            34:     }
        !            35:     return(data[0]);
        !            36:   }else{
        !            37:     fprintf(MyErrorOut,"readOneByte: select error in block mode. Retrying.\n");
        !            38:     return(-1);
        !            39:   }
        !            40: }
        !            41:
        !            42: int readOneByte_org(int fd)   /* blocking */
        !            43: {
        !            44:   static char data[READBUFSIZE];
        !            45:   static int thisFd = -1;
        !            46:   static int from = 0;
        !            47:   static int to = 0;
        !            48:   int size;
        !            49:   int ans;
        !            50:   int watch = 1;
        !            51:
        !            52:   if ((thisFd == -1) && (fd >= 0)) {thisFd = fd;}
        !            53:   if (fd < 0) {
        !            54:     fprintf(MyErrorOut,"readOneByte fd < 0 ??? .\n");
        !            55:     return(-1);
        !            56:   }
        !            57:
        !            58:   if (fd != thisFd) {
        !            59:     fprintf(MyErrorOut,"readOneByte can be used only for one fd.\n");
        !            60:     fflush(NULL);
        !            61:     return(-1);
        !            62:   }
        !            63:   if (to > from) {
        !            64:     ans = data[from];
        !            65:     from++;
        !            66:     if (watch) {
        !            67:       printf("%2x ",ans);
        !            68:       fflush(stdout);
        !            69:     }
        !            70:     return(ans);
        !            71:   }
        !            72:
        !            73:   while (1) {
        !            74:     if (oxSocketSelect0(fd,-1)) { /* block */
        !            75:       size = read(fd,data,READBUFSIZE-1);
        !            76:       if (size == 0) {
        !            77:        fprintf(MyErrorOut,"oxSocketSelect0() returns 1, but there is no data. You peer may be killed.\n");
        !            78:        return(-1);
        !            79:       }
        !            80:       from = 0;
        !            81:       to = size;
        !            82:       return(readOneByte(fd));
        !            83:     }else{
        !            84:       fprintf(MyErrorOut,"readOneByte: select error in block mode. Retrying.\n");  }
        !            85:   }
        !            86: }
        !            87:
        !            88: int oxfdGetInt32(int fd)
        !            89: {
        !            90:   char d[4];
        !            91:   int i;
        !            92:   for (i=0; i<4; i++) {
        !            93:     d[i] = readOneByte(fd);
        !            94:   }
        !            95:   return(ntohl(* ( (int *)d)));
        !            96: }
        !            97:
        !            98: int oxGetInt32(ox_stream ostream)
        !            99: {
        !           100:   char d[4];
        !           101:   int i;
        !           102:   for (i=0; i<4; i++) {
        !           103:     d[i] = fp2fgetc(ostream);
        !           104:   }
        !           105:   return(ntohl(* ( (int *)d)));
        !           106: }
        !           107: int oxGetCMOInt32(ox_stream ostream)
        !           108: {
        !           109:   int id;
        !           110:   id = oxGetInt32(ostream);
        !           111:   if (id != CMO_INT32) {
        !           112:     fprintf(MyErrorOut,"It is not CMO_INT32.\n");
        !           113:     return(0);
        !           114:   }
        !           115:   return(oxGetInt32(ostream));
        !           116: }
        !           117: char *oxGetCMOString(ox_stream ostream) {
        !           118:   int id;
        !           119:   int size;
        !           120:   char *r;
        !           121:   int i;
        !           122:   id = oxGetInt32(ostream);
        !           123:   if (id != CMO_STRING) {
        !           124:     fprintf(MyErrorOut,"It is not CMO_STRING.\n");
        !           125:     return(NULL);
        !           126:   }
        !           127:   size = oxGetInt32(ostream);
        !           128:   if (size <0) {
        !           129:     return(NULL);
        !           130:   }else{
        !           131:     r = (char *)mymalloc(size+1);
        !           132:     for (i=0; i<size; i++) {
        !           133:       r[i] = fp2fgetc(ostream);
        !           134:     }
        !           135:     r[size] = '\0';
        !           136:     return(r);
        !           137:   }
        !           138: }
        !           139:
        !           140: void oxfdSendSyncBall(int fd)
        !           141: {
        !           142:   oxfdSendOXheader(fd,OX_SYNC_BALL,SerialOX++);
        !           143:   /*
        !           144:   char data[4*2];
        !           145:   *((int *)&data[0]) = htonl(OX_SYNC_BALL);
        !           146:   write(fd,data,4);
        !           147:   fflush((FILE *)NULL);
        !           148:   */
        !           149: }
        !           150:
        !           151: void oxSendSyncBall(ox_stream os)
        !           152: {
        !           153:   char data[4*2];
        !           154:   *((int *)&data[0]) = htonl(OX_SYNC_BALL);
        !           155:   fp2write(os,data,4);
        !           156:   fp2fflush(os);
        !           157: }
        !           158:
        !           159: int oxWaitSyncBall(ox_stream ostream)
        !           160: {
        !           161:   int mtag;
        !           162:   char data[4];
        !           163:   int c;
        !           164:   data[0] = data[1] = data[2] = data[3] = 0xff;
        !           165:   while (1) {
        !           166:     /* This part should be revised so that this part understands
        !           167:        the cmo format.
        !           168:        */
        !           169:
        !           170:     if ((c = fp2fgetc(ostream)) < 0) {
        !           171:       /* never use read directory. readOneByte() is buffers every thing. */
        !           172:       fprintf(MyErrorOut,"End of file.\n");
        !           173:       return(-1);
        !           174:     }
        !           175:     data[0] = data[1];
        !           176:     data[1] = data[2];
        !           177:     data[2] = data[3];
        !           178:     data[3] = (char)c;
        !           179:     mtag = ntohl(*((int *)(data)));
        !           180:     if (mtag == OX_SYNC_BALL) {
        !           181:       printf("Found the OX_SYNC_BALL. \n");
        !           182:       fflush(NULL);
        !           183:       return(mtag);
        !           184:     }
        !           185:     fprintf(stderr,"Looking for the next message tag.. %2x, mtag=%d\n",c,mtag);
        !           186:           /* or stdout */
        !           187:     fflush(NULL);
        !           188:   }
        !           189: }
        !           190:
        !           191:
        !           192: void oxfdSendCmoNull(int fd)
        !           193: {
        !           194:   char data[4];
        !           195:   *((int *)&data[0]) = htonl(CMO_NULL);
        !           196:   write(fd,data,4);
        !           197:   fflush((FILE *)NULL);
        !           198: }
        !           199: void oxSendCmoNull(ox_stream os)
        !           200: {
        !           201:   char data[4];
        !           202:   *((int *)&data[0]) = htonl(CMO_NULL);
        !           203:   fp2write(os,data,4);
        !           204:   fp2fflush(os);
        !           205: }
        !           206:
        !           207: void oxSendCmoError(ox_stream os)
        !           208: {
        !           209:   char data[4];
        !           210:   *((int *)&data[0]) = htonl(CMO_ERROR);
        !           211:   fp2write(os,data,4);
        !           212:   fp2fflush(os);
        !           213: }
        !           214:
        !           215: void oxSendCmoError2(ox_stream os,char *s)
        !           216: {
        !           217:   char data[4];
        !           218:   *((int *)&data[0]) = htonl(CMO_ERROR2);
        !           219:   fp2write(os,data,4);
        !           220:   fp2fflush(os);
        !           221:   oxSendCmoString(os,s);
        !           222: }
        !           223:
        !           224: void oxfdSendInt32(int fd,int k)
        !           225: {
        !           226:   char data[4];
        !           227:   *((int *)&data[0]) = htonl(k);
        !           228:   write(fd,data,4);
        !           229:   fflush((FILE *)NULL);
        !           230: }
        !           231: void oxSendInt32(ox_stream os,int k)
        !           232: {
        !           233:   char data[4];
        !           234:   *((int *)&data[0]) = htonl(k);
        !           235:   fp2write(os,data,4);
        !           236:   fp2fflush(os);
        !           237: }
        !           238:
        !           239: void oxfdSendCmoInt32(int fd,int k)
        !           240: {
        !           241:   char data[4*2];
        !           242:   *((int *)&data[0]) = htonl(CMO_INT32);
        !           243:   *((int *)&data[4]) = htonl(k);
        !           244:   write(fd,data,4*2);
        !           245:   fflush((FILE *)NULL);
        !           246: }
        !           247: void oxSendCmoInt32(ox_stream os,int k)
        !           248: {
        !           249:   char data[4*2];
        !           250:   *((int *)&data[0]) = htonl(CMO_INT32);
        !           251:   *((int *)&data[4]) = htonl(k);
        !           252:   fp2write(os,data,4*2);
        !           253:   fp2fflush(os);
        !           254: }
        !           255: void oxfdSendCmoString(int fd,char *s)
        !           256: {
        !           257:   char data[4*2];
        !           258:   int n;
        !           259:   if (s == NULL) n = 0;
        !           260:   else {
        !           261:     n = strlen(s);
        !           262:   }
        !           263:   *((int *)&data[0]) = htonl(CMO_STRING);
        !           264:   *((int *)&data[4]) = htonl(n);
        !           265:   write(fd,data,4*2);
        !           266:   if (s != NULL) {
        !           267:     write(fd,s,n);
        !           268:   }
        !           269:   fflush((FILE *)NULL);
        !           270: }
        !           271:
        !           272: void oxSendCmoString(ox_stream os,char *s)
        !           273: {
        !           274:   char data[4*2];
        !           275:   int n;
        !           276:   if (s == NULL) n = 0;
        !           277:   else {
        !           278:     n = strlen(s);
        !           279:   }
        !           280:   *((int *)&data[0]) = htonl(CMO_STRING);
        !           281:   *((int *)&data[4]) = htonl(n);
        !           282:   fp2write(os,data,4*2);
        !           283:   if (s != NULL) {
        !           284:     fp2write(os,s,n);
        !           285:   }
        !           286:   fp2fflush(os);
        !           287: }
        !           288:
        !           289: void oxReqPushString(ox_stream os, char *s)
        !           290: {
        !           291:   oxSendInt32(os,OX_DATA);
        !           292:   oxSendCmoString(os,s);
        !           293: }
        !           294:
        !           295: void oxSendResultOfControlInt32(int fd,int i)
        !           296: {
        !           297:   char data[4*3];
        !           298:   *((int *)&data[0]) = htonl(OX_DATA);
        !           299:   *((int *)&data[4]) = htonl(CMO_INT32);
        !           300:   *((int *)&data[8]) = htonl(i);
        !           301:   write(fd,data,4*3);
        !           302:   fflush((FILE *)NULL);
        !           303: }
        !           304:
        !           305: void oxSendResultOfControl(int fd)
        !           306: {
        !           307:   char data[4*2];
        !           308:   *((int *)&data[0]) = htonl(OX_DATA);
        !           309:   *((int *)&data[4]) = htonl(CMO_NULL);
        !           310:   write(fd,data,4*2);
        !           311:   fflush((FILE *)NULL);
        !           312: }
        !           313:
        !           314: void oxReqMathCap(ox_stream os) {
        !           315:   oxSendInt32(os,OX_COMMAND);
        !           316:   oxSendInt32(os,SM_mathcap);
        !           317:   fp2fflush(os);
        !           318: }
        !           319: void oxReqPops(ox_stream os,int n) {
        !           320:   oxSendInt32(os,OX_DATA);
        !           321:   oxSendCmoInt32(os,n);
        !           322:   oxSendInt32(os,OX_COMMAND);
        !           323:   oxSendInt32(os,SM_pops);
        !           324:   fp2fflush(os);
        !           325: }
        !           326: void oxReqSetName(ox_stream os,char *s) {
        !           327:   oxSendInt32(os,OX_DATA);
        !           328:   oxSendCmoString(os,s);
        !           329:   oxSendInt32(os,OX_COMMAND);
        !           330:   oxSendInt32(os,SM_setName);
        !           331:   fp2fflush(os);
        !           332: }
        !           333: void oxReqEvalName(ox_stream os,char *s) {
        !           334:   oxSendInt32(os,OX_DATA);
        !           335:   oxSendCmoString(os,s);
        !           336:   oxSendInt32(os,OX_COMMAND);
        !           337:   oxSendInt32(os,SM_evalName);
        !           338:   fp2fflush(os);
        !           339: }
        !           340:
        !           341: void oxReqExecuteStringByLocalParser(ox_stream os,char *s)
        !           342: {
        !           343:   oxSendInt32(os,OX_DATA);
        !           344:   oxSendCmoString(os,s);
        !           345:   oxSendInt32(os,OX_COMMAND);
        !           346:   oxSendInt32(os,SM_executeStringByLocalParser);
        !           347:   fp2fflush(os);
        !           348: }
        !           349:
        !           350: void oxReqExecuteFunction(ox_stream os,char *s)
        !           351: {
        !           352:   oxSendInt32(os,OX_DATA);
        !           353:   oxSendCmoString(os,s);
        !           354:   oxSendInt32(os,OX_COMMAND);
        !           355:   oxSendInt32(os,SM_executeFunction);
        !           356:   fp2fflush(os);
        !           357: }
        !           358:
        !           359:
        !           360: void oxReqPopString(ox_stream os)
        !           361: {
        !           362:   oxSendInt32(os,OX_COMMAND);
        !           363:   oxSendInt32(os,SM_popString);
        !           364:   fp2fflush(os);
        !           365: }
        !           366:
        !           367:
        !           368: void oxReqControlResetConnection(int fd) {
        !           369:   oxfdSendInt32(fd,OX_COMMAND);
        !           370:   oxfdSendInt32(fd,SM_control_reset_connection);
        !           371:   fflush(NULL);
        !           372: }
        !           373:
        !           374: void oxReqControlKill(int fd) {
        !           375:   oxfdSendInt32(fd,OX_COMMAND);
        !           376:   oxfdSendInt32(fd,SM_control_kill);
        !           377:   fflush(NULL);
        !           378: }
        !           379:
        !           380: void oxReqPopCMO(ox_stream os) {
        !           381:   oxSendInt32(os,OX_COMMAND);
        !           382:   oxSendInt32(os,SM_popCMO);
        !           383:   fp2fflush(os);
        !           384: }
        !           385:
        !           386:
        !           387: int oxGetResultOfControlInt32(int fd) {
        !           388:   int k;
        !           389:   k = oxfdGetInt32(fd);
        !           390:   if (k != OX_DATA) {
        !           391:     fprintf(MyErrorOut,"oxGetResultOfControlInt32: wrong header.");
        !           392:     return(-1);
        !           393:   }
        !           394:   k = oxfdGetInt32(fd); /* CMO_INT32 */
        !           395:   k = oxfdGetInt32(fd);
        !           396:   return(k);
        !           397: }
        !           398:
        !           399: int oxclientMultiSelect(oxclientp clients[],int dataready[],
        !           400:                        int controlready[], int size, int t)
        !           401: {
        !           402:   int i, ddd;
        !           403:   int fd;
        !           404:   int humanfd = 0;
        !           405:   fd_set readfds;
        !           406:   struct timeval timeout;
        !           407:   extern int errno;
        !           408:
        !           409:   /** printf("(1)"); fflush(NULL); */
        !           410:   FD_ZERO(&readfds);
        !           411:   timeout.tv_sec = 0;
        !           412:   timeout.tv_usec = (long) t;
        !           413:
        !           414:   ddd = 0;  fd = 0;
        !           415:   for (i=0; i<size; i++) {
        !           416:     dataready[i] = controlready[i] = 0;
        !           417:   }
        !           418:   for (i=0; i<size; i++) {
        !           419:     if (clients[i]->humanio) {
        !           420:       fd = (fd<humanfd?humanfd:fd);
        !           421:       FD_SET(humanfd,&readfds);
        !           422:       if (oxSocketSelect0(humanfd,0)) {
        !           423:        ddd = dataready[i] = 1; controlready[i] = 0;
        !           424:       }else{
        !           425:        dataready[i] = 0; controlready[i] = 0;
        !           426:       }
        !           427:     }else{
        !           428:       fd = (fd<clients[i]->controlfd?clients[i]->controlfd:fd);
        !           429:       FD_SET(clients[i]->controlfd,&readfds);
        !           430:       if (oxSocketSelect0(clients[i]->controlfd,0)) {
        !           431:        ddd = controlready[i] = 1;
        !           432:       }else{
        !           433:        controlready[i] = 0;
        !           434:       }
        !           435:       if (clients[i]->datafp2 != NULL) {
        !           436:        fd = (fd<clients[i]->datafp2->fd?clients[i]->datafp2->fd:fd);
        !           437:        FD_SET(clients[i]->datafp2->fd,&readfds);
        !           438:        if (fp2select(clients[i]->datafp2,0)) {
        !           439:          ddd = dataready[i] = 1;
        !           440:        }else{
        !           441:          dataready[i] = 0;
        !           442:        }
        !           443:       }else{
        !           444:        dataready[i] = 0;
        !           445:       }
        !           446:     }
        !           447:   }
        !           448:   if (t > 0 ) {
        !           449:     if (ddd) return(1);
        !           450:     if (select(fd+1,&readfds,(fd_set *)NULL,(fd_set *)NULL,&timeout)<0) {
        !           451:       fprintf(MyErrorOut,"error");
        !           452:       return(-1);
        !           453:     }
        !           454:     return(oxclientMultiSelect(clients, dataready, controlready,size,0));
        !           455:   }else if (t == 0) {
        !           456:     return(ddd);
        !           457:   }else {
        !           458:     /** printf("(2)"); fflush(NULL); */
        !           459:     if (select(fd+1,&readfds,(fd_set *)NULL,(fd_set *)NULL,(struct timeval *)NULL)<0) {
        !           460:       fprintf(MyErrorOut,"error");
        !           461:       return(-1);
        !           462:     }
        !           463:     /** printf("(3)"); fflush(NULL); */
        !           464:     return(oxclientMultiSelect(clients, dataready, controlready,size,0));
        !           465:   }
        !           466: }
        !           467:
        !           468: int oxGetControl(oxclientp client)
        !           469: /* synchronized. */
        !           470: {
        !           471:   int ans;
        !           472:   ox_stream os;
        !           473:   switch (client->cstate) {
        !           474:   case 1:
        !           475:     ans = oxGetResultOfControlInt32(client->controlfd);
        !           476:     client->cstate = 0;
        !           477:     return(ans);
        !           478:   default:
        !           479:     fprintf(MyErrorOut,"oxGet: unknown cstate.\n");
        !           480:     client->cstate = -1;
        !           481:     return(-1);
        !           482:   }
        !           483:
        !           484:   return(-1);
        !           485: }
        !           486:
        !           487: int oxInitClient(oxclientp client)
        !           488: {
        !           489:   client->datafp2 = NULL;
        !           490:   client->dataport = 0;
        !           491:   client->controlport = 0;
        !           492:   client->controlfd = 0;
        !           493:   client->humanio = 0;
        !           494:   client->dstate = 0;
        !           495:   client->cstate = 0;
        !           496:   client->id = -1;
        !           497:   return(0);
        !           498: }
        !           499:
        !           500: int oxIsThereErrorClient(oxclientp client) {
        !           501:   if (client == NULL) return(1);
        !           502:   if (client->dstate == -1) return(1);
        !           503:   if (client->cstate == -1) return(1);
        !           504:   return(0);
        !           505: }
        !           506:
        !           507: oxclientp oxCreateClient(char *sname,int portStream,int portControl)
        !           508: {
        !           509:   static int clnum = 0;
        !           510:   int v = 0;
        !           511:   int fdControl = -1;
        !           512:   int fdStream = -1;
        !           513:   oxclientp client;
        !           514:   v = 1;
        !           515:   if (portControl != -1) {
        !           516:     fdControl = socketConnect(sname,portControl);
        !           517:     if (v) fprintf(stderr,"\nControl port %d : Connected.\n",portControl);
        !           518:   }
        !           519:   if (portStream != -1) {
        !           520:     sleep(1); /* wait */
        !           521:     fdStream = socketConnect(sname,portStream);
        !           522:     if (v) fprintf(stderr,"\nStream port %d : Connected.\n",portStream);
        !           523:   }
        !           524:
        !           525:   if (fdStream == -1 || fdControl == -1) {
        !           526:     fprintf(stderr,"\nOpen error in oxCreateClient.\n");
        !           527:     return(NULL);
        !           528:   }
        !           529:   client = (oxclientp) mymalloc(sizeof(oxclient));
        !           530:   oxInitClient(client);
        !           531:   client->datafp2 = fp2open(fdStream);
        !           532:   if (client->datafp2 == NULL) {
        !           533:     fprintf(stderr,"oxCreateClient(): fp2open(fd) failed.\n");
        !           534:     return(NULL);
        !           535:   }
        !           536:   client->dataport = portStream;
        !           537:   client->controlport = portControl;
        !           538:   client->controlfd = fdControl;
        !           539:   client->id = clnum; clnum++;
        !           540:   client->type = CLIENT_SOCKET; /* socket */
        !           541:   return(client);
        !           542: }
        !           543:
        !           544: oxclientp oxCreateClientFile(char *fname,char *mode,char *controlName,char *cmode)
        !           545: {
        !           546:   static int clnum = 0x8000;
        !           547:   int v = 0;
        !           548:   int fdControl = -1;
        !           549:   int fdStream = -1;
        !           550:   oxclientp client;
        !           551:   v = 1;
        !           552:   if (strcmp(mode,"w") == 0) {
        !           553:     fdStream = creat(fname,S_IWRITE|S_IREAD|S_IRGRP|S_IROTH);
        !           554:     if (fdStream < 0) {
        !           555:       fprintf(stderr,"\nCreat failed for %s\n",fname); return(NULL);
        !           556:     }
        !           557:   }else if (strcmp(mode,"r")==0) {
        !           558:     fdStream = open(fname,O_RDONLY);
        !           559:     if (fdStream < 0) {
        !           560:       fprintf(stderr,"\nOpen failed for %s\n",fname); return(NULL);
        !           561:     }
        !           562:   }else {
        !           563:     fprintf(stderr,"\nThe mode %s is not supported.\n",mode); return(NULL);
        !           564:   }
        !           565:
        !           566:   if (strcmp(cmode,"w") == 0) {
        !           567:     fdControl = creat(controlName,S_IWRITE|S_IREAD|S_IRGRP|S_IROTH);
        !           568:     if (fdControl < 0) {
        !           569:       fprintf(stderr,"\nCreat failed for %s\n",controlName); return(NULL);
        !           570:     }
        !           571:   }else if (strcmp(cmode,"r")==0) {
        !           572:     fdControl = open(controlName,O_RDONLY);
        !           573:     if (fdControl < 0) {
        !           574:       fprintf(stderr,"\nOpen failed for %s\n",controlName); return(NULL);
        !           575:     }
        !           576:   }else if (strcmp(cmode,"rw")==0) {
        !           577:     fdControl = open(controlName,O_RDWR);
        !           578:     if (fdControl < 0) {
        !           579:       fprintf(stderr,"\nOpen failed for %s\n",controlName); return(NULL);
        !           580:     }
        !           581:   }else {
        !           582:     fprintf(stderr,"\nThe mode %s is not supported.\n",cmode); return(NULL);
        !           583:   }
        !           584:
        !           585:
        !           586:   client = (oxclientp) mymalloc(sizeof(oxclient));
        !           587:   oxInitClient(client);
        !           588:   client->datafp2 = fp2open(fdStream);
        !           589:   if (client->datafp2 == NULL) {
        !           590:     fprintf(stderr,"oxCreateClientFile(): fp2open(fd) failed.\n");
        !           591:     return(NULL);
        !           592:   }
        !           593:   client->dataport = 0;
        !           594:   client->controlport = 0;
        !           595:   client->controlfd = fdControl;
        !           596:   client->id = clnum; clnum++;
        !           597:   client->type = CLIENT_FILE;
        !           598:   return(client);
        !           599: }
        !           600:
        !           601: void oxSendOXheader_generic(int type,int fd,ox_stream ox,
        !           602:                            int k,int serial)
        !           603: {
        !           604:   static int ss = 0;
        !           605:   extern int UseOXPacketSerial;
        !           606:   if (serial >= 0) ss = serial;
        !           607:   else ss++;
        !           608:   if (ss < 0) ss=0;
        !           609:   if (type == 0) { /* fd */
        !           610:     oxfdSendInt32(fd,k);
        !           611:     if (UseOXPacketSerial) oxfdSendInt32(fd,ss);
        !           612:   }else {
        !           613:     oxSendInt32(ox,k);
        !           614:     if (UseOXPacketSerial) oxSendInt32(ox,ss);
        !           615:   }
        !           616: }
        !           617: void oxSendOXheader(ox_stream ostream,int k,int serial) {
        !           618:   oxSendOXheader_generic(1,-1,ostream,k,serial);
        !           619: }
        !           620: void oxfdSendOXheader(int fd,int k,int serial) {
        !           621:   oxSendOXheader_generic(0,fd,(ox_stream) NULL,k,serial);
        !           622: }
        !           623:
        !           624:
        !           625:
        !           626:
        !           627:
        !           628:
        !           629:
        !           630:
        !           631:
        !           632:
        !           633:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>