mirror of
https://repo.or.cz/socat.git
synced 2024-12-22 15:32:35 +00:00
93 lines
2.4 KiB
C
93 lines
2.4 KiB
C
/* source: xioparam.c */
|
|
/* Copyright Gerhard Rieger and contributors (see file CHANGES) */
|
|
/* Published under the GNU General Public License V.2, see file COPYING */
|
|
|
|
/* this file contains the source for xio options handling */
|
|
|
|
#include "xiosysincludes.h"
|
|
#include "xioopen.h"
|
|
|
|
/*#include "xioparam.h" are all in xio.h */
|
|
|
|
/* options that can be applied to this module */
|
|
xioparms_t xioparms = {
|
|
false, /* strictopts */
|
|
"!!", /* pipesep */
|
|
":", /* paramsep */
|
|
",", /* optionsep */
|
|
':', /* ip4portsep */
|
|
':', /* ip6portsep */
|
|
'\0', /* logopt */
|
|
NULL, /* syslogfac */
|
|
WITH_DEFAULT_IPV, /* default_ip */
|
|
WITH_DEFAULT_IPV, /* preferred_ip */
|
|
false, /* experimental */
|
|
NULL, /* sniffleft_name */
|
|
NULL /* sniffright_name */
|
|
} ;
|
|
|
|
|
|
/* allow application to set xioopen options */
|
|
int xiosetopt(char what, const char *arg) {
|
|
switch (what) {
|
|
case 's': xioparms.strictopts = true; break;
|
|
case 'p': if ((xioparms.pipesep = strdup(arg)) == NULL) {
|
|
Error1("strdup("F_Zu"): out of memory", strlen(arg)+1);
|
|
return -1;
|
|
}
|
|
break;
|
|
case 'o': xioparms.ip4portsep = arg[0];
|
|
if (arg[1] != '\0') {
|
|
Error2("xiosetopt('%c', \"%s\"): port separator must be single character",
|
|
what, arg);
|
|
return -1;
|
|
}
|
|
break;
|
|
case 'l': xioparms.logopt = *arg; break;
|
|
case 'y': xioparms.syslogfac = arg; break;
|
|
case 'r': xioparms.sniffleft_name = arg; break;
|
|
case 'R': xioparms.sniffright_name = arg; break;
|
|
default:
|
|
Error2("xiosetopt('%c', \"%s\"): unknown option",
|
|
what, arg?arg:"NULL");
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
int xioinqopt(char what, char *arg, size_t n) {
|
|
switch (what) {
|
|
case 's': return xioparms.strictopts;
|
|
case 'p':
|
|
arg[0] = '\0'; strncat(arg, xioparms.pipesep, n-1);
|
|
return 0;
|
|
case 'o': return xioparms.ip4portsep;
|
|
case 'l': return xioparms.logopt;
|
|
case 'r':
|
|
if (xioparms.sniffleft_name == NULL) {
|
|
return 1;
|
|
}
|
|
if (n < strlen(xioparms.sniffleft_name)+1) {
|
|
return -1;
|
|
}
|
|
arg[0] = '\0';
|
|
strncat(arg, xioparms.sniffleft_name, n-1);
|
|
return 0;
|
|
case 'R':
|
|
if (xioparms.sniffright_name == NULL) {
|
|
return 1;
|
|
}
|
|
if (n < strlen(xioparms.sniffright_name)+1) {
|
|
return -1;
|
|
}
|
|
arg[0] = '\0';
|
|
strncat(arg, xioparms.sniffright_name, n-1);
|
|
return 0;
|
|
default:
|
|
Error3("xioinqopt('%c', \"%s\", "F_Zu"): unknown option",
|
|
what, arg, n);
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|