[BACK]Return to oxf.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_toolkit

Diff for /OpenXM/src/ox_toolkit/oxf.c between version 1.1 and 1.5

version 1.1, 2000/10/10 05:23:21 version 1.5, 2000/11/24 05:49:27
Line 1 
Line 1 
 /* -*- mode: C; coding: euc-japan -*- */  /* -*- mode: C; coding: euc-japan -*- */
 /* $OpenXM$ */  /* $OpenXM: OpenXM/src/ox_toolkit/oxf.c,v 1.4 2000/10/12 15:53:25 ohara Exp $ */
   
 /*  /*
    This module includes functions for sending/receiveng CMO's.     This module includes functions for sending/receiveng CMO's.
Line 11 
Line 11 
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
 #include <unistd.h>  #include <unistd.h>
 #include <errno.h>  
 #include <fcntl.h>  #include <fcntl.h>
 #include <sys/file.h>  #include <sys/file.h>
 #include <sys/param.h>  #include <sys/param.h>
Line 20 
Line 19 
 #include "mysocket.h"  #include "mysocket.h"
 #include "ox_toolkit.h"  #include "ox_toolkit.h"
   
   static int send_int32_lbo(OXFILE *oxfp, int int32);
   static int send_int32_nbo(OXFILE *oxfp, int int32);
   static int receive_int32_lbo(OXFILE *oxfp);
   static int receive_int32_nbo(OXFILE *oxfp);
   
   int oxf_read(void *buffer, size_t size, size_t num, OXFILE *oxfp)
   {
       int n = read(oxfp->fd, buffer, size*num);
       if (n <= 0) {
           oxfp->error = 1;
       }
       return n;
   }
   
   int oxf_write(void *buffer, size_t size, size_t num, OXFILE *oxfp)
   {
       return write(oxfp->fd, buffer, size*num);
   }
   
   /* sending an object of int32 type with Network Byte Order.
      (not equal to cmo_int32 type)  */
   static int send_int32_nbo(OXFILE *oxfp, int int32)
   {
       int32 = htonl(int32);
       return oxf_write(&int32, sizeof(int), 1, oxfp);
   }
   
   /* sending an object of int32 type with Local Byte Order.
      (not equal to cmo_int32 type)  */
   static int send_int32_lbo(OXFILE *oxfp, int int32)
   {
       return oxf_write(&int32, sizeof(int), 1, oxfp);
   }
   
   /* receiving an object of int32 type with Network Byte Order.
      (not equal to cmo_int32 type)  */
   static int receive_int32_nbo(OXFILE *oxfp)
   {
       int tag;
       oxf_read(&tag, sizeof(int), 1, oxfp);
       return ntohl(tag);
   }
   
   /* receiving an object of int32 type with Local Byte Order.
      (not equal to cmo_int32 type)  */
   static int receive_int32_lbo(OXFILE *oxfp)
   {
       int tag;
       oxf_read(&tag, sizeof(int), 1, oxfp);
       return tag;
   }
   
   /* socket システムコールなどで socket を開いたのち、
      fdopen(sd, "a+") でバッファリングする(予定)。("w+" ではない)
      バッファリングの後、バイトオーダを決定し、
      oxf_setopt() で関数ポインタを設定し直す。*/
   
 OXFILE *oxf_open(int fd)  OXFILE *oxf_open(int fd)
 {  {
     OXFILE *oxfp = (OXFILE *)malloc(sizeof(OXFILE));      OXFILE *oxfp = (OXFILE *)malloc(sizeof(OXFILE));
     oxfp->fd = fd;      oxfp->fd = fd;
     oxfp->send_int32    = send_int32_nbo;      oxfp->send_int32    = send_int32_nbo;
     oxfp->receive_int32 = receive_int32_nbo;      oxfp->receive_int32 = receive_int32_nbo;
         oxfp->control = NULL;      oxfp->control = NULL;
       oxfp->error = 0;
       oxfp->mathcap = NULL;
     return oxfp;      return oxfp;
     /* oxfp->fp = fdopen(fd, "a+"); */      /* oxfp->fp = fdopen(fd, "a+"); */
     /* return (oxfp->fp != NULL)? oxfp: NULL; */      /* return (oxfp->fp != NULL)? oxfp: NULL; */
Line 34  OXFILE *oxf_open(int fd)
Line 92  OXFILE *oxf_open(int fd)
   
 OXFILE *oxf_control(OXFILE *oxfp)  OXFILE *oxf_control(OXFILE *oxfp)
 {  {
         return oxfp->control;      return oxfp->control;
 }  }
   
 /* The function determines a byte order of integer on the OpenXM  /* The function determines a byte order of integer on the OpenXM
Line 93  void oxf_setopt(OXFILE *oxfp, int mode)
Line 151  void oxf_setopt(OXFILE *oxfp, int mode)
     }      }
 }  }
   
   int oxf_listen(short *portp)
   {
       char localhost[MAXHOSTNAMELEN];
       if (gethostname(localhost, MAXHOSTNAMELEN)==0) {
           return mysocketListen(localhost, portp);
       }
       return -1;
   }
   
 OXFILE *oxf_connect_active(char *hostname, short port)  OXFILE *oxf_connect_active(char *hostname, short port)
 {  {
     int fd = mysocketOpen(hostname, port);      int fd = mysocketOpen(hostname, port);
Line 110  OXFILE *oxf_connect_passive(int listened)
Line 177  OXFILE *oxf_connect_passive(int listened)
 /* a password generator. */  /* a password generator. */
 char *generate_otp()  char *generate_otp()
 {  {
         static char crypto[] = "%.,^_+-=/@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";      static char crypto[] = "%.,^_+-=/@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
     static char otp[LENGTH_OF_ONETIME_PASSWORD+1] = {0};      static char otp[LENGTH_OF_ONETIME_PASSWORD+1] = {0};
     int i;      int i;
   
Line 138  int oxf_confirm_server(OXFILE *oxfp, char *passwd)
Line 205  int oxf_confirm_server(OXFILE *oxfp, char *passwd)
     return oxf_write(passwd, 1, strlen(passwd)+1, oxfp);      return oxf_write(passwd, 1, strlen(passwd)+1, oxfp);
 }  }
   
   void oxf_mathcap_update(OXFILE *oxfp, cmo_mathcap *ob)
   {
       if (oxfp->mathcap == NULL) {
           oxfp->mathcap = new_mathcap();
       }
       mathcap_update(oxfp->mathcap, ob);
   }
   
 /* example: which("xterm", getenv("PATH")); */  /* example: which("xterm", getenv("PATH")); */
 char *which(char *exe, const char *env)  char *which(char *exe, const char *env)
 {  {
Line 165  int oxc_start(char *remote_host, short port, char *pas
Line 240  int oxc_start(char *remote_host, short port, char *pas
     char localhost[MAXHOSTNAMELEN];      char localhost[MAXHOSTNAMELEN];
     char ports[128];      char ports[128];
     int pid = 0;      int pid = 0;
     char *cmd = "echo";      char *cmd = "oxc";
 /*  char *cmd = "oxc"; */  
   
     if (gethostname(localhost, MAXHOSTNAMELEN)==0) {      if (gethostname(localhost, MAXHOSTNAMELEN)==0) {
         if ((pid = fork()) == 0) {          if ((pid = fork()) == 0) {
Line 179  int oxc_start(char *remote_host, short port, char *pas
Line 253  int oxc_start(char *remote_host, short port, char *pas
         }          }
     }      }
     return pid;      return pid;
   }
   
   /*  Example: oxf_execute_cmd(oxfp, "ox_sm1"); */
   OXFILE *oxf_execute_cmd(OXFILE *oxfp, char *cmd)
   {
       short port = 0;
       int listened;
   
       if ((listened = oxf_listen(&port)) != -1) {
           send_ox_cmo(oxfp, (cmo *)new_cmo_int32(port));
           send_ox_cmo(oxfp, (cmo *)new_cmo_string(cmd));
           send_ox_cmo(oxfp, (cmo *)new_cmo_int32(2));  /* number of arguments */
           send_ox_cmo(oxfp, (cmo *)new_cmo_string("oxc_open"));
           send_ox_command(oxfp, SM_executeFunction);
           return oxf_connect_passive(listened);
       }
       return NULL;
 }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.5

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