Jelajahi Sumber

core: allow proto in advertise for a couple of listen variants

Daniel-Constantin Mierla 1 tahun lalu
induk
melakukan
c2e8baad3b
1 mengubah file dengan 40 tambahan dan 0 penghapusan
  1. 40 0
      src/core/cfg.y

+ 40 - 0
src/core/cfg.y

@@ -1665,6 +1665,19 @@ assign_stm:
 		}
 		}
 		free_socket_id_lst($3);
 		free_socket_id_lst($3);
 	}
 	}
+	| LISTEN EQUAL id_lst ADVERTISE proto COLON listen_id COLON NUMBER {
+		for(lst_tmp=$3; lst_tmp; lst_tmp=lst_tmp->next) {
+			if (add_listen_advertise_iface(	lst_tmp->addr_lst->name,
+									lst_tmp->addr_lst->next,
+									lst_tmp->port, lst_tmp->proto,
+									$5, $7, $9,
+									lst_tmp->flags)!=0) {
+				LM_CRIT("cfg. parser: failed to add listen address\n");
+				break;
+			}
+		}
+		free_socket_id_lst($3);
+	}
         | LISTEN EQUAL id_lst ADVERTISE listen_id COLON NUMBER VIRTUAL {
         | LISTEN EQUAL id_lst ADVERTISE listen_id COLON NUMBER VIRTUAL {
                 for(lst_tmp=$3; lst_tmp; lst_tmp=lst_tmp->next) {
                 for(lst_tmp=$3; lst_tmp; lst_tmp=lst_tmp->next) {
 			lst_tmp->flags |= SI_IS_VIRTUAL;
 			lst_tmp->flags |= SI_IS_VIRTUAL;
@@ -1692,6 +1705,19 @@ assign_stm:
 		}
 		}
 		free_socket_id_lst($3);
 		free_socket_id_lst($3);
 	}
 	}
+	| LISTEN EQUAL id_lst ADVERTISE proto COLON listen_id COLON NUMBER STRNAME STRING {
+		for(lst_tmp=$3; lst_tmp; lst_tmp=lst_tmp->next) {
+			if (add_listen_advertise_iface_name(lst_tmp->addr_lst->name,
+									lst_tmp->addr_lst->next,
+									lst_tmp->port, lst_tmp->proto,
+									$5, $7, $9, $11,
+									lst_tmp->flags)!=0) {
+				LM_CRIT("cfg. parser: failed to add listen address\n");
+				break;
+			}
+		}
+		free_socket_id_lst($3);
+	}
         | LISTEN EQUAL id_lst ADVERTISE listen_id COLON NUMBER STRNAME STRING VIRTUAL {
         | LISTEN EQUAL id_lst ADVERTISE listen_id COLON NUMBER STRNAME STRING VIRTUAL {
                 for(lst_tmp=$3; lst_tmp; lst_tmp=lst_tmp->next) {
                 for(lst_tmp=$3; lst_tmp; lst_tmp=lst_tmp->next) {
 			lst_tmp->flags |= SI_IS_VIRTUAL;
 			lst_tmp->flags |= SI_IS_VIRTUAL;
@@ -1706,6 +1732,20 @@ assign_stm:
                 }
                 }
                 free_socket_id_lst($3);
                 free_socket_id_lst($3);
         }
         }
+        | LISTEN EQUAL id_lst ADVERTISE proto COLON listen_id COLON NUMBER STRNAME STRING VIRTUAL {
+                for(lst_tmp=$3; lst_tmp; lst_tmp=lst_tmp->next) {
+			lst_tmp->flags |= SI_IS_VIRTUAL;
+                        if (add_listen_advertise_iface_name(lst_tmp->addr_lst->name,
+                                                                        lst_tmp->addr_lst->next,
+                                                                        lst_tmp->port, lst_tmp->proto,
+                                                                        $5, $7, $9, $11,
+                                                                        lst_tmp->flags)!=0) {
+                                LM_CRIT("cfg. parser: failed to add listen address\n");
+                                break;
+                        }
+                }
+                free_socket_id_lst($3);
+        }
 	| LISTEN EQUAL id_lst ADVERTISE listen_id {
 	| LISTEN EQUAL id_lst ADVERTISE listen_id {
 		for(lst_tmp=$3; lst_tmp; lst_tmp=lst_tmp->next) {
 		for(lst_tmp=$3; lst_tmp; lst_tmp=lst_tmp->next) {
 			if (add_listen_advertise_iface(	lst_tmp->addr_lst->name,
 			if (add_listen_advertise_iface(	lst_tmp->addr_lst->name,