[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.13 and 1.18

version 1.13, 2003/01/11 11:42:31 version 1.18, 2003/09/15 09:31:42
Line 1 
Line 1 
 /* -*- mode: C; coding: euc-japan -*- */  /* -*- mode: C; coding: euc-japan -*- */
 /* $OpenXM: OpenXM/src/ox_toolkit/oxf.c,v 1.12 2002/04/10 08:55:45 ohara Exp $ */  /* $OpenXM: OpenXM/src/ox_toolkit/oxf.c,v 1.17 2003/06/02 10:25:57 ohara Exp $ */
   
 /*  /*
    This module includes functions for sending/receiveng CMO's.     This module includes functions for sending/receiveng CMO's.
Line 32  static int send_int32_nbo(OXFILE *oxfp, int int32);
Line 32  static int send_int32_nbo(OXFILE *oxfp, int int32);
 static int receive_int32_lbo(OXFILE *oxfp);  static int receive_int32_lbo(OXFILE *oxfp);
 static int receive_int32_nbo(OXFILE *oxfp);  static int receive_int32_nbo(OXFILE *oxfp);
   
   static void pipe_send_info(int fd, char *hostname, int port, char *password);
   
   /* enable write buffering */
   int oxf_setbuffer(OXFILE *oxfp, char *buf, int size)
   {
       if (buf == NULL && size > 0) {
           buf = MALLOC(size);
       }
       if (oxfp->wbuf != NULL) {
           oxf_flush(oxfp);
       }
       oxfp->wbuf = buf;
       oxfp->wbuf_size  = size;
       oxfp->wbuf_count = 0;
       return 0;
   }
   
 int oxf_read(void *buffer, size_t size, size_t num, OXFILE *oxfp)  int oxf_read(void *buffer, size_t size, size_t num, OXFILE *oxfp)
 {  {
     int n = read(oxfp->fd, buffer, size*num);      int n = read(oxfp->fd, buffer, size*num);
Line 43  int oxf_read(void *buffer, size_t size, size_t num, OX
Line 60  int oxf_read(void *buffer, size_t size, size_t num, OX
   
 int oxf_write(void *buffer, size_t size, size_t num, OXFILE *oxfp)  int oxf_write(void *buffer, size_t size, size_t num, OXFILE *oxfp)
 {  {
     return write(oxfp->fd, buffer, size*num);      size_t sz = size*num;
       if (oxfp->wbuf == NULL) { /* no buffering */
           return write(oxfp->fd, buffer, sz);
       }
       if ((oxfp->wbuf_count + sz) >= oxfp->wbuf_size) {
           oxf_flush(oxfp);
           return write(oxfp->fd, buffer, sz);
       }
       memcpy(oxfp->wbuf + oxfp->wbuf_count, buffer, sz);
       oxfp->wbuf_count += sz;
       return sz;
 }  }
   
 /* sending an object of int32 type with Network Byte Order.  /* sending an object of int32 type with Network Byte Order.
Line 86  static int receive_int32_lbo(OXFILE *oxfp)
Line 113  static int receive_int32_lbo(OXFILE *oxfp)
 */  */
 OXFILE *oxf_open(int fd)  OXFILE *oxf_open(int fd)
 {  {
     OXFILE *oxfp = (OXFILE *)malloc(sizeof(OXFILE));      OXFILE *oxfp = (OXFILE *)MALLOC(sizeof(OXFILE));
     oxfp = (OXFILE *)malloc(sizeof(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;
Line 95  OXFILE *oxf_open(int fd)
Line 122  OXFILE *oxf_open(int fd)
     oxfp->control = NULL;      oxfp->control = NULL;
     oxfp->error = 0;      oxfp->error = 0;
     oxfp->mathcap = NULL;      oxfp->mathcap = NULL;
       oxfp->wbuf = NULL;
       oxfp->wbuf_size = 0;
       oxfp->wbuf_count = 0;
     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 142  void oxf_determine_byteorder_server(OXFILE *oxfp)
Line 172  void oxf_determine_byteorder_server(OXFILE *oxfp)
   
 void oxf_flush(OXFILE *oxfp)  void oxf_flush(OXFILE *oxfp)
 {  {
     /* fflush(oxfp->fp); */      if (oxfp->wbuf != NULL) {
           write(oxfp->fd, oxfp->wbuf, oxfp->wbuf_count);
           oxfp->wbuf_count = 0;
       }
 }  }
   
 void oxf_close(OXFILE *oxfp)  void oxf_close(OXFILE *oxfp)
 {  {
       oxf_flush(oxfp);
     close(oxfp->fd);      close(oxfp->fd);
     /* fclose(oxfp->fp); */  
 }  }
   
 #define OXF_SETOPT_NBO  0  #define OXF_SETOPT_NBO  0
Line 165  void oxf_setopt(OXFILE *oxfp, int mode)
Line 198  void oxf_setopt(OXFILE *oxfp, int mode)
     }      }
 }  }
   
 int oxf_listen(short *portp)  int oxf_listen(int *portp)
 {  {
     char localhost[MAXHOSTNAMELEN];      char localhost[MAXHOSTNAMELEN];
     if (gethostname(localhost, MAXHOSTNAMELEN)==0) {      if (gethostname(localhost, MAXHOSTNAMELEN)==0) {
Line 208  char *generate_otp()
Line 241  char *generate_otp()
 int oxf_confirm_client(OXFILE *oxfp, char *passwd)  int oxf_confirm_client(OXFILE *oxfp, char *passwd)
 {  {
     int len = strlen(passwd)+1;      int len = strlen(passwd)+1;
     char *buf = alloca(len);      char *buf = ALLOCA(len);
   
     oxf_read(buf, 1, len, oxfp);      oxf_read(buf, 1, len, oxfp);
     return !strcmp(passwd, buf);      return !strcmp(passwd, buf);
Line 244  char *which(char *exe, const char *env)
Line 277  char *which(char *exe, const char *env)
     char *tok;      char *tok;
     char *path;      char *path;
     char delim[] = ":";      char delim[] = ":";
     char *e = alloca(strlen(env)+1);      char *e = ALLOCA(strlen(env)+1);
     strcpy(e, env);      strcpy(e, env);
     tok = strtok(e, delim);      tok = strtok(e, delim);
     while (tok != NULL) {      while (tok != NULL) {
         path = malloc(strlen(tok)+strlen(exe)+2);          path = MALLOC(strlen(tok)+strlen(exe)+2);
         sprintf(path, "%s/%s", tok, exe);          sprintf(path, "%s/%s", tok, exe);
         if (access(path, X_OK&R_OK) == 0) {          if (access(path, X_OK&R_OK) == 0) {
             return path;              return path;
         }          }
         free(path);          FREE(path);
         tok = strtok(NULL, delim);          tok = strtok(NULL, delim);
     }      }
     return NULL;      return NULL;
 }  }
   
 /* Remarks: ssh determines remote host by his name, i.e. by arg[0]. */  /* Remarks: ssh determines remote host by his name, i.e. by arg[0]. */
 int oxc_start(char *remote_host, short port, char *passwd)  int oxc_start(char *remote_host, int port, char *passwd)
 {  {
     char localhost[MAXHOSTNAMELEN];      char localhost[MAXHOSTNAMELEN];
     char ports[128];      char ports[128];
Line 270  int oxc_start(char *remote_host, short port, char *pas
Line 303  int oxc_start(char *remote_host, short port, char *pas
     if (gethostname(localhost, MAXHOSTNAMELEN)==0) {      if (gethostname(localhost, MAXHOSTNAMELEN)==0) {
         if ((pid = fork()) == 0) {          if ((pid = fork()) == 0) {
             sprintf(ports, "%d", port);              sprintf(ports, "%d", port);
 #ifdef DEBUG              ox_printf("oxf.c:: oxc_start() does %s(ssh) -f %s -h %s -p %s -c %s\n", remote_host, cmd, localhost, ports, passwd);
             fprintf(ox_stderr, "oxf.c:: oxc_start() does %s(ssh) -f %s -h %s -p %s -c %s\n", remote_host, cmd, localhost, ports, passwd);  
 #endif  
             execlp("ssh", remote_host, "-f", cmd,              execlp("ssh", remote_host, "-f", cmd,
                   "-h", localhost, "-p", ports,"-c", passwd, NULL);                    "-h", localhost, "-p", ports,"-c", passwd, NULL);
         }          }
Line 284  int oxc_start(char *remote_host, short port, char *pas
Line 315  int oxc_start(char *remote_host, short port, char *pas
 int oxc_start_with_pipe(char *remote_host, int port, char *passwd)  int oxc_start_with_pipe(char *remote_host, int port, char *passwd)
 {  {
     char localhost[MAXHOSTNAMELEN];      char localhost[MAXHOSTNAMELEN];
     char ports[128];  
     int  pid = 0;      int  pid = 0;
     char *cmd = "oxc";      char *cmd = "oxc";
         int  pipefd[2];          int  pipefd[2];
Line 320  static char *pipe_read_string()
Line 350  static char *pipe_read_string()
         char *s;          char *s;
         read(0, &len, sizeof(int));          read(0, &len, sizeof(int));
         len = ntohl(len)+1;          len = ntohl(len)+1;
         s = malloc(len);          s = MALLOC(len);
         read(0, s, len);          read(0, s, len);
         return s;          return s;
 }  }
Line 334  void pipe_send_info(int fd, char *hostname, int port, 
Line 364  void pipe_send_info(int fd, char *hostname, int port, 
         pipe_send_string(fd, password);          pipe_send_string(fd, password);
 }  }
   
 void pipe_read_info(char **hostname, int *port, char **password)  int pipe_read_info(char **hostname, int *port, char **password)
 {  {
         if (read(0, port, sizeof(int)) > 0) {          if (read(0, port, sizeof(int)) > 0) {
                 *port = ntohl(*port);                  *port = ntohl(*port);
Line 348  void pipe_read_info(char **hostname, int *port, char *
Line 378  void pipe_read_info(char **hostname, int *port, char *
 /*  Example: oxf_execute_cmd(oxfp, "ox_sm1"); */  /*  Example: oxf_execute_cmd(oxfp, "ox_sm1"); */
 OXFILE *oxf_execute_cmd(OXFILE *oxfp, char *cmd)  OXFILE *oxf_execute_cmd(OXFILE *oxfp, char *cmd)
 {  {
     short port = 0;      int port = 0;
     int listened;      int listened;
   
     if ((listened = oxf_listen(&port)) != -1) {      if ((listened = oxf_listen(&port)) != -1) {
                 cmo_list *args =  list_appendl(NULL, list_append(new_cmo_list(), new_cmo_int32(port)), new_cmo_string(cmd), NULL);                  cmo_list *args =  list_appendl(NULL, list_append(new_cmo_list(), (cmo *)new_cmo_int32(port)), new_cmo_string(cmd), NULL);
                 send_ox_cmo(oxfp, (cmo *)args);                  send_ox_cmo(oxfp, (cmo *)args);
         send_ox_command(oxfp, SM_control_spawn_server);          send_ox_command(oxfp, SM_control_spawn_server);
         return oxf_connect_passive(listened);          return oxf_connect_passive(listened);

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.18

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