summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
author杨威 <[email protected]>2023-05-31 10:14:56 +0800
committer杨威 <[email protected]>2023-05-31 10:14:56 +0800
commit1f5bd418edb6be4b614803d0be38942f0ab4cd7b (patch)
tree41b64b670fb91374dbf2d133839db5b0da2a2978 /src/common
parentf1690affc607cf2ead3f9c56215f4c55b91b8078 (diff)
🦄 refactor(字符串处理相关Warning): 消除字符串处理相关Warning
Diffstat (limited to 'src/common')
-rw-r--r--src/common/stream_addr_inet.c123
1 files changed, 119 insertions, 4 deletions
diff --git a/src/common/stream_addr_inet.c b/src/common/stream_addr_inet.c
index 16a6d46..017c7c2 100644
--- a/src/common/stream_addr_inet.c
+++ b/src/common/stream_addr_inet.c
@@ -1298,6 +1298,7 @@ static int __addr_pure_udp_n2p_fun(const struct layer_addr *paddr, char *buf, in
return strlen(buf) + 1;
}
+#if 0
static int __addr_vlan_n2p_fun(const struct layer_addr *paddr, char *buf, int buf_len)
{
const struct layer_addr_vlan *vlan_addr = paddr->vlan;
@@ -1340,6 +1341,60 @@ static int __addr_vlan_n2p_fun(const struct layer_addr *paddr, char *buf, int bu
return addr_len + 1;
}
+#endif
+
+#define VLAN_ADDR_STR_LEN 128
+#define TMP_BUF_LEN 32
+
+static int __addr_vlan_n2p_fun(const struct layer_addr *paddr, char *buf, int buf_len)
+{
+ const struct layer_addr_vlan *vlan_addr = paddr->vlan;
+ int i;
+ unsigned short vlan_id;
+ char tmp_buf[TMP_BUF_LEN] = {};
+ char vlan_addr_string[VLAN_ADDR_STR_LEN] = {};
+
+ /* ע��: �����зǶԳ�vlan����� */
+ int max_layer_num = vlan_addr->c2s_layer_num > vlan_addr->s2c_layer_num ? vlan_addr->c2s_layer_num:vlan_addr->s2c_layer_num;
+
+ for(i = 0; i < max_layer_num; i++){
+ if(vlan_addr->c2s_layer_num >= i+1){
+ vlan_id = ntohs(vlan_addr->c2s_addr_array[i].VID);
+ snprintf(tmp_buf, TMP_BUF_LEN, "%d", vlan_id);
+ if(strlen(vlan_addr_string) + strlen(tmp_buf) < VLAN_ADDR_STR_LEN){
+ strncat(vlan_addr_string, tmp_buf, VLAN_ADDR_STR_LEN - strlen(vlan_addr_string) - 1);
+ }
+ }else{
+ if(strlen(vlan_addr_string) + strlen("N/A-") < VLAN_ADDR_STR_LEN){
+ strncat(vlan_addr_string, "N/A-", VLAN_ADDR_STR_LEN - strlen(vlan_addr_string) - 1);
+ }
+ }
+ if(vlan_addr->s2c_layer_num >= i+1){
+ vlan_id = ntohs(vlan_addr->s2c_addr_array[i].VID);
+ snprintf(tmp_buf, TMP_BUF_LEN, "%d", vlan_id);
+ if(strlen(vlan_addr_string) + strlen(tmp_buf) < VLAN_ADDR_STR_LEN){
+ strncat(vlan_addr_string, tmp_buf, VLAN_ADDR_STR_LEN - strlen(vlan_addr_string) - 1);
+ }
+ }else{
+ if(strlen(vlan_addr_string) + strlen("-N/A") < VLAN_ADDR_STR_LEN){
+ strncat(vlan_addr_string, "-N/A", VLAN_ADDR_STR_LEN - strlen(vlan_addr_string) - 1);
+ }
+ }
+ if(i < max_layer_num-1){
+ if(strlen(vlan_addr_string) + 1 < VLAN_ADDR_STR_LEN){
+ strncat(vlan_addr_string, ",", VLAN_ADDR_STR_LEN - strlen(vlan_addr_string) - 1);
+ }
+ }
+ }
+
+ int addr_len = strlen(vlan_addr_string);
+ if(buf_len <= addr_len + 1){
+ return -1;
+ }
+ memcpy(buf, vlan_addr_string, addr_len + 1);
+
+ return addr_len + 1;
+}
static int __addr_mac_n2p_fun(const struct layer_addr *paddr, char *buf, int buf_len)
@@ -1431,6 +1486,7 @@ static int __addr_gre_n2p_fun(const struct layer_addr *paddr, char *buf, int buf
<1-2>
<1-2,3-4,5-6>
*/
+#if 0
static int __addr_mpls_n2p_fun(const struct layer_addr *paddr, char *buf, int buf_len)
{
const struct layer_addr_mpls *mpls_addr = paddr->mpls;
@@ -1475,6 +1531,57 @@ static int __addr_mpls_n2p_fun(const struct layer_addr *paddr, char *buf, int bu
return addr_len + 1;
}
+#endif
+
+#define MPLS_ADDR_STR_LEN 128
+#define TMP_BUF_LEN 32
+
+static int __addr_mpls_n2p_fun(const struct layer_addr *paddr, char *buf, int buf_len)
+{
+ const struct layer_addr_mpls *mpls_addr = paddr->mpls;
+ int i;
+ char tmp_buf[TMP_BUF_LEN];
+ /* ע���зǶԳ�mpls����� */
+ int max_layer_num = mpls_addr->c2s_layer_num > mpls_addr->s2c_layer_num ? mpls_addr->c2s_layer_num:mpls_addr->s2c_layer_num;
+
+ char mpls_addr_string[MPLS_ADDR_STR_LEN] = {};
+
+ for(i = 0; i < max_layer_num; i++){
+ if(mpls_addr->c2s_layer_num >= i+1){
+ snprintf(tmp_buf, TMP_BUF_LEN, "%d", ntohl(mpls_addr->c2s_addr_array[i].label));
+ if(strlen(mpls_addr_string) + strlen(tmp_buf) < MPLS_ADDR_STR_LEN){
+ strncat(mpls_addr_string, tmp_buf, MPLS_ADDR_STR_LEN - strlen(mpls_addr_string) - 1);
+ }
+ }else{
+ if(strlen(mpls_addr_string) + strlen("N/A") < MPLS_ADDR_STR_LEN){
+ strncat(mpls_addr_string, "N/A", MPLS_ADDR_STR_LEN - strlen(mpls_addr_string) - 1);
+ }
+ }
+ if(mpls_addr->s2c_layer_num >= i+1){
+ snprintf(tmp_buf, TMP_BUF_LEN, "-%d", ntohl(mpls_addr->s2c_addr_array[i].label));
+ if(strlen(mpls_addr_string) + strlen(tmp_buf) < MPLS_ADDR_STR_LEN){
+ strncat(mpls_addr_string, tmp_buf, MPLS_ADDR_STR_LEN - strlen(mpls_addr_string) - 1);
+ }
+ }else{
+ if(strlen(mpls_addr_string) + strlen("-N/A") < MPLS_ADDR_STR_LEN){
+ strncat(mpls_addr_string, "-N/A", MPLS_ADDR_STR_LEN - strlen(mpls_addr_string) - 1);
+ }
+ }
+ if(i < max_layer_num-1){
+ if(strlen(mpls_addr_string) + 1 < MPLS_ADDR_STR_LEN){
+ strncat(mpls_addr_string, ",", MPLS_ADDR_STR_LEN - strlen(mpls_addr_string) - 1);
+ }
+ }
+ }
+
+ int addr_len = strlen(mpls_addr_string);
+ if(buf_len <= addr_len + 1){
+ return -1;
+ }
+ memcpy(buf, mpls_addr_string, addr_len + 1);
+
+ return addr_len + 1;
+}
static int __addr_pppoe_n2p_fun(const struct layer_addr *paddr, char *buf, int buf_len)
{
@@ -1731,16 +1838,24 @@ static const char *__layer_addr_ntop (const struct streaminfo *stream, int threa
return result;
}
+size_t sapp_strlcpy(char *dst, const char *src, size_t size) {
+ size_t srclen = strlen(src);
+ if (size > 0) {
+ size_t len = (srclen >= size) ? size - 1 : srclen;
+ memcpy(dst, src, len);
+ dst[len] = '\0';
+ }
+ return srclen;
+}
+
/* �̰߳�ȫ������汾 */
const char *__layer_addr_ntop_r (const struct streaminfo *stream, char *dst, int size, int thread_index)
{
const char *result = __layer_addr_ntop(stream, thread_index);
- int addr_len = strlen(result) + 1;
- if(addr_len > size){
+ if((int)strlen(result) >= size){
return NULL;
}
-
- strncpy(dst, result, addr_len);
+ sapp_strlcpy(dst, result, size);
return result;
}