plugin: dot_draw: readme: make it clear, that it only opens an IPv4-socket, so a...
[olsrd.git] / src / plugin_util.c
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon(olsrd)
4  * Copyright (c) 2007, Bernd Petrovitsch <bernd@firmix.at>
5  * Copyright (c) 2007, Sven-Ola <sven-ola@gmx.de>
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * * Redistributions of source code must retain the above copyright
13  *   notice, this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above copyright
15  *   notice, this list of conditions and the following disclaimer in
16  *   the documentation and/or other materials provided with the
17  *   distribution.
18  * * Neither the name of olsr.org, olsrd nor the names of its
19  *   contributors may be used to endorse or promote products derived
20  *   from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33  * POSSIBILITY OF SUCH DAMAGE.
34  *
35  * Visit http://www.olsr.org for more information.
36  *
37  * If you find this software useful feel free to make a donation
38  * to the project. For more information see the website or contact
39  * the copyright holders.
40  *
41  */
42
43 #include "plugin_util.h"
44 #include "olsr.h"
45 #include "defs.h"
46
47 #include <arpa/inet.h>
48
49 int
50 set_plugin_port(const char *value, void *data, set_plugin_parameter_addon addon __attribute__ ((unused)))
51 {
52   char *endptr;
53   const unsigned int port = strtoul(value, &endptr, 0);
54   if (*endptr != '\0' || endptr == value) {
55     OLSR_PRINTF(0, "Illegal port number \"%s\"", value);
56     return 1;
57   }
58   if (port > 65535) {
59     OLSR_PRINTF(0, "Port number %u out of range", port);
60     return 1;
61   }
62   if (data != NULL) {
63     int *v = data;
64     *v = port;
65     OLSR_PRINTF(1, "%s port number %u\n", "Got", port);
66   } else {
67     OLSR_PRINTF(0, "%s port number %u\n", "Ignored", port);
68   }
69   return 0;
70 }
71
72 int
73 set_plugin_ipaddress(const char *value, void *data, set_plugin_parameter_addon addon __attribute__ ((unused)))
74 {
75   char buf[INET6_ADDRSTRLEN];
76   union olsr_ip_addr ip_addr;
77   if (inet_pton(olsr_cnf->ip_version, value, &ip_addr) <= 0) {
78     OLSR_PRINTF(0, "Illegal IP address \"%s\"", value);
79     return 1;
80   }
81   inet_ntop(olsr_cnf->ip_version, &ip_addr, buf, sizeof(buf));
82   if (data != NULL) {
83     union olsr_ip_addr *v = data;
84     *v = ip_addr;
85     OLSR_PRINTF(1, "%s IP address %s\n", "Got", buf);
86   } else {
87     OLSR_PRINTF(0, "%s IP address %s\n", "Ignored", buf);
88   }
89   return 0;
90 }
91
92 int
93 set_plugin_boolean(const char *value, void *data, set_plugin_parameter_addon addon __attribute__ ((unused)))
94 {
95   int *v = data;
96   if (strcasecmp(value, "yes") == 0 || strcasecmp(value, "true") == 0) {
97     *v = 1;
98   } else if (strcasecmp(value, "no") == 0 || strcasecmp(value, "false") == 0) {
99     *v = 0;
100   } else {
101     return 1;
102   }
103   return 0;
104 }
105
106 int
107 set_plugin_int(const char *value, void *data, set_plugin_parameter_addon addon __attribute__ ((unused)))
108 {
109   char *endptr;
110   const int theint = strtol(value, &endptr, 0);
111   if (*endptr != '\0' || endptr == value) {
112     OLSR_PRINTF(0, "Illegal int \"%s\"", value);
113     return 1;
114   }
115   if (data != NULL) {
116     int *v = data;
117     *v = theint;
118     OLSR_PRINTF(1, "%s int %d\n", "Got", theint);
119   } else {
120     OLSR_PRINTF(0, "%s int %d\n", "Ignored", theint);
121   }
122   return 0;
123 }
124
125 int
126 set_plugin_string(const char *value, void *data, set_plugin_parameter_addon addon)
127 {
128   if (data != NULL) {
129     char *v = data;
130     if ((unsigned)strlen(value) >= addon.ui) {
131       OLSR_PRINTF(0, "String too long \"%s\"", value);
132       return 1;
133     }
134     strscpy(v, value, addon.ui);
135     OLSR_PRINTF(1, "%s string %s\n", "Got", value);
136   } else {
137     OLSR_PRINTF(0, "%s string %s\n", "Ignored", value);
138   }
139   return 0;
140 }
141
142 /*
143  * Local Variables:
144  * mode: c
145  * style: linux
146  * c-basic-offset: 4
147  * indent-tabs-mode: nil
148  * End:
149  */