AppServer begins to read call
This commit is contained in:
parent
b45e0841b6
commit
b68d1167da
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue
Block a user