aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Willmann <daniel@totalueberwachung.de>2011-06-24 04:16:03 +0200
committerHolger Hans Peter Freyther <zecke@selfish.org>2011-07-19 20:07:20 +0200
commitfa2218cbc90345fc2f4c9505cbfe48e8095a8b20 (patch)
tree2714fe41a434be8336ac41074cc14d8ac7d55bac
parent6d718c054ad2bce52548bcac1def61085a15391c (diff)
osmo-bsc: Add valid field to location command
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_main.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_main.c b/openbsc/src/osmo-bsc/osmo_bsc_main.c
index 1b914688e..4ae37a1a9 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_main.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_main.c
@@ -171,10 +171,11 @@ static void signal_handler(int signal)
}
struct location {
+ unsigned long age;
+ int valid;
double lat;
double lon;
double height;
- unsigned long age;
};
static struct location myloc;
@@ -182,7 +183,7 @@ static struct location myloc;
CTRL_CMD_DEFINE(net_loc, "location");
int get_net_loc(struct ctrl_cmd *cmd, void *data)
{
- cmd->reply = talloc_asprintf(cmd, "%lu,%f,%f,%f", myloc.age, myloc.lat, myloc.lon, myloc.height);
+ cmd->reply = talloc_asprintf(cmd, "%lu,%i,%f,%f,%f", myloc.age, myloc.valid, myloc.lat, myloc.lon, myloc.height);
if (!cmd->reply) {
cmd->reply = "OOM";
return CTRL_CMD_ERROR;
@@ -193,7 +194,7 @@ int get_net_loc(struct ctrl_cmd *cmd, void *data)
int set_net_loc(struct ctrl_cmd *cmd, void *data)
{
- char *saveptr, *lat, *lon, *height, *age, *tmp;
+ char *saveptr, *lat, *lon, *height, *age, *valid, *tmp;
tmp = talloc_strdup(cmd, cmd->value);
if (!tmp)
@@ -201,11 +202,13 @@ int set_net_loc(struct ctrl_cmd *cmd, void *data)
age = strtok_r(tmp, ",", &saveptr);
+ valid = strtok_r(NULL, ",", &saveptr);
lat = strtok_r(NULL, ",", &saveptr);
lon = strtok_r(NULL, ",", &saveptr);
height = strtok_r(NULL, "\0", &saveptr);
myloc.age = atol(age);
+ myloc.valid = atoi(valid);
myloc.lat = atof(lat);
myloc.lon = atof(lon);
myloc.height = atof(height);
@@ -219,8 +222,9 @@ oom:
int verify_net_loc(struct ctrl_cmd *cmd, const char *value, void *data)
{
- char *saveptr, *latstr, *lonstr, *heightstr, *agestr, *tmp;
+ char *saveptr, *latstr, *lonstr, *heightstr, *agestr, *validstr, *tmp;
unsigned long age;
+ int valid;
double lat, lon, height;
tmp = talloc_strdup(cmd, value);
@@ -228,21 +232,24 @@ int verify_net_loc(struct ctrl_cmd *cmd, const char *value, void *data)
return 1;
agestr = strtok_r(tmp, ",", &saveptr);
+ validstr = strtok_r(NULL, ",", &saveptr);
latstr = strtok_r(NULL, ",", &saveptr);
lonstr = strtok_r(NULL, ",", &saveptr);
heightstr = strtok_r(NULL, "\0", &saveptr);
- if ((agestr == NULL) || (latstr == NULL) ||
+ if ((agestr == NULL) || (validstr == NULL) || (latstr == NULL) ||
(lonstr == NULL) || (heightstr == NULL))
return 1;
age = atol(agestr);
+ valid = atoi(validstr);
lat = atof(latstr);
lon = atof(lonstr);
height = atof(heightstr);
talloc_free(tmp);
- if ((age == 0) || (lat < -90) || (lat > 90) || (lon < -180) || (lon > 180))
+ if ((age == 0) || (lat < -90) || (lat > 90) || (lon < -180) ||
+ (lon > 180) || (valid < 0) || (valid > 2))
return 1;
return 0;