winlin

for #319, render the detail of vhost

@@ -694,8 +694,8 @@ vhost http.remux.srs.com { @@ -694,8 +694,8 @@ vhost http.remux.srs.com {
694 # whether http stream trigger rtmp stream source when no stream available, 694 # whether http stream trigger rtmp stream source when no stream available,
695 # for example, when encoder has not publish stream yet, 695 # for example, when encoder has not publish stream yet,
696 # user can play the http flv stream and wait for stream. 696 # user can play the http flv stream and wait for stream.
697 - # default: on  
698 - hstrs on; 697 + # default: off
  698 + hstrs off;
699 } 699 }
700 } 700 }
701 701
@@ -70,8 +70,8 @@ vhost vhost.srs.com { @@ -70,8 +70,8 @@ vhost vhost.srs.com {
70 time_jitter full; 70 time_jitter full;
71 mix_correct off; 71 mix_correct off;
72 72
73 - atc on;  
74 - atc_auto on; 73 + atc off;
  74 + atc_auto off;
75 75
76 mw_latency 100; 76 mw_latency 100;
77 77
@@ -108,6 +108,7 @@ vhost vhost.srs.com { @@ -108,6 +108,7 @@ vhost vhost.srs.com {
108 enabled off; 108 enabled off;
109 allow play all; 109 allow play all;
110 allow publish all; 110 allow publish all;
  111 + deny publish all;
111 } 112 }
112 113
113 http_static { 114 http_static {
@@ -1643,18 +1643,16 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -1643,18 +1643,16 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
1643 1643
1644 SrsConfDirective* dir = NULL; 1644 SrsConfDirective* dir = NULL;
1645 1645
1646 - // stat id and name. 1646 + // always present in vhost.
1647 SrsStatistic* stat = SrsStatistic::instance(); 1647 SrsStatistic* stat = SrsStatistic::instance();
1648 1648
1649 SrsStatisticVhost* svhost = stat->find_vhost(vhost->arg0()); 1649 SrsStatisticVhost* svhost = stat->find_vhost(vhost->arg0());
1650 obj->set("id", SrsAmf0Any::number(svhost? (double)svhost->id : 0)); 1650 obj->set("id", SrsAmf0Any::number(svhost? (double)svhost->id : 0));
1651 1651
1652 obj->set("name", vhost->dumps_arg0_to_str()); 1652 obj->set("name", vhost->dumps_arg0_to_str());
  1653 + obj->set("enabled", SrsAmf0Any::boolean(get_vhost_enabled(vhost)));
1653 1654
1654 // vhost scope configs. 1655 // vhost scope configs.
1655 - if ((dir = vhost->get("enabled")) != NULL) {  
1656 - obj->set("enabled", dir->dumps_arg0_to_boolean());  
1657 - }  
1658 if ((dir = vhost->get("chunk_size")) != NULL) { 1656 if ((dir = vhost->get("chunk_size")) != NULL) {
1659 obj->set("chunk_size", dir->dumps_arg0_to_number()); 1657 obj->set("chunk_size", dir->dumps_arg0_to_number());
1660 } 1658 }
@@ -1692,12 +1690,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -1692,12 +1690,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
1692 SrsAmf0Object* forward = SrsAmf0Any::object(); 1690 SrsAmf0Object* forward = SrsAmf0Any::object();
1693 obj->set("forward", forward); 1691 obj->set("forward", forward);
1694 1692
  1693 + forward->set("enabled", SrsAmf0Any::boolean(get_forward_enabled(vhost->name)));
  1694 +
1695 for (int i = 0; i < (int)dir->directives.size(); i++) { 1695 for (int i = 0; i < (int)dir->directives.size(); i++) {
1696 SrsConfDirective* sdir = dir->directives.at(i); 1696 SrsConfDirective* sdir = dir->directives.at(i);
1697 1697
1698 - if (sdir->name == "enabled") {  
1699 - forward->set("enabled", sdir->dumps_arg0_to_boolean());  
1700 - } else if (sdir->name == "destination") { 1698 + if (sdir->name == "destination") {
1701 forward->set("destination", sdir->dumps_args()); 1699 forward->set("destination", sdir->dumps_args());
1702 } 1700 }
1703 } 1701 }
@@ -1758,12 +1756,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -1758,12 +1756,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
1758 SrsAmf0Object* refer = SrsAmf0Any::object(); 1756 SrsAmf0Object* refer = SrsAmf0Any::object();
1759 obj->set("refer", refer); 1757 obj->set("refer", refer);
1760 1758
  1759 + refer->set("enabled", SrsAmf0Any::boolean(get_refer_enabled(vhost->name)));
  1760 +
1761 for (int i = 0; i < (int)dir->directives.size(); i++) { 1761 for (int i = 0; i < (int)dir->directives.size(); i++) {
1762 SrsConfDirective* sdir = dir->directives.at(i); 1762 SrsConfDirective* sdir = dir->directives.at(i);
1763 1763
1764 - if (sdir->name == "enabled") {  
1765 - refer->set("enabled", sdir->dumps_arg0_to_boolean());  
1766 - } else if (sdir->name == "all") { 1764 + if (sdir->name == "all") {
1767 refer->set("all", sdir->dumps_args()); 1765 refer->set("all", sdir->dumps_args());
1768 } else if (sdir->name == "publish") { 1766 } else if (sdir->name == "publish") {
1769 refer->set("publish", sdir->dumps_args()); 1767 refer->set("publish", sdir->dumps_args());
@@ -1778,12 +1776,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -1778,12 +1776,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
1778 SrsAmf0Object* bandcheck = SrsAmf0Any::object(); 1776 SrsAmf0Object* bandcheck = SrsAmf0Any::object();
1779 obj->set("bandcheck", bandcheck); 1777 obj->set("bandcheck", bandcheck);
1780 1778
  1779 + bandcheck->set("enabled", SrsAmf0Any::boolean(get_bw_check_enabled(vhost->name)));
  1780 +
1781 for (int i = 0; i < (int)dir->directives.size(); i++) { 1781 for (int i = 0; i < (int)dir->directives.size(); i++) {
1782 SrsConfDirective* sdir = dir->directives.at(i); 1782 SrsConfDirective* sdir = dir->directives.at(i);
1783 1783
1784 - if (sdir->name == "enabled") {  
1785 - bandcheck->set("enabled", sdir->dumps_arg0_to_boolean());  
1786 - } else if (sdir->name == "key") { 1784 + if (sdir->name == "key") {
1787 bandcheck->set("key", sdir->dumps_arg0_to_str()); 1785 bandcheck->set("key", sdir->dumps_arg0_to_str());
1788 } else if (sdir->name == "interval") { 1786 } else if (sdir->name == "interval") {
1789 bandcheck->set("interval", sdir->dumps_arg0_to_number()); 1787 bandcheck->set("interval", sdir->dumps_arg0_to_number());
@@ -1798,20 +1796,29 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -1798,20 +1796,29 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
1798 SrsAmf0Object* security = SrsAmf0Any::object(); 1796 SrsAmf0Object* security = SrsAmf0Any::object();
1799 obj->set("security", security); 1797 obj->set("security", security);
1800 1798
  1799 + security->set("enabled", SrsAmf0Any::boolean(get_security_enabled(vhost->name)));
  1800 +
1801 SrsAmf0StrictArray* allows = SrsAmf0Any::strict_array(); 1801 SrsAmf0StrictArray* allows = SrsAmf0Any::strict_array();
1802 security->set("allows", allows); 1802 security->set("allows", allows);
1803 1803
  1804 + SrsAmf0StrictArray* denies = SrsAmf0Any::strict_array();
  1805 + security->set("denies", denies);
  1806 +
1804 for (int i = 0; i < (int)dir->directives.size(); i++) { 1807 for (int i = 0; i < (int)dir->directives.size(); i++) {
1805 SrsConfDirective* sdir = dir->directives.at(i); 1808 SrsConfDirective* sdir = dir->directives.at(i);
1806 1809
1807 - if (sdir->name == "enabled") {  
1808 - security->set("enabled", sdir->dumps_arg0_to_boolean());  
1809 - } else if (sdir->name == "allow") { 1810 + if (sdir->name == "allow") {
1810 SrsAmf0Object* allow = SrsAmf0Any::object(); 1811 SrsAmf0Object* allow = SrsAmf0Any::object();
1811 allow->set("action", SrsAmf0Any::str(sdir->name.c_str())); 1812 allow->set("action", SrsAmf0Any::str(sdir->name.c_str()));
1812 allow->set("method", SrsAmf0Any::str(sdir->arg0().c_str())); 1813 allow->set("method", SrsAmf0Any::str(sdir->arg0().c_str()));
1813 allow->set("entry", SrsAmf0Any::str(sdir->arg1().c_str())); 1814 allow->set("entry", SrsAmf0Any::str(sdir->arg1().c_str()));
1814 allows->append(allow); 1815 allows->append(allow);
  1816 + } else if (sdir->name == "deny") {
  1817 + SrsAmf0Object* deny = SrsAmf0Any::object();
  1818 + deny->set("action", SrsAmf0Any::str(sdir->name.c_str()));
  1819 + deny->set("method", SrsAmf0Any::str(sdir->arg0().c_str()));
  1820 + deny->set("entry", SrsAmf0Any::str(sdir->arg1().c_str()));
  1821 + denies->append(deny);
1815 } 1822 }
1816 } 1823 }
1817 } 1824 }
@@ -1821,12 +1828,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -1821,12 +1828,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
1821 SrsAmf0Object* http_static = SrsAmf0Any::object(); 1828 SrsAmf0Object* http_static = SrsAmf0Any::object();
1822 obj->set("http_static", http_static); 1829 obj->set("http_static", http_static);
1823 1830
  1831 + http_static->set("enabled", SrsAmf0Any::boolean(get_vhost_http_enabled(vhost->name)));
  1832 +
1824 for (int i = 0; i < (int)dir->directives.size(); i++) { 1833 for (int i = 0; i < (int)dir->directives.size(); i++) {
1825 SrsConfDirective* sdir = dir->directives.at(i); 1834 SrsConfDirective* sdir = dir->directives.at(i);
1826 1835
1827 - if (sdir->name == "enabled") {  
1828 - http_static->set("enabled", sdir->dumps_arg0_to_boolean());  
1829 - } else if (sdir->name == "mount") { 1836 + if (sdir->name == "mount") {
1830 http_static->set("mount", sdir->dumps_arg0_to_str()); 1837 http_static->set("mount", sdir->dumps_arg0_to_str());
1831 } else if (sdir->name == "dir") { 1838 } else if (sdir->name == "dir") {
1832 http_static->set("dir", sdir->dumps_arg0_to_str()); 1839 http_static->set("dir", sdir->dumps_arg0_to_str());
@@ -1839,12 +1846,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -1839,12 +1846,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
1839 SrsAmf0Object* http_remux = SrsAmf0Any::object(); 1846 SrsAmf0Object* http_remux = SrsAmf0Any::object();
1840 obj->set("http_remux", http_remux); 1847 obj->set("http_remux", http_remux);
1841 1848
  1849 + http_remux->set("enabled", SrsAmf0Any::boolean(get_vhost_http_remux_enabled(vhost->name)));
  1850 +
1842 for (int i = 0; i < (int)dir->directives.size(); i++) { 1851 for (int i = 0; i < (int)dir->directives.size(); i++) {
1843 SrsConfDirective* sdir = dir->directives.at(i); 1852 SrsConfDirective* sdir = dir->directives.at(i);
1844 1853
1845 - if (sdir->name == "enabled") {  
1846 - http_remux->set("enabled", sdir->dumps_arg0_to_boolean());  
1847 - } else if (sdir->name == "fast_cache") { 1854 + if (sdir->name == "fast_cache") {
1848 http_remux->set("fast_cache", sdir->dumps_arg0_to_number()); 1855 http_remux->set("fast_cache", sdir->dumps_arg0_to_number());
1849 } else if (sdir->name == "mount") { 1856 } else if (sdir->name == "mount") {
1850 http_remux->set("mount", sdir->dumps_arg0_to_str()); 1857 http_remux->set("mount", sdir->dumps_arg0_to_str());
@@ -1859,12 +1866,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -1859,12 +1866,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
1859 SrsAmf0Object* http_hooks = SrsAmf0Any::object(); 1866 SrsAmf0Object* http_hooks = SrsAmf0Any::object();
1860 obj->set("http_hooks", http_hooks); 1867 obj->set("http_hooks", http_hooks);
1861 1868
  1869 + http_hooks->set("enabled", SrsAmf0Any::boolean(get_vhost_http_hooks_enabled(vhost->name)));
  1870 +
1862 for (int i = 0; i < (int)dir->directives.size(); i++) { 1871 for (int i = 0; i < (int)dir->directives.size(); i++) {
1863 SrsConfDirective* sdir = dir->directives.at(i); 1872 SrsConfDirective* sdir = dir->directives.at(i);
1864 1873
1865 - if (sdir->name == "enabled") {  
1866 - http_hooks->set("enabled", sdir->dumps_arg0_to_boolean());  
1867 - } else if (sdir->name == "on_connect") { 1874 + if (sdir->name == "on_connect") {
1868 http_hooks->set("on_connect", sdir->dumps_args()); 1875 http_hooks->set("on_connect", sdir->dumps_args());
1869 } else if (sdir->name == "on_close") { 1876 } else if (sdir->name == "on_close") {
1870 http_hooks->set("on_close", sdir->dumps_args()); 1877 http_hooks->set("on_close", sdir->dumps_args());
@@ -1891,12 +1898,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -1891,12 +1898,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
1891 SrsAmf0Object* hls = SrsAmf0Any::object(); 1898 SrsAmf0Object* hls = SrsAmf0Any::object();
1892 obj->set("hls", hls); 1899 obj->set("hls", hls);
1893 1900
  1901 + hls->set("enabled", SrsAmf0Any::boolean(get_hls_enabled(vhost->name)));
  1902 +
1894 for (int i = 0; i < (int)dir->directives.size(); i++) { 1903 for (int i = 0; i < (int)dir->directives.size(); i++) {
1895 SrsConfDirective* sdir = dir->directives.at(i); 1904 SrsConfDirective* sdir = dir->directives.at(i);
1896 1905
1897 - if (sdir->name == "enabled") {  
1898 - hls->set("enabled", sdir->dumps_arg0_to_boolean());  
1899 - } else if (sdir->name == "hls_fragment") { 1906 + if (sdir->name == "hls_fragment") {
1900 hls->set("hls_fragment", sdir->dumps_arg0_to_number()); 1907 hls->set("hls_fragment", sdir->dumps_arg0_to_number());
1901 } else if (sdir->name == "hls_td_ratio") { 1908 } else if (sdir->name == "hls_td_ratio") {
1902 hls->set("hls_td_ratio", sdir->dumps_arg0_to_number()); 1909 hls->set("hls_td_ratio", sdir->dumps_arg0_to_number());
@@ -1941,12 +1948,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -1941,12 +1948,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
1941 SrsAmf0Object* hds = SrsAmf0Any::object(); 1948 SrsAmf0Object* hds = SrsAmf0Any::object();
1942 obj->set("hds", hds); 1949 obj->set("hds", hds);
1943 1950
  1951 + hds->set("enabled", SrsAmf0Any::boolean(get_hds_enabled(vhost->name)));
  1952 +
1944 for (int i = 0; i < (int)dir->directives.size(); i++) { 1953 for (int i = 0; i < (int)dir->directives.size(); i++) {
1945 SrsConfDirective* sdir = dir->directives.at(i); 1954 SrsConfDirective* sdir = dir->directives.at(i);
1946 1955
1947 - if (sdir->name == "enabled") {  
1948 - hds->set("enabled", sdir->dumps_arg0_to_boolean());  
1949 - } else if (sdir->name == "hds_fragment") { 1956 + if (sdir->name == "hds_fragment") {
1950 hds->set("hds_fragment", sdir->dumps_arg0_to_number()); 1957 hds->set("hds_fragment", sdir->dumps_arg0_to_number());
1951 } else if (sdir->name == "hds_window") { 1958 } else if (sdir->name == "hds_window") {
1952 hds->set("hds_window", sdir->dumps_arg0_to_number()); 1959 hds->set("hds_window", sdir->dumps_arg0_to_number());
@@ -1961,12 +1968,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -1961,12 +1968,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
1961 SrsAmf0Object* dvr = SrsAmf0Any::object(); 1968 SrsAmf0Object* dvr = SrsAmf0Any::object();
1962 obj->set("dvr", dvr); 1969 obj->set("dvr", dvr);
1963 1970
  1971 + dvr->set("enabled", SrsAmf0Any::boolean(get_dvr_enabled(vhost->name)));
  1972 +
1964 for (int i = 0; i < (int)dir->directives.size(); i++) { 1973 for (int i = 0; i < (int)dir->directives.size(); i++) {
1965 SrsConfDirective* sdir = dir->directives.at(i); 1974 SrsConfDirective* sdir = dir->directives.at(i);
1966 1975
1967 - if (sdir->name == "enabled") {  
1968 - dvr->set("enabled", sdir->dumps_arg0_to_boolean());  
1969 - } else if (sdir->name == "dvr_plan") { 1976 + if (sdir->name == "dvr_plan") {
1970 dvr->set("dvr_plan", sdir->dumps_arg0_to_str()); 1977 dvr->set("dvr_plan", sdir->dumps_arg0_to_str());
1971 } else if (sdir->name == "dvr_path") { 1978 } else if (sdir->name == "dvr_path") {
1972 dvr->set("dvr_path", sdir->dumps_arg0_to_str()); 1979 dvr->set("dvr_path", sdir->dumps_arg0_to_str());
@@ -1985,12 +1992,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -1985,12 +1992,12 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
1985 SrsAmf0Object* ng_exec = SrsAmf0Any::object(); 1992 SrsAmf0Object* ng_exec = SrsAmf0Any::object();
1986 obj->set("exec", ng_exec); 1993 obj->set("exec", ng_exec);
1987 1994
  1995 + ng_exec->set("enabled", SrsAmf0Any::boolean(get_exec_enabled(vhost->name)));
  1996 +
1988 for (int i = 0; i < (int)dir->directives.size(); i++) { 1997 for (int i = 0; i < (int)dir->directives.size(); i++) {
1989 SrsConfDirective* sdir = dir->directives.at(i); 1998 SrsConfDirective* sdir = dir->directives.at(i);
1990 1999
1991 - if (sdir->name == "enabled") {  
1992 - ng_exec->set("enabled", sdir->dumps_arg0_to_boolean());  
1993 - } else if (sdir->name == "publish") { 2000 + if (sdir->name == "publish") {
1994 ng_exec->set("publish", sdir->dumps_args()); 2001 ng_exec->set("publish", sdir->dumps_args());
1995 } 2002 }
1996 } 2003 }
@@ -2011,14 +2018,13 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2011,14 +2018,13 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2011 2018
2012 SrsAmf0Object* ingest = SrsAmf0Any::object(); 2019 SrsAmf0Object* ingest = SrsAmf0Any::object();
2013 ingest->set("id", dir->dumps_arg0_to_str()); 2020 ingest->set("id", dir->dumps_arg0_to_str());
  2021 + ingest->set("enabled", SrsAmf0Any::boolean(get_ingest_enabled(dir)));
2014 ingests->append(ingest); 2022 ingests->append(ingest);
2015 2023
2016 for (int j = 0; j < (int)dir->directives.size(); j++) { 2024 for (int j = 0; j < (int)dir->directives.size(); j++) {
2017 SrsConfDirective* sdir = dir->directives.at(j); 2025 SrsConfDirective* sdir = dir->directives.at(j);
2018 2026
2019 - if (sdir->name == "enabled") {  
2020 - ingest->set("enabled", sdir->dumps_arg0_to_boolean());  
2021 - } else if (sdir->name == "input") { 2027 + if (sdir->name == "input") {
2022 SrsAmf0Object* input = SrsAmf0Any::object(); 2028 SrsAmf0Object* input = SrsAmf0Any::object();
2023 ingest->set("input", input); 2029 ingest->set("input", input);
2024 2030
@@ -2049,15 +2055,15 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2049,15 +2055,15 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2049 SrsAmf0Object* transcode = SrsAmf0Any::object(); 2055 SrsAmf0Object* transcode = SrsAmf0Any::object();
2050 obj->set("transcode", transcode); 2056 obj->set("transcode", transcode);
2051 2057
  2058 + transcode->set("enabled", SrsAmf0Any::boolean(get_transcode_enabled(dir)));
  2059 +
2052 SrsAmf0StrictArray* engines = SrsAmf0Any::strict_array(); 2060 SrsAmf0StrictArray* engines = SrsAmf0Any::strict_array();
2053 obj->set("engines", engines); 2061 obj->set("engines", engines);
2054 2062
2055 for (int i = 0; i < (int)dir->directives.size(); i++) { 2063 for (int i = 0; i < (int)dir->directives.size(); i++) {
2056 SrsConfDirective* sdir = dir->directives.at(i); 2064 SrsConfDirective* sdir = dir->directives.at(i);
2057 2065
2058 - if (sdir->name == "enabled") {  
2059 - transcode->set("enabled", sdir->dumps_arg0_to_boolean());  
2060 - } else if (sdir->name == "ffmpeg") { 2066 + if (sdir->name == "ffmpeg") {
2061 transcode->set("ffmpeg", sdir->dumps_arg0_to_str()); 2067 transcode->set("ffmpeg", sdir->dumps_arg0_to_str());
2062 } else if (sdir->name == "engine") { 2068 } else if (sdir->name == "engine") {
2063 SrsAmf0Object* engine = SrsAmf0Any::object(); 2069 SrsAmf0Object* engine = SrsAmf0Any::object();
@@ -2101,10 +2107,7 @@ int SrsConfig::dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine) @@ -2101,10 +2107,7 @@ int SrsConfig::dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine)
2101 SrsConfDirective* conf = NULL; 2107 SrsConfDirective* conf = NULL;
2102 2108
2103 engine->set("name", dir->dumps_arg0_to_str()); 2109 engine->set("name", dir->dumps_arg0_to_str());
2104 -  
2105 - if ((conf = dir->get("enabled")) != NULL) {  
2106 - engine->set("enabled", conf->dumps_arg0_to_boolean());  
2107 - } 2110 + engine->set("enabled", SrsAmf0Any::boolean(get_engine_enabled(dir)));
2108 2111
2109 if ((conf = dir->get("iformat")) != NULL) { 2112 if ((conf = dir->get("iformat")) != NULL) {
2110 engine->set("iformat", conf->dumps_arg0_to_str()); 2113 engine->set("iformat", conf->dumps_arg0_to_str());
@@ -5414,7 +5417,8 @@ string SrsConfig::get_vhost_http_remux_mount(string vhost) @@ -5414,7 +5417,8 @@ string SrsConfig::get_vhost_http_remux_mount(string vhost)
5414 5417
5415 bool SrsConfig::get_vhost_http_remux_hstrs(string vhost) 5418 bool SrsConfig::get_vhost_http_remux_hstrs(string vhost)
5416 { 5419 {
5417 - static bool DEFAULT = true; 5420 + // the HSTRS must default to false for origin.
  5421 + static bool DEFAULT = false;
5418 5422
5419 SrsConfDirective* conf = get_vhost(vhost); 5423 SrsConfDirective* conf = get_vhost(vhost);
5420 if (!conf) { 5424 if (!conf) {
@@ -5854,7 +5858,7 @@ int srs_config_transform_vhost(SrsConfDirective* root) @@ -5854,7 +5858,7 @@ int srs_config_transform_vhost(SrsConfDirective* root)
5854 // vhost { forward; } 5858 // vhost { forward; }
5855 // SRS3+: 5859 // SRS3+:
5856 // vhost { forward { enabled; destination; } } 5860 // vhost { forward { enabled; destination; } }
5857 - if (n == "forward") { 5861 + if (n == "forward" && conf->directives.empty()) {
5858 conf->get_or_create("enabled", "on"); 5862 conf->get_or_create("enabled", "on");
5859 5863
5860 SrsConfDirective* destination = conf->get_or_create("destination"); 5864 SrsConfDirective* destination = conf->get_or_create("destination");