| version 1.8, 1999/11/04 18:13:47 | version 1.10, 1999/11/05 12:34:25 | 
|  |  | 
| /* -*- mode: C; coding: euc-japan -*- */ | /* -*- mode: C; coding: euc-japan -*- */ | 
| /* $OpenXM: OpenXM/src/ox_math/ox.c,v 1.7 1999/11/04 06:21:58 ohara Exp $ */ | /* $OpenXM: OpenXM/src/ox_math/ox.c,v 1.9 1999/11/04 19:33:17 ohara Exp $ */ | 
|  |  | 
| /* | /* | 
| 関数の名前付け規約(その2): | 関数の名前付け規約(その2): | 
| 
| Line 613  static char *create_otp() |  | 
| Line 613  static char *create_otp() |  | 
| static int login_with_otp(int fd, char* passwd) | static int login_with_otp(int fd, char* passwd) | 
| { | { | 
| char buff[1024]; | char buff[1024]; | 
| int n = read(fd, buff, 1024); |  | 
| int len = strlen(passwd)+1; | int len = strlen(passwd)+1; | 
| if (n != len) { | int n = read(fd, buff, len); | 
|  | if (strcmp(passwd, buff) != 0) { | 
| fprintf(stderr, "Socket#%d: Login incorrect.\n", fd); | fprintf(stderr, "Socket#%d: Login incorrect.\n", fd); | 
| fprintf(stderr, "password = (%s), length = (%d).\n", passwd, len); | fprintf(stderr, "password = (%s), %d bytes.\n", passwd, len); | 
| fprintf(stderr, "received = (%d), length = (%d).\n", buff, n); | fprintf(stderr, "received = (%s), %d bytes.\n", buff, n); | 
| fflush(stderr); | fflush(stderr); | 
|  | exit(1); | 
| } | } | 
|  | #ifdef DEBUG | 
|  | fprintf(stderr, "Socket#%d: login!.\n", fd); | 
|  | fprintf(stderr, "password = (%s), %d bytes.\n", passwd, len); | 
|  | fprintf(stderr, "received = (%s), %d bytes.\n", buff, n); | 
|  | fflush(stderr); | 
|  | #endif | 
| } | } | 
|  |  | 
| /* | /* | 
| (-reverse 版の ox_start) | (-reverse 版の ox_start) | 
| ox_start は クライアントが呼び出すための関数である. | ox_start は クライアントが呼び出すための関数である. | 
| サーバでは使われない.  prog1 は コントロールサーバであり, | サーバでは使われない.  ctl_prog は コントロールサーバであり, | 
| -ox, -reverse, -data, -control, -pass, -host | -ox, -reverse, -data, -control, -pass, -host | 
| というオプションを理解することを仮定する. prog2 は計算サーバである. | というオプションを理解することを仮定する. dat_prog は計算サーバである. | 
| 接続時には, sv->control を先にオープンする. | 接続時には, sv->control を先にオープンする. | 
| */ | */ | 
|  |  | 
| ox_file_t ox_start(char* host, char* prog1, char* prog2) | ox_file_t ox_start(char* host, char* ctl_prog, char* dat_prog) | 
| { | { | 
| char *pass = create_otp(); | char *pass = create_otp(); | 
| char ctl[16], dat[16]; | char ctl[16], dat[16]; | 
| 
| Line 648  ox_file_t ox_start(char* host, char* prog1, char* prog |  | 
| Line 655  ox_file_t ox_start(char* host, char* prog1, char* prog |  | 
| if (fork() == 0) { | if (fork() == 0) { | 
| dup2(2, 1); | dup2(2, 1); | 
| dup2(open(DEFAULT_LOGFILE, O_RDWR|O_CREAT|O_TRUNC, 0644), 2); | dup2(open(DEFAULT_LOGFILE, O_RDWR|O_CREAT|O_TRUNC, 0644), 2); | 
| execl(prog1, prog1, "-reverse", "-ox", prog2, | execl(ctl_prog, ctl_prog, "-reverse", "-ox", dat_prog, | 
| "-data", dat, "-control", ctl, "-pass", pass, | "-data", dat, "-control", ctl, "-pass", pass, | 
| "-host", host, NULL); | "-host", host, NULL); | 
| } | } | 
| 
| Line 679  ox_file_t ox_start_insecure_nonreverse(char* host, sho |  | 
| Line 686  ox_file_t ox_start_insecure_nonreverse(char* host, sho |  | 
| ox_file_t sv = malloc(sizeof(__ox_file_struct)); | ox_file_t sv = malloc(sizeof(__ox_file_struct)); | 
|  |  | 
| sv->control = mysocketOpen(host, portControl); | sv->control = mysocketOpen(host, portControl); | 
|  | #if 0 | 
|  | /* ox は insecure のとき byte order の決定が正しくできないようだ... */ | 
|  | decideByteOrderClient(sv->control, 0); | 
|  | #endif | 
| /* 10マイクロ秒, 時間稼ぎする. */ | /* 10マイクロ秒, 時間稼ぎする. */ | 
| usleep(10); | usleep(10); | 
| sv->stream  = mysocketOpen(host, portStream); | sv->stream  = mysocketOpen(host, portStream); | 
|  | decideByteOrderClient(sv->stream, 0); | 
| return sv; | return sv; | 
| } | } | 
|  |  |