*** empty log message ***

This commit is contained in:
cvs
2000-03-15 10:10:22 +00:00
parent 749772c6ae
commit 49669ee311
13 changed files with 2601 additions and 90 deletions

View File

@@ -4,61 +4,63 @@
/*-------------------------------------------------------------------------*/
int CocConnect(CocConn *conn, int allowConnRefused) {
int i;
struct sockaddr_in sadr;
ERR_I(CocCreateSockAdr(&sadr, conn->host, conn->port));
ERR_SI(conn->fd=socket(AF_INET, SOCK_STREAM, 0));
i = 1;
ERR_SI(setsockopt(conn->fd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(int))); /* allow quick port reuse */
i=connect(conn->fd, (struct sockaddr *)&sadr, sizeof(sadr));
if (i<0) {
if (allowConnRefused && errno==ECONNREFUSED) return(1);
ERR_COD(errno);
}
return(0);
OnError: return(-1);
}
int CocOpen(CocConn *conn)
{
int i, cnt, try, port, tryConn, tmo;
struct sockaddr_in sadr;
char *p, *q;
int i, try, tmo;
try=2;
tryConn=1;
tmo=0;
ERR_I(i=CocConnect(conn, conn->startcmd[0]!='\0'));
if (i==0) return(0);
printf("%s\n", conn->startcmd);
ERR_I(system(conn->startcmd));
try=15;
tmo=100; /* wait total ca. 10 sec. for 15 tries */
while (try>0) {
try--;
while (tryConn>0) {
port=CocPORT;
cnt=CocPORTS;
tryConn--;
while (cnt>0) {
ERR_SI(conn->fd=socket(AF_INET, SOCK_STREAM, 0));
ERR_I(CocCreateSockAdr(&sadr, conn->host, port));
i=connect(conn->fd, (struct sockaddr *)&sadr, sizeof(sadr));
if (i>=0) return(0);
if (errno!=ECONNREFUSED) { ERR_COD(errno); }
port++; cnt--;
}
util_delay(tmo); tmo+=100;
}
if (conn->startcmd[0]=='\0' || try<=0) { ERR_COD(ECONNREFUSED); }
p=conn->startcmd;
q=strchr(p,' ');
while (q!=NULL) {
p=q+1;
q=strchr(p,' ');
};
printf("start server %s\n", p);
ERR_I(system(conn->startcmd));
util_delay(100); tmo=200;
tryConn=5;
util_delay(tmo); tmo=tmo*5/4;
ERR_I(i=CocConnect(conn, try>0));
if (i==0) return(0);
}
ERR_COD(ECONNREFUSED);
ERR_MSG("error in CocConnect");
OnError: return(-1);
}
/*-------------------------------------------------------------------------*/
void CocInitClient(CocConn *conn, char *host, char *magic, int bufsize, char *startcmd)
{ void *e;
int CocInitClient(CocConn *conn, char *host, int port, char *magic, int bufsize, char *startcmd) {
assert(conn!=NULL);
if (bufsize==0) bufsize=1024;
conn->cmdbuf=buf_create(bufsize);
conn->resbuf=buf_create(bufsize);
conn->port=port;
str_copy(conn->host, host);
str_copy(conn->magic, magic);
str_copy(conn->startcmd, startcmd);
conn->fd=-1;
conn->varList=NULL;
CocVarList(&conn->varList);
ERR_I(CocOpen(conn));
ERR_I(CocSendMagic(conn, conn->magic));
return(0);
OnError: return(-1);
}
/*-------------------------------------------------------------------------*/
@@ -102,6 +104,7 @@ int CocCmd(CocConn *conn, const char *rwList)
char nam[32];
CocVar *var;
assert(conn!=NULL);
buf_put_start(conn->cmdbuf);
s=rwList;
setmode=0;
@@ -117,7 +120,7 @@ int CocCmd(CocConn *conn, const char *rwList)
assert(i<32);
str_ncpy(nam, s, i+1);
if (setmode) {
if (nam[i-1]==']') { nam[i-1]='\0'; setmode=0; }
if (nam[i-1]==']') { i--; nam[i]='\0'; setmode=0; }
buf_put_str(conn->cmdbuf, nam);
ERR_I(CocPutVar(conn->varList, conn->cmdbuf, nam));
if (!setmode) buf_put_str(conn->cmdbuf, "]");
@@ -159,9 +162,10 @@ int CocCmd(CocConn *conn, const char *rwList)
setmode=1;
}
i=t-s;
if (!setmode) {
if (setmode) {
if (*(t-1)==']') setmode=0;
} else {
str_ncpy(nam, s, i+1);
if (nam[i-1]==']') { nam[i-1]='\0'; setmode=0; }
ERR_I(CocGetVar(conn->varList, conn->resbuf, nam));
}
s=t+1;
@@ -173,6 +177,7 @@ int CocCmd(CocConn *conn, const char *rwList)
}
void CocCloseClient(CocConn *conn) {
assert(conn!=NULL);
close(conn->fd);
buf_free(conn->cmdbuf);
buf_free(conn->resbuf);