mgcp: Make the CI uint32_t all the way to avoid mismatch
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h
index 140fa68..6ca2237 100644
--- a/openbsc/include/openbsc/bsc_nat.h
+++ b/openbsc/include/openbsc/bsc_nat.h
@@ -263,7 +263,7 @@
 
 void bsc_mgcp_clear_endpoints_for(struct bsc_connection *bsc);
 int bsc_mgcp_parse_response(const char *str, int *code, char transaction[60]);
-int bsc_mgcp_extract_ci(const char *resp);
+uint32_t bsc_mgcp_extract_ci(const char *resp);
 
 
 int bsc_write(struct bsc_connection *bsc, struct msgb *msg, int id);
diff --git a/openbsc/include/openbsc/mgcp.h b/openbsc/include/openbsc/mgcp.h
index 8f59170..7f77868 100644
--- a/openbsc/include/openbsc/mgcp.h
+++ b/openbsc/include/openbsc/mgcp.h
@@ -124,7 +124,7 @@
 	void *data;
 
 	struct mgcp_endpoint *endpoints;
-	unsigned int last_call_id;
+	uint32_t last_call_id;
 };
 
 /* config management */
diff --git a/openbsc/include/openbsc/mgcp_internal.h b/openbsc/include/openbsc/mgcp_internal.h
index 19e8e3f..d7be0a2 100644
--- a/openbsc/include/openbsc/mgcp_internal.h
+++ b/openbsc/include/openbsc/mgcp_internal.h
@@ -85,7 +85,7 @@
 };
 
 struct mgcp_endpoint {
-	int ci;
+	uint32_t ci;
 	char *callid;
 	char *local_options;
 	int conn_mode;
diff --git a/openbsc/src/mgcp/mgcp_protocol.c b/openbsc/src/mgcp/mgcp_protocol.c
index 7439132..e5f9a14 100644
--- a/openbsc/src/mgcp/mgcp_protocol.c
+++ b/openbsc/src/mgcp/mgcp_protocol.c
@@ -89,7 +89,7 @@
 static struct msgb *handle_modify_con(struct mgcp_config *cfg, struct msgb *msg);
 static struct msgb *handle_rsip(struct mgcp_config *cfg, struct msgb *msg);
 
-static int generate_call_id(struct mgcp_config *cfg)
+static uint32_t generate_call_id(struct mgcp_config *cfg)
 {
 	int i;
 
@@ -170,7 +170,7 @@
 		addr = endp->cfg->source_addr;
 
 	snprintf(sdp_record, sizeof(sdp_record) - 1,
-			"I: %d\n\n"
+			"I: %u\n\n"
 			"v=0\r\n"
 			"c=IN IP4 %s\r\n"
 			"m=audio %d RTP/AVP %d\r\n"
@@ -324,11 +324,13 @@
 }
 
 static int verify_ci(const struct mgcp_endpoint *endp,
-		     const char *ci)
+		     const char *_ci)
 {
-	if (atoi(ci) != endp->ci) {
-		LOGP(DMGCP, LOGL_ERROR, "ConnectionIdentifiers do not match on 0x%x. %d != %s\n",
-			ENDPOINT_NUMBER(endp), endp->ci, ci);
+	uint32_t ci = strtoul(_ci, NULL, 10);
+
+	if (ci != endp->ci) {
+		LOGP(DMGCP, LOGL_ERROR, "ConnectionIdentifiers do not match on 0x%x. %u != %s\n",
+			ENDPOINT_NUMBER(endp), endp->ci, _ci);
 		return -1;
 	}
 
diff --git a/openbsc/src/nat/bsc_mgcp_utils.c b/openbsc/src/nat/bsc_mgcp_utils.c
index 05963d3..0455d1b 100644
--- a/openbsc/src/nat/bsc_mgcp_utils.c
+++ b/openbsc/src/nat/bsc_mgcp_utils.c
@@ -344,16 +344,16 @@
 	return sscanf(str, "%3d %59s\n", code, transaction) != 2;
 }
 
-int bsc_mgcp_extract_ci(const char *str)
+uint32_t bsc_mgcp_extract_ci(const char *str)
 {
-	int ci;
+	unsigned int ci;
 	char *res = strstr(str, "I: ");
 	if (!res) {
 		LOGP(DMGCP, LOGL_ERROR, "No CI in msg '%s'\n", str);
 		return CI_UNUSED;
 	}
 
-	if (sscanf(res, "I: %d", &ci) != 1) {
+	if (sscanf(res, "I: %u", &ci) != 1) {
 		LOGP(DMGCP, LOGL_ERROR, "Failed to parse CI in msg '%s'\n", str);
 		return CI_UNUSED;
 	}