AppServer begins to read call

This commit is contained in:
Pierre Pronchery 2005-09-22 23:57:22 +00:00
parent b45e0841b6
commit b68d1167da
3 changed files with 52 additions and 36 deletions

View File

@ -250,7 +250,7 @@ static int _send_buffer(char * data, int datalen, char * buf, int buflen,
return 0;
}
static int _send_string(char * string, char * buf, int buflen, int * pos)
static int _send_string(char * string, char buf[], int buflen, int * pos)
{
int i = 0;
@ -266,3 +266,34 @@ static int _send_string(char * string, char * buf, int buflen, int * pos)
}
return 1;
}
/* appinterface_receive */
static char * _read_string(char buf[], int buflen, int * pos);
int appinterface_receive(AppInterface * appinterface, char buf[], int buflen)
{
int pos = 0;
char * func;
int i;
#ifdef DEBUG
fprintf(stderr, "%s", "appinterface_receive();\n");
#endif
if((func = _read_string(buf, buflen, &pos)) == NULL)
return -1;
for(i = 0; i < appinterface->calls_cnt; i++)
if(string_compare(appinterface->calls[i].name, func) == 0)
break;
if(i == appinterface->calls_cnt)
return -1;
return pos;
}
static char * _read_string(char buf[], int buflen, int * pos)
{
for(; *pos < buflen && buf[*pos] != '\0'; (*pos)++);
if(*pos == buflen)
return NULL;
(*pos)++;
return buf;
}

View File

@ -19,5 +19,6 @@ void appinterface_delete(AppInterface * appinterface);
/* useful */
int appinterface_call(AppInterface * appinterface, char * call, char buf[],
int buflen, void ** args);
int appinterface_receive(AppInterface * appinterface, char buf[], int buflen);
#endif /* !APP_INTERFACE_H */

View File

@ -146,6 +146,7 @@ static int _appserver_read(int fd, AppServer * appserver)
return _read_process(appserver, asc);
}
static int _read_logged(AppServer * appserver, AppServerClient * asc);
static int _read_process(AppServer * appserver, AppServerClient * asc)
{
switch(asc->state)
@ -153,47 +154,30 @@ static int _read_process(AppServer * appserver, AppServerClient * asc)
case ASCS_NEW:
/* FIXME authenticate */
case ASCS_LOGGED:
/* FIXME check errors */
break;
return _read_logged(appserver, asc);
}
return 0;
return 1;
}
/* static int _appserver_write(int fd, AppServer * appserver)
static int _appserver_receive(AppServer * appserver, AppServerClient * asc);
static int _read_logged(AppServer * appserver, AppServerClient * asc)
{
AppServerClient * asc = NULL;
unsigned int i;
int len;
return _appserver_receive(appserver, asc);
}
for(i = 0; i < array_count(appserver->clients); i++)
{
if(!array_get(appserver->clients, i, &asc))
break;
if(fd == asc->fd)
break;
asc = NULL;
}
if(asc == NULL)
return 1;
len = asc->buf_read_cnt;
if((len = write(fd, asc->buf_write, len)) <= 0)
{
if(asc->buf_read_cnt == ASC_BUFSIZE)
event_unregister_io_read(appserver->event, fd);
event_unregister_io_write(appserver->event, fd);
array_remove_pos(appserver->clients, i);
appserverclient_delete(asc);
return 1;
}
memmove(asc->buf_write, &asc->buf_write[len], len);
asc->buf_write_cnt-=len;
#ifdef DEBUG
fprintf(stderr, "%s%d%s%d%s", "_appserver_write(", fd,
", appserver): ", len, " characters written\n");
#endif
static int _appserver_receive(AppServer * appserver, AppServerClient * asc)
{
int i;
if((i = appinterface_receive(appserver->interface, asc->buf_read,
asc->buf_read_cnt)) == -1)
return -1;
if(i <= 0 || i > asc->buf_read_cnt)
return -1;
memmove(asc->buf_read, &asc->buf_read[i], asc->buf_read_cnt-i);
asc->buf_read_cnt-=i;
return 0;
} */
}
/* public */