- Made init function in ascon handle errors

- Minor fixes to scriptcontext.c
This commit is contained in:
koennecke
2008-06-11 13:37:13 +00:00
parent e8a2d09aa6
commit 31e4a58870
6 changed files with 50 additions and 645 deletions

24
ascon.c
View File

@@ -59,7 +59,7 @@ double DoubleTime(void) {
return now.tv_sec + now.tv_usec / 1e6;
}
static void AsconError(Ascon *a, char *msg, int errorno) {
void AsconError(Ascon *a, char *msg, int errorno) {
static char *stateText[]={
"state 0", "kill", "state 2", "notConnected",
"connect", "start connect", "connect finished", "connect failed",
@@ -126,11 +126,13 @@ static void AsconConnect(Ascon *a) {
return;
}
void AsconStdInit(Ascon *a, int argc, char *argv[]) {
int AsconStdInit(Ascon *a, SConnection *con,
int argc, char *argv[]) {
a->fd = -1;
a->state = AsconConnectStart;
a->reconnectInterval = 10;
a->hostport = strdup(argv[1]);
a->hostport = strdup(argv[1]);
if(argc < 2){
a->sendTerminator = strdup(argv[2]);
} else {
@@ -141,6 +143,7 @@ void AsconStdInit(Ascon *a, int argc, char *argv[]) {
} else {
a->timeout = 2.0; /* sec */
}
return 1;
}
int AsconReadGarbage(int fd) {
@@ -367,19 +370,23 @@ void AsconInsertProtocol(AsconProtocol *protocol) {
AsconProtocolAdd(&protocols, protocol);
}
AsconHandler AsconSetHandler(Ascon *a, int argc, char *argv[]) {
AsconHandler AsconSetHandler(Ascon *a, SConnection *con,
int argc, char *argv[]) {
AsconProtocol *p;
if (argc < 1) return NULL;
if (strcasecmp(argv[0], "std") == 0) {
if (argc != 2) return NULL;
AsconStdInit(a, argc, argv);
AsconStdInit(a, con, argc, argv);
return AsconStdHandler;
}
for (p = protocols.head; p!= NULL; p=p->next) {
if (strcasecmp(p->name, argv[0]) == 0) {
p->init(a, argc, argv);
return p->handler;
if(p->init(a, con, argc, argv)){
return p->handler;
} else {
return NULL;
}
}
}
return NULL;
@@ -400,7 +407,7 @@ Ascon *AsconMake(SConnection *con, int argc, char *argv[]) {
SCWrite(con, "ERROR: no memory", eError);
return NULL;
}
a->handler = AsconSetHandler(a, argc, argv);
a->handler = AsconSetHandler(a, con, argc, argv);
if (a->handler == NULL) {
args = ConcatArgs(argc, argv);
if (!args) return NULL;
@@ -431,6 +438,9 @@ void AsconKill(Ascon *a) {
if(a->sendTerminator){
free(a->sendTerminator);
}
if(a->private != NULL && a->killPrivate != NULL){
a->killPrivate(a->private);
}
free(a);
}