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; |
} |
} |
|
|