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;
|
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;
|
int i = 0;
|
||||||
|
|
||||||
|
@ -266,3 +266,34 @@ static int _send_string(char * string, char * buf, int buflen, int * pos)
|
||||||
}
|
}
|
||||||
return 1;
|
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 */
|
/* useful */
|
||||||
int appinterface_call(AppInterface * appinterface, char * call, char buf[],
|
int appinterface_call(AppInterface * appinterface, char * call, char buf[],
|
||||||
int buflen, void ** args);
|
int buflen, void ** args);
|
||||||
|
int appinterface_receive(AppInterface * appinterface, char buf[], int buflen);
|
||||||
|
|
||||||
#endif /* !APP_INTERFACE_H */
|
#endif /* !APP_INTERFACE_H */
|
||||||
|
|
|
@ -146,6 +146,7 @@ static int _appserver_read(int fd, AppServer * appserver)
|
||||||
return _read_process(appserver, asc);
|
return _read_process(appserver, asc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _read_logged(AppServer * appserver, AppServerClient * asc);
|
||||||
static int _read_process(AppServer * appserver, AppServerClient * asc)
|
static int _read_process(AppServer * appserver, AppServerClient * asc)
|
||||||
{
|
{
|
||||||
switch(asc->state)
|
switch(asc->state)
|
||||||
|
@ -153,47 +154,30 @@ static int _read_process(AppServer * appserver, AppServerClient * asc)
|
||||||
case ASCS_NEW:
|
case ASCS_NEW:
|
||||||
/* FIXME authenticate */
|
/* FIXME authenticate */
|
||||||
case ASCS_LOGGED:
|
case ASCS_LOGGED:
|
||||||
/* FIXME check errors */
|
return _read_logged(appserver, asc);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _appserver_receive(AppServer * appserver, AppServerClient * asc);
|
||||||
/* static int _appserver_write(int fd, AppServer * appserver)
|
static int _read_logged(AppServer * appserver, AppServerClient * asc)
|
||||||
{
|
{
|
||||||
AppServerClient * asc = NULL;
|
return _appserver_receive(appserver, asc);
|
||||||
unsigned int i;
|
}
|
||||||
int len;
|
|
||||||
|
|
||||||
for(i = 0; i < array_count(appserver->clients); i++)
|
static int _appserver_receive(AppServer * appserver, AppServerClient * asc)
|
||||||
{
|
{
|
||||||
if(!array_get(appserver->clients, i, &asc))
|
int i;
|
||||||
break;
|
|
||||||
if(fd == asc->fd)
|
if((i = appinterface_receive(appserver->interface, asc->buf_read,
|
||||||
break;
|
asc->buf_read_cnt)) == -1)
|
||||||
asc = NULL;
|
return -1;
|
||||||
}
|
if(i <= 0 || i > asc->buf_read_cnt)
|
||||||
if(asc == NULL)
|
return -1;
|
||||||
return 1;
|
memmove(asc->buf_read, &asc->buf_read[i], asc->buf_read_cnt-i);
|
||||||
len = asc->buf_read_cnt;
|
asc->buf_read_cnt-=i;
|
||||||
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
|
|
||||||
return 0;
|
return 0;
|
||||||
} */
|
}
|
||||||
|
|
||||||
|
|
||||||
/* public */
|
/* public */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user