- Made init function in ascon handle errors
- Minor fixes to scriptcontext.c
This commit is contained in:
24
ascon.c
24
ascon.c
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user