You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kk...@apache.org on 2016/01/07 16:13:37 UTC

svn commit: r1723572 - in /tomcat/tc6.0.x/branches/tomcat6-testing_20160106: ./ java/org/apache/catalina/connector/ java/org/apache/coyote/ java/org/apache/coyote/ajp/ java/org/apache/coyote/http11/ java/org/apache/coyote/memory/ java/org/apache/jk/com...

Author: kkolinko
Date: Thu Jan  7 15:13:37 2016
New Revision: 1723572

URL: http://svn.apache.org/viewvc?rev=1723572&view=rev
Log:
Rebase branch onto current tc6.0.x/trunk
This means a ctach-up merge of all revisions up to r1723551.

Modified:
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/   (props changed)
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/BRANCH-README.txt
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/Connector.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/LocalStrings.properties
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/mbeans-descriptors.xml
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/AbstractProtocol.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/ajp/AjpAprProtocol.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/ajp/AjpProtocol.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11AprProtocol.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11NioProtocol.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11Protocol.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/memory/MemoryProtocolHandler.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/common/ChannelNioSocket.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/common/ChannelSocket.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/server/JkCoyoteHandler.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/AbstractEndpoint.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/AprEndpoint.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/JIoEndpoint.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/NioEndpoint.java
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/changelog.xml
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/config/ajp.xml
    tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/config/http.xml

Propchange: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan  7 15:13:37 2016
@@ -1,3 +1,4 @@
-/tomcat/tc7.0.x/trunk:1224802,1243045,1298635,1304471,1311997,1312007,1331772,1333164,1333176,1348992,1354866,1371298,1371302,1371620,1402110,1409014,1413553,1413557,1413563,1430083,1438415,1446641-1446660,1447013,1453106,1453119,1484919,1486877,1500065,1503852,1505844,1513151,1521040,1526470,1536524,1539176-1539177,1544469,1544473,1552805,1558894,1558917,1561368,1561382,1561386,1561552,1561561,1561636,1561641,1561643,1561737,1562748,1564317,1568922,1570163,1577328,1577464-1577465,1578814,1586659,1586897,1586960,1588199,1588997,1589740,1589851,1589997,1590019,1590028,1590337,1590492,1590651,1590838,1590845,1590848,1590912,1593262,1593288,1593371,1593835,1594230,1595174,1595366,1600956,1601333,1601856,1601909,1609079,1609606,1617364,1617374,1617433,1617457-1617458,1624249,1626579,1627420,1627469,1632586,1637686,1637711,1640675,1642045,1643515,1643540,1643572,1643585-1643586,1643642,1643647,1644019,1648817,1656301,1658815,1659523,1659564,1664001,1664176,1665087,1666968,1666989,1668541
 ,1668635,1669802,1676557,1681183,1681841,1681865,1681867,1685829,1693109,1694293,1694433,1694875,1696381,1701945,1710353,1712656,1713873,1714000,1714005,1714540,1715213,1716221,1716417,1717210,1717212,1720236,1720398,1720443,1720464,1721814,1721883,1722801,1723151
+/tomcat/tc6.0.x/trunk:1723244-1723551
+/tomcat/tc7.0.x/trunk:1190476,1224802,1243045,1298635,1304471,1311997,1312007,1331772,1333164,1333176,1348992,1354866,1371298,1371302,1371620,1402110,1409014,1413553,1413557,1413563,1430083,1438415,1446641-1446660,1447013,1453106,1453119,1484919,1486877,1500065,1503852,1505844,1513151,1521040,1526470,1536524,1539176-1539177,1544469,1544473,1552805,1558894,1558917,1561368,1561382,1561386,1561552,1561561,1561636,1561641,1561643,1561737,1562748,1564317,1568922,1570163,1577328,1577464-1577465,1578814,1586659,1586897,1586960,1588199,1588997,1589740,1589851,1589997,1590019,1590028,1590337,1590492,1590651,1590838,1590845,1590848,1590912,1593262,1593288,1593371,1593835,1594230,1595174,1595366,1600956,1601333,1601856,1601909,1609079,1609606,1617364,1617374,1617433,1617457-1617458,1624249,1626579,1627420,1627469,1632586,1637686,1637711,1640675,1642045,1643515,1643540,1643572,1643585-1643586,1643642,1643647,1644019,1648817,1656301,1658815,1659523,1659564,1664001,1664176,1665087,1666968,1666989
 ,1668541,1668635,1669802,1676557,1681183,1681841,1681865,1681867,1685829,1693109,1694293,1694433,1694875,1696381,1701945,1710353,1712656,1713873,1714000,1714005,1714540,1715213,1716221,1716417,1717210,1717212,1720236,1720398,1720443,1720464,1721814,1721883,1722801,1723151
 /tomcat/tc8.0.x/trunk:1637685,1637709,1640674,1641726,1641729-1641730,1643513,1643539,1643571,1643581-1643582,1644018,1648816,1656300,1658801-1658803,1658811,1659522,1663997,1664175,1665086,1666967,1666988,1668634,1669801,1676556,1681182,1681840,1681864,1685827,1689921,1693108,1694291,1694427,1694873,1696379,1701944,1710347,1712618,1712655,1713872,1713998,1714004,1714538,1715207,1716216-1716217,1716414,1717208-1717209,1720235,1720396,1720442,1720463,1721813,1721882,1722800,1723130
-/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,656018,666232,673796,673820,677910,683969,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,713953,714002,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,752323,753039,757335,757774,758249,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,770
 809,770876,772872,776921,776924,776935,776945,777464,777466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,783934,784453,784602,784614,785381,785688,785768,785859,786468,786487,786490,786496,786667,787627,787770,787985,789389,790405,791041,791184,791194,791224,791243,791326,791328,791789,792740,793372,793757,793882,793981,794082,794673,794822,795043,795152,795210,795457,795466,797168,797425,797596,797607,802727,802940,804462,804544,804734,805153,809131,809603,810916,810977,812125,812137,812432,813001,813013,813866,814180,814708,814876,815972,816252,817442,817822,819339,819361,820110,820132,820874,820954,821397,828196,828201,828210,828225,828759,830378-830379,830999,831106,831774,831785,831828,831850,831860,832214,832218,833121,833545,834047,835036,835336,836405,881396,881412,883130,883134,883146,883165,883177,883362,883565,884341,885038,885231,885241,885260,885901,885991,886019,888072,889363,889606,889716,890139,890265
 ,890349-890350,890417,891185-891187,891583,892198,892341,892415,892464,892555,892812,892814,892817,892843,892887,893321,893493,894580,894586,894805,894831,895013,895045,895057,895191,895392,895703,896370,896384,897380-897381,897776,898126,898256,898468,898527,898555,898558,898718,898836,898906,899284,899348,899420,899653,899769-899770,899783,899788,899792,899916,899918-899919,899935,899949,903916,905020,905151,905722,905728,905735,907311,907513,907538,907652,907819,907825,907864,908002,908721,908754,908759,909097,909206,909212,909525,909636,909869,909875,909887,910266,910370,910442,910471,910485,910974,915226,915737,915861,916097,916141,916157,916170,917598,917633,918093,918489,918594,918684,918787,918792,918799,918803,918885,919851,919914,920025,920055,920298,920449,920596,920824,920840,921444,922010,926716,927062,927621,928482,928695,928732,928798,931709,932357,932967,935105,935983,939491,939551,940064,941356,941463,943112,944409,944416,945231,945808,945835,945841,946686,948057,95
 0164,950596,950614,950851,950905,951615,953434,954435,955648,955655,956832,957130,957830,958192,960701,961948,962865,962872,962881,962900,963106,963865,963868,964614,966177-966178,966292,966692,966863,981815,988448,991837,993042,1001955,1002185,1002263,1002274,1002349,1002359,1002362,1002481,1002514,1003461,1003481,1003488,1003556,1003572,1003581,1003861,1004393,1004409,1004415,1004868-1004869,1004912,1005452,1005467,1005647,1005802,1022120,1022134,1022323,1022415,1022606,1022623,1024224,1024251,1026042,1026784,1026912,1026920,1029767,1033415,1033448,1033842,1033897,1037715,1037794,1037887,1037924,1038041,1041892,1042022,1042029,1042447,1042452,1042494,1043983,1044944,1044987,1049264,1050249,1055055,1055236,1055458,1055975,1056264,1056828,1056889,1059881,1060486,1061412,1061442,1061446,1061503,1062398,1064652,1066244,1066772,1067039,1067139,1069824,1070139,1070420,1070609,1072042,1073184,1073393,1075458,1076212,1078409,1078412,1079801,1081118,1081334,1088179,1088460,1090022,1094069,
 1094089,1095138,1097899,1099575,1099586,1099772,1099789,1100145,1100822,1101094,1101144,1124680,1130774,1133014,1137862,1137996,1138950,1138953,1139280,1140693,1141104,1141441,1142043,1142904,1143134,1143150,1145137,1148216,1148471,1152601,1156171,1156519,1164567,1167394,1172233-1172234,1172236,1173614,1174353,1174882,1174884,1175158,1175190,1176799,1177125,1177245,1177850,1177862,1178228,1178233,1178684,1181028,1181136,1184917,1184919,1185200,1185588,1186011,1186104,1186123,1186137,1186153,1186378,1186712,1186763,1186949,1187381,1189240,1189386,1190388-1190389,1198622,1201576,1203091,1224801,1233426,1243034,1243038,1244567,1298140,1298628-1298629,1304468,1311997,1331766,1333161,1333173,1342498,1342503,1348425,1348461-1348495,1348989,1350294,1351056,1351636-1351640,1352011,1354685,1354847,1354856,1356125,1359981,1371283,1409007,1413552,1413556,1413562,1417282,1430079,1430481,1430567,1435606,1435636,1435642,1438411,1439054,1441348,1446640,1446650,1447012,1453105,1453112,1456666-14566
 78,1456713,1456721,1457968,1460342,1460533,1484862,1486875,1492570,1494143,1500062,1503851,1505843,1513148-1513149,1526469,1533312,1536520,1539157,1539173,1540374,1552804,1555163,1558811,1561054-1561065,1561067-1561070,1561072-1561075,1561083,1561190-1561192,1561635,1561640,1561732,1562742,1562746,1564309,1564312,1568921,1574004,1577315,1577324,1577463,1578812-1578813,1586658,1586894,1586959,1588193,1588197,1589737-1589738,1589763,1589837,1589842,1589980,1590018,1590302,1590646,1590648,1590835,1590842,1590911,1593259,1593261,1593335,1593834,1594229,1595171,1595289,1597532,1600955,1600963,1600978,1600984,1601329-1601330,1601332,1601855,1608963,1609061,1609593,1617362,1617365,1617383,1617456,1623392,1624247,1626579,1627033,1632584,1637684,1637695,1640655-1640658,1641656,1641660,1641692,1641707-1641718,1641721-1641722,1642564,1642606,1643045,1643054,1643570,1644017,1648815,1656299,1658799,1658802,1659521,1663995,1664174,1665085,1666966,1666985,1668630,1669800,1676552,1681837-1681838,16
 81854,1685826,1687242,1689918,1693105,1694290,1694872,1696378,1701940,1710346,1712617,1712654,1713871,1713997,1714002,1715188,1715206,1716213-1716214,1716413,1716856,1716858,1716881-1716882,1716886,1716894,1720234,1720394,1720439,1720462,1721812,1721881,1722532,1722799,1723127
+/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,656018,666232,673796,673820,677910,683969,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,713953,714002,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,752323,753039,757335,757774,758249,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,770
 809,770876,772872,776921,776924,776935,776945,777464,777466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,783934,784453,784602,784614,785381,785688,785768,785859,786468,786487,786490,786496,786667,787627,787770,787985,789389,790405,791041,791184,791194,791224,791243,791326,791328,791789,792740,793372,793757,793882,793981,794082,794673,794822,795043,795152,795210,795457,795466,797168,797425,797596,797607,802727,802940,804462,804544,804734,805153,809131,809603,810916,810977,812125,812137,812432,813001,813013,813866,814180,814708,814876,815972,816252,817442,817822,819339,819361,820110,820132,820874,820954,821397,828196,828201,828210,828225,828759,830378-830379,830999,831106,831774,831785,831828,831850,831860,832214,832218,833121,833545,834047,835036,835336,836405,881396,881412,883130,883134,883146,883165,883177,883362,883565,884341,885038,885231,885241,885260,885901,885991,886019,888072,889363,889606,889716,890139,890265
 ,890349-890350,890417,891185-891187,891583,892198,892341,892415,892464,892555,892812,892814,892817,892843,892887,893321,893493,894580,894586,894805,894831,895013,895045,895057,895191,895392,895703,896370,896384,897380-897381,897776,898126,898256,898468,898527,898555,898558,898718,898836,898906,899284,899348,899420,899653,899769-899770,899783,899788,899792,899916,899918-899919,899935,899949,903916,905020,905151,905722,905728,905735,907311,907513,907538,907652,907819,907825,907864,908002,908721,908754,908759,909097,909206,909212,909525,909636,909869,909875,909887,910266,910370,910442,910471,910485,910974,915226,915737,915861,916097,916141,916157,916170,917598,917633,918093,918489,918594,918684,918787,918792,918799,918803,918885,919851,919914,920025,920055,920298,920449,920596,920824,920840,921444,922010,926716,927062,927621,928482,928695,928732,928798,931709,932357,932967,935105,935983,939491,939551,940064,941356,941463,943112,944409,944416,945231,945808,945835,945841,946686,948057,95
 0164,950596,950614,950851,950905,951615,953434,954435,955648,955655,956832,957130,957830,958192,960701,961948,962865,962872,962881,962900,963106,963865,963868,964614,966177-966178,966292,966692,966863,981815,988448,991837,993042,1001955,1002185,1002263,1002274,1002349,1002359,1002362,1002481,1002514,1003461,1003481,1003488,1003556,1003572,1003581,1003861,1004393,1004409,1004415,1004868-1004869,1004912,1005452,1005467,1005647,1005802,1022120,1022134,1022323,1022415,1022606,1022623,1024224,1024251,1026042,1026784,1026912,1026920,1029767,1033415,1033448,1033842,1033897,1037715,1037794,1037887,1037924,1038041,1041892,1042022,1042029,1042447,1042452,1042494,1043983,1044944,1044987,1049264,1050249,1055055,1055236,1055458,1055975,1056264,1056828,1056889,1059881,1060486,1061412,1061442,1061446,1061503,1062398,1064652,1066244,1066772,1067039,1067139,1069824,1070139,1070420,1070609,1072042,1073184,1073393,1075458,1076212,1078409,1078412,1079801,1081118,1081334,1088179,1088460,1090022,1094069,
 1094089,1095138,1097899,1099575,1099586,1099772,1099789,1100145,1100822,1101094,1101144,1124680,1130774,1133014,1137862,1137996,1138950,1138953,1139280,1140693,1141104,1141441,1142043,1142904,1143134,1143150,1145137,1148216,1148471,1152601,1156171,1156519,1164567,1167394,1172233-1172234,1172236,1173614,1174353,1174882,1174884,1175158,1175190,1176799,1177125,1177245,1177850,1177862,1178228,1178233,1178684,1181028,1181136,1184917,1184919,1185200,1185588,1186011,1186104,1186123,1186137,1186153,1186378,1186712,1186763,1186949,1187381,1189240,1189386,1190388-1190389,1190474,1198622,1201576,1203091,1224801,1233426,1243034,1243038,1244567,1298140,1298628-1298629,1304468,1311997,1331766,1333161,1333173,1342498,1342503,1348425,1348461-1348495,1348989,1350294,1351056,1351636-1351640,1352011,1354685,1354847,1354856,1356125,1359981,1371283,1409007,1413552,1413556,1413562,1417282,1430079,1430481,1430567,1435606,1435636,1435642,1438411,1439054,1441348,1446640,1446650,1447012,1453105,1453112,14566
 66-1456678,1456713,1456721,1457968,1460342,1460533,1484862,1486875,1492570,1494143,1500062,1503851,1505843,1513148-1513149,1526469,1533312,1536520,1539157,1539173,1540374,1552804,1555163,1558811,1561054-1561065,1561067-1561070,1561072-1561075,1561083,1561190-1561192,1561635,1561640,1561732,1562742,1562746,1564309,1564312,1568921,1574004,1577315,1577324,1577463,1578812-1578813,1586658,1586894,1586959,1588193,1588197,1589737-1589738,1589763,1589837,1589842,1589980,1590018,1590302,1590646,1590648,1590835,1590842,1590911,1593259,1593261,1593335,1593834,1594229,1595171,1595289,1597532,1600955,1600963,1600978,1600984,1601329-1601330,1601332,1601855,1608963,1609061,1609593,1617362,1617365,1617383,1617456,1623392,1624247,1626579,1627033,1632584,1637684,1637695,1640655-1640658,1641656,1641660,1641692,1641707-1641718,1641721-1641722,1642564,1642606,1643045,1643054,1643570,1644017,1648815,1656299,1658799,1658802,1659521,1663995,1664174,1665085,1666966,1666985,1668630,1669800,1676552,1681837-16
 81838,1681854,1685826,1687242,1689918,1693105,1694290,1694872,1696378,1701940,1710346,1712617,1712654,1713871,1713997,1714002,1715188,1715206,1716213-1716214,1716413,1716856,1716858,1716881-1716882,1716886,1716894,1720234,1720394,1720439,1720462,1721812,1721881,1722532,1722799,1723127

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/BRANCH-README.txt
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/BRANCH-README.txt?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/BRANCH-README.txt (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/BRANCH-README.txt Thu Jan  7 15:13:37 2016
@@ -5,7 +5,7 @@ Currently this serves as a proof a conce
 I expect to cherry-pick some or all of the features back to tc6.0.x/trunk.
 
 Created: 2016-01-06 from r1723242.
-Last catch-up merge: None yet.
+Last catch-up merge: 2016-01-07, merged up to r1723551.
 
 
 Current status / Completed:

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/Connector.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/Connector.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/Connector.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/Connector.java Thu Jan  7 15:13:37 2016
@@ -146,7 +146,7 @@ public class Connector
     /**
      * The port number on which we listen for requests.
      */
-    protected int port = 0;
+    protected int port = -1;
 
 
     /**
@@ -659,7 +659,9 @@ public class Connector
     }
 
     /**
-     * Return the port number on which we listen for requests.
+     * Return the port number on which this connector is configured to listen
+     * for requests. The special value of 0 means select a random free port
+     * when the socket is bound.
      */
     public int getPort() {
 
@@ -682,6 +684,16 @@ public class Connector
 
 
     /**
+     * Return the port number on which this connector is listening to requests.
+     * If the special value for {@link #port} of zero is used then this method
+     * will report the actual port bound.
+     */
+    public int getLocalPort() {
+        return ((Integer) getProperty("localPort")).intValue();
+    }
+
+
+    /**
      * Return the Coyote protocol handler in use.
      */
     public String getProtocol() {
@@ -1067,7 +1079,13 @@ public class Connector
         sb.append(":type=");
         sb.append(type);
         sb.append(",port=");
-        sb.append(getPort());
+        int port = getPort();
+        if (port > 0) {
+            sb.append(port);
+        } else {
+            sb.append("auto-");
+            sb.append(getProperty("nameIndex"));
+        }
         if (addressObj != null) {
             String address = addressObj.toString();
             if (address.length() > 0) {
@@ -1192,6 +1210,12 @@ public class Connector
                      ("coyoteConnector.cannotRegisterProtocol"));
         }
 
+        // Validate settings before starting
+        if (getPort() < 0) {
+            throw new LifecycleException(sm.getString(
+                    "coyoteConnector.invalidPort", String.valueOf(getPort())));
+        }
+
         try {
             protocolHandler.start();
         } catch (Exception e) {
@@ -1378,7 +1402,13 @@ public class Connector
         StringBuilder sb = new StringBuilder("Connector[");
         sb.append(getProtocol());
         sb.append('-');
-        sb.append(getPort());
+        int port = getPort();
+        if (port > 0) {
+            sb.append(port);
+        } else {
+            sb.append("auto-");
+            sb.append(getProperty("nameIndex"));
+        }
         sb.append(']');
         return sb.toString();
     }

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/LocalStrings.properties?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/LocalStrings.properties (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/LocalStrings.properties Thu Jan  7 15:13:37 2016
@@ -20,6 +20,7 @@
 coyoteConnector.alreadyInitialized=The connector has already been initialized
 coyoteConnector.alreadyStarted=The connector has already been started
 coyoteConnector.cannotRegisterProtocol=Cannot register MBean for the Protocol
+coyoteConnector.invalidPort=The connector cannot start since the specified port value of [{0}] is invalid
 coyoteConnector.notStarted=Coyote connector has not been started
 coyoteConnector.protocolHandlerDestroyFailed=Protocol handler destroy failed: {0}
 coyoteConnector.protocolHandlerInitializationFailed=Protocol handler initialization failed: {0}

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/mbeans-descriptors.xml
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/mbeans-descriptors.xml?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/mbeans-descriptors.xml (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/catalina/connector/mbeans-descriptors.xml Thu Jan  7 15:13:37 2016
@@ -110,6 +110,11 @@
           description="Alias name of this connector's keypair and supporting certificate chain"
                  type="java.lang.String"/>
 
+    <attribute   name="localPort"
+          description="The port number on which this connector is listening to requests. If the special value for port of zero is used then this method will report the actual port bound."
+                 type="int"
+            writeable="false"/>
+
     <attribute   name="maxHeaderCount"
           description="The maximum number of headers that are allowed by the container. 100 by default. A value of less than 0 means no limit."
                  type="int"/>
@@ -143,7 +148,7 @@
                  type="int"/>
 
     <attribute   name="port"
-          description="The port number on which we listen for ajp13 requests"
+          description="The port number on which this connector is configured to listen for requests. The special value of 0 means select a random free port when the socket is bound."
                 type="int"/>
 
     <attribute   name="protocol"

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/AbstractProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/AbstractProtocol.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/AbstractProtocol.java Thu Jan  7 15:13:37 2016
@@ -16,10 +16,28 @@
  */
 package org.apache.coyote;
 
+import java.net.InetAddress;
+import java.net.URLEncoder;
+import java.util.concurrent.atomic.AtomicInteger;
+
 import org.apache.tomcat.util.net.AbstractEndpoint;
 
 public abstract class AbstractProtocol implements ProtocolHandler {
 
+    /**
+     * Counter used to generate unique JMX names for connectors using automatic
+     * port binding.
+     */
+    private static final AtomicInteger nameCounter = new AtomicInteger(0);
+
+    /**
+     * Unique ID for this connector. Only used if the connector is configured
+     * to use a random port as the port will change if stop(), start() is
+     * called.
+     */
+    private int nameIndex = 0;
+
+
     protected abstract AbstractEndpoint getEndpoint();
 
     public int getMaxHeaderCount() {
@@ -28,4 +46,47 @@ public abstract class AbstractProtocol i
     public void setMaxHeaderCount(int maxHeaderCount) {
         getEndpoint().setMaxHeaderCount(maxHeaderCount);
     }
+
+    public int getLocalPort() {
+        return getEndpoint().getLocalPort();
+    }
+
+    public synchronized int getNameIndex() {
+        if (nameIndex == 0) {
+            nameIndex = nextNameIndex();
+        }
+        return nameIndex;
+    }
+
+    public static int nextNameIndex() {
+        return nameCounter.incrementAndGet();
+    }
+
+    /**
+     * An utility method, used to implement getName() in subclasses.
+     */
+    protected String createName(String prefix, InetAddress address, int port) {
+        StringBuilder name = new StringBuilder(prefix);
+        name.append('-');
+        if (address != null) {
+            String strAddr = address.toString();
+            if (strAddr.startsWith("/")) {
+                strAddr = strAddr.substring(1);
+            }
+            name.append(URLEncoder.encode(strAddr)).append('-');
+        }
+        if (port == 0) {
+            // Auto binding is in use. Check if port is known
+            name.append("auto-");
+            name.append(getNameIndex());
+            port = getLocalPort();
+            if (port != -1) {
+                name.append('-');
+                name.append(port);
+            }
+        } else {
+            name.append(port);
+        }
+        return name.toString();
+    }
 }

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/ajp/AjpAprProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/ajp/AjpAprProtocol.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/ajp/AjpAprProtocol.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/ajp/AjpAprProtocol.java Thu Jan  7 15:13:37 2016
@@ -232,14 +232,7 @@ public class AjpAprProtocol extends Abst
 
     // *
     public String getName() {
-        String encodedAddr = "";
-        if (getAddress() != null) {
-            encodedAddr = "" + getAddress();
-            if (encodedAddr.startsWith("/"))
-                encodedAddr = encodedAddr.substring(1);
-            encodedAddr = URLEncoder.encode(encodedAddr) + "-";
-        }
-        return ("ajp-" + encodedAddr + endpoint.getPort());
+        return createName("ajp", getAddress(), endpoint.getPort());
     }
 
     /**

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/ajp/AjpProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/ajp/AjpProtocol.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/ajp/AjpProtocol.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/ajp/AjpProtocol.java Thu Jan  7 15:13:37 2016
@@ -231,14 +231,7 @@ public class AjpProtocol extends Abstrac
 
     // *
     public String getName() {
-        String encodedAddr = "";
-        if (getAddress() != null) {
-            encodedAddr = "" + getAddress();
-            if (encodedAddr.startsWith("/"))
-                encodedAddr = encodedAddr.substring(1);
-            encodedAddr = URLEncoder.encode(encodedAddr) + "-";
-        }
-        return ("ajp-" + encodedAddr + endpoint.getPort());
+        return createName("ajp", getAddress(), endpoint.getPort());
     }
 
     /**

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11AprProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11AprProtocol.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11AprProtocol.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11AprProtocol.java Thu Jan  7 15:13:37 2016
@@ -178,14 +178,7 @@ public class Http11AprProtocol extends A
     }
 
     public String getName() {
-        String encodedAddr = "";
-        if (getAddress() != null) {
-            encodedAddr = "" + getAddress();
-            if (encodedAddr.startsWith("/"))
-                encodedAddr = encodedAddr.substring(1);
-            encodedAddr = URLEncoder.encode(encodedAddr) + "-";
-        }
-        return ("http-" + encodedAddr + endpoint.getPort());
+        return createName("http", getAddress(), endpoint.getPort());
     }
 
     protected AprEndpoint endpoint=new AprEndpoint();

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11NioProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11NioProtocol.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11NioProtocol.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11NioProtocol.java Thu Jan  7 15:13:37 2016
@@ -346,14 +346,7 @@ public class Http11NioProtocol extends A
     }
 
     public String getName() {
-        String encodedAddr = "";
-        if (getAddress() != null) {
-            encodedAddr = "" + getAddress();
-            if (encodedAddr.startsWith("/"))
-                encodedAddr = encodedAddr.substring(1);
-            encodedAddr = URLEncoder.encode(encodedAddr) + "-";
-        }
-        return ("http-" + encodedAddr + ep.getPort());
+        return createName("http", getAddress(), ep.getPort());
     }
 
     public boolean getTcpNoDelay() {

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11Protocol.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11Protocol.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11Protocol.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/http11/Http11Protocol.java Thu Jan  7 15:13:37 2016
@@ -19,7 +19,6 @@ package org.apache.coyote.http11;
 
 import java.net.InetAddress;
 import java.net.Socket;
-import java.net.URLEncoder;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.concurrent.ConcurrentLinkedQueue;
@@ -248,14 +247,7 @@ public class Http11Protocol extends Abst
     }
 
     public String getName() {
-        String encodedAddr = "";
-        if (getAddress() != null) {
-            encodedAddr = "" + getAddress();
-            if (encodedAddr.startsWith("/"))
-                encodedAddr = encodedAddr.substring(1);
-            encodedAddr = URLEncoder.encode(encodedAddr) + "-";
-        }
-        return ("http-" + encodedAddr + endpoint.getPort());
+        return createName("http", getAddress(), endpoint.getPort());
     }
 
     // ------------------------------------------------------------- Properties

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/memory/MemoryProtocolHandler.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/memory/MemoryProtocolHandler.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/memory/MemoryProtocolHandler.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/coyote/memory/MemoryProtocolHandler.java Thu Jan  7 15:13:37 2016
@@ -19,14 +19,15 @@ package org.apache.coyote.memory;
 
 import java.io.IOException;
 import java.util.Iterator;
-import org.apache.tomcat.util.buf.ByteChunk;
 
+import org.apache.coyote.AbstractProtocol;
 import org.apache.coyote.Adapter;
 import org.apache.coyote.InputBuffer;
 import org.apache.coyote.OutputBuffer;
 import org.apache.coyote.ProtocolHandler;
 import org.apache.coyote.Request;
 import org.apache.coyote.Response;
+import org.apache.tomcat.util.buf.ByteChunk;
 
 
 /**
@@ -70,6 +71,20 @@ public class MemoryProtocolHandler
         return (adapter);
     }
 
+    /**
+     * Unique ID for this connector.
+     */
+    private int nameIndex = 0;
+
+    public synchronized int getNameIndex() {
+        if (nameIndex == 0) {
+            nameIndex = AbstractProtocol.nextNameIndex();
+        }
+
+        return nameIndex;
+    }
+
+    public int getLocalPort() { return -1; }
 
     // ------------------------------------------------ ProtocolHandler Methods
 

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/common/ChannelNioSocket.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/common/ChannelNioSocket.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/common/ChannelNioSocket.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/common/ChannelNioSocket.java Thu Jan  7 15:13:37 2016
@@ -378,40 +378,61 @@ public class ChannelNioSocket extends Jk
      */
     public void init() throws IOException {
         // Find a port.
-        if (startPort == 0) {
+        if (startPort < 0) {
             port = 0;
             if(log.isInfoEnabled())
                 log.info("JK: ajp13 disabling channelNioSocket");
             running = true;
             return;
         }
-        int endPort = maxPort;
-        if (endPort < startPort)
-            endPort = startPort;
         ServerSocketChannel ssc = ServerSocketChannel.open();
         ssc.configureBlocking(false);
-        for( int i=startPort; i<=endPort; i++ ) {
+
+        if (startPort == 0) {
+            // Let operating system to choose a random free port
             try {
                 InetSocketAddress iddr = null;
                 if( inet == null ) {
-                    iddr = new InetSocketAddress( i);
+                    iddr = new InetSocketAddress(0);
                 } else {
-                    iddr=new InetSocketAddress( inet, i);
+                    iddr=new InetSocketAddress(inet, 0);
                 }
                 sSocket = ssc.socket();
                 sSocket.bind(iddr);
-                port=i;
-                break;
             } catch( IOException ex ) {
-                if(log.isInfoEnabled())
-                    log.info("Port busy " + i + " " + ex.toString());
+                log.error("Can't find free port", ex);
                 sSocket = null;
+                return;
             }
-        }
 
-        if( sSocket==null ) {
-            log.error("Can't find free port " + startPort + " " + endPort );
-            return;
+            port = sSocket.getLocalPort();
+        } else {
+            int endPort = maxPort;
+            if (endPort < startPort)
+                endPort = startPort;
+            for( int i=startPort; i<=endPort; i++ ) {
+                try {
+                    InetSocketAddress iddr = null;
+                    if( inet == null ) {
+                        iddr = new InetSocketAddress( i);
+                    } else {
+                        iddr=new InetSocketAddress( inet, i);
+                    }
+                    sSocket = ssc.socket();
+                    sSocket.bind(iddr);
+                    port=i;
+                    break;
+                } catch( IOException ex ) {
+                    if(log.isInfoEnabled())
+                        log.info("Port busy " + i + " " + ex.toString());
+                    sSocket = null;
+                }
+            }
+    
+            if( sSocket==null ) {
+                log.error("Can't find free port " + startPort + " " + endPort );
+                return;
+            }
         }
         if(log.isInfoEnabled())
             log.info("JK: ajp13 listening on " + getAddress() + ":" + port );

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/common/ChannelSocket.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/common/ChannelSocket.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/common/ChannelSocket.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/common/ChannelSocket.java Thu Jan  7 15:13:37 2016
@@ -55,7 +55,7 @@ import org.apache.tomcat.util.threads.Th
  *
  * @author Costin Manolache
  * @author Bill Barker
- * jmx:mbean name="jk:service=ChannelNioSocket"
+ * jmx:mbean name="jk:service=ChannelSocket"
  *            description="Accept socket connections"
  * jmx:notification name="org.apache.coyote.INVOKE
  * jmx:notification-handler name="org.apache.jk.JK_SEND_PACKET
@@ -359,35 +359,52 @@ public class ChannelSocket extends JkHan
      */
     public void init() throws IOException {
         // Find a port.
-        if (startPort == 0) {
+        if (startPort < 0) {
             port = 0;
             if(log.isInfoEnabled())
                 log.info("JK: ajp13 disabling channelSocket");
             running = true;
             return;
         }
-        int endPort = maxPort;
-        if (endPort < startPort)
-            endPort = startPort;
-        for( int i=startPort; i<=endPort; i++ ) {
+        if (startPort == 0) {
+            // Let operating system to choose a random free port
             try {
                 if( inet == null ) {
-                    sSocket = new ServerSocket( i, backlog );
+                    sSocket = new ServerSocket( 0, backlog );
                 } else {
-                    sSocket=new ServerSocket( i, backlog, inet );
+                    sSocket=new ServerSocket( 0, backlog, inet );
                 }
-                port=i;
-                break;
             } catch( IOException ex ) {
-                if(log.isInfoEnabled())
-                    log.info("Port busy " + i + " " + ex.toString());
-                continue;
+                log.error("Can't find free port", ex);
+                sSocket = null;
+                return;
             }
-        }
 
-        if( sSocket==null ) {
-            log.error("Can't find free port " + startPort + " " + endPort );
-            return;
+            port = sSocket.getLocalPort();
+        } else {
+            int endPort = maxPort;
+            if (endPort < startPort)
+                endPort = startPort;
+            for( int i=startPort; i<=endPort; i++ ) {
+                try {
+                    if( inet == null ) {
+                        sSocket = new ServerSocket( i, backlog );
+                    } else {
+                        sSocket=new ServerSocket( i, backlog, inet );
+                    }
+                    port=i;
+                    break;
+                } catch( IOException ex ) {
+                    if(log.isInfoEnabled())
+                        log.info("Port busy " + i + " " + ex.toString());
+                    continue;
+                }
+            }
+
+            if( sSocket==null ) {
+                log.error("Can't find free port " + startPort + " " + endPort );
+                return;
+            }
         }
         if(log.isInfoEnabled())
             log.info("JK: ajp13 listening on " + getAddress() + ":" + port );

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/server/JkCoyoteHandler.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/server/JkCoyoteHandler.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/server/JkCoyoteHandler.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/jk/server/JkCoyoteHandler.java Thu Jan  7 15:13:37 2016
@@ -23,15 +23,19 @@ import java.util.Iterator;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
+import org.apache.coyote.AbstractProtocol;
 import org.apache.coyote.Adapter;
 import org.apache.coyote.ProtocolHandler;
 import org.apache.coyote.Request;
 import org.apache.coyote.Response;
 import org.apache.coyote.RequestInfo;
 import org.apache.coyote.Constants;
+import org.apache.jk.common.ChannelNioSocket;
+import org.apache.jk.common.ChannelSocket;
 import org.apache.jk.core.JkHandler;
 import org.apache.jk.core.Msg;
 import org.apache.jk.core.MsgContext;
+import org.apache.jk.core.WorkerEnv;
 import org.apache.tomcat.util.modeler.Registry;
 
 /** Plugs Jk into Coyote. Must be named "type=JkHandler,name=container"
@@ -44,6 +48,35 @@ public class JkCoyoteHandler extends JkH
         = org.apache.juli.logging.LogFactory.getLog(JkCoyoteHandler.class);
     // Set debug on this logger to see the container request time
 
+    /**
+     * Unique ID for this connector. Only used if the connector is configured
+     * to use a random port as the port will change if stop(), start() is
+     * called.
+     */
+    private int nameIndex = 0;
+
+    public synchronized int getNameIndex() {
+        if (nameIndex == 0) {
+            nameIndex = AbstractProtocol.nextNameIndex();
+        }
+
+        return nameIndex;
+    }
+
+    public int getLocalPort() {
+        WorkerEnv wEnv = getJkMain().getWorkerEnv();
+        for( int i=0; i<wEnv.getHandlerCount(); i++ ) {
+            JkHandler w = wEnv.getHandler(i);
+            if( w instanceof ChannelSocket ) {
+                return ((ChannelSocket) w).getPort();
+            }
+            if( w instanceof ChannelNioSocket ) {
+                return ((ChannelNioSocket) w).getPort();
+            }
+        }
+        return -1;
+    }
+
     // ----------------------------------------------------------- DoPrivileged
     private boolean paused = false;
     int epNote;

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/AbstractEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/AbstractEndpoint.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/AbstractEndpoint.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/AbstractEndpoint.java Thu Jan  7 15:13:37 2016
@@ -16,7 +16,7 @@
  */
 package org.apache.tomcat.util.net;
 
-public class AbstractEndpoint {
+public abstract class AbstractEndpoint {
 
     /**
      * The maximum number of headers in a request that are allowed.
@@ -30,4 +30,6 @@ public class AbstractEndpoint {
         this.maxHeaderCount = maxHeaderCount;
     }
 
+    public abstract int getLocalPort();
+
 }

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/AprEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/AprEndpoint.java Thu Jan  7 15:13:37 2016
@@ -36,6 +36,7 @@ import org.apache.tomcat.jni.Pool;
 import org.apache.tomcat.jni.SSL;
 import org.apache.tomcat.jni.SSLContext;
 import org.apache.tomcat.jni.SSLSocket;
+import org.apache.tomcat.jni.Sockaddr;
 import org.apache.tomcat.jni.Socket;
 import org.apache.tomcat.jni.Status;
 import org.apache.tomcat.util.res.StringManager;
@@ -517,8 +518,6 @@ public class AprEndpoint extends Abstrac
     public void setSSLVerifyDepth(int SSLVerifyDepth) { this.SSLVerifyDepth = SSLVerifyDepth; }
 
 
-    // --------------------------------------------------------- Public Methods
-
     protected boolean SSLHonorCipherOrder = false;
     /**
      * Set to <code>true</code> to enforce the <i>server's</i> cipher order
@@ -542,6 +541,30 @@ public class AprEndpoint extends Abstrac
     public void setSSLDisableCompression(boolean SSLDisableCompression) { this.SSLDisableCompression = SSLDisableCompression; }
     public boolean getSSLDisableCompression() { return SSLDisableCompression; }
 
+
+    /**
+     * Port in use.
+     */
+    @Override
+    public int getLocalPort() {
+        long s = serverSock;
+        if (s == 0) {
+            return -1;
+        } else {
+            long sa;
+            try {
+                sa = Address.get(Socket.APR_LOCAL, s);
+                Sockaddr addr = Address.getInfo(sa);
+                return addr.port;
+            } catch (Exception e) {
+                return -1;
+            }
+        }
+    }
+
+
+    // --------------------------------------------------------- Public Methods
+
     /**
      * Number of keepalive sockets.
      */
@@ -1036,9 +1059,9 @@ public class AprEndpoint extends Abstrac
         try {
             // Need to create a connection to unlock the accept();
             if (address == null) {
-                saddr = new InetSocketAddress("localhost", port);
+                saddr = new InetSocketAddress("localhost", getLocalPort());
             } else {
-                saddr = new InetSocketAddress(address,port);
+                saddr = new InetSocketAddress(address, getLocalPort());
             }
             s = new java.net.Socket();
             s.setSoTimeout(soTimeout > 0 ? soTimeout : 60000);
@@ -1062,7 +1085,7 @@ public class AprEndpoint extends Abstrac
             }
         } catch(Exception e) {
             if (log.isDebugEnabled()) {
-                log.debug(sm.getString("endpoint.debug.unlock", "" + port), e);
+                log.debug(sm.getString("endpoint.debug.unlock", "" + getLocalPort()), e);
             }
         } finally {
             if (s != null) {
@@ -1137,7 +1160,7 @@ public class AprEndpoint extends Abstrac
                 if (curThreadsBusy == maxThreads) {
                     log.info(sm.getString("endpoint.info.maxThreads",
                             Integer.toString(maxThreads), address,
-                            Integer.toString(port)));
+                            Integer.toString(getLocalPort())));
                 }
                 return (newWorkerThread());
             } else {

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/JIoEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/JIoEndpoint.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/JIoEndpoint.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/JIoEndpoint.java Thu Jan  7 15:13:37 2016
@@ -271,7 +271,21 @@ public class JIoEndpoint extends Abstrac
         this.unlockTimeout = unlockTimeout;
     }
 
-    
+
+    /**
+     * Port in use.
+     */
+    @Override
+    public int getLocalPort() {
+        ServerSocket s = serverSocket;
+        if (s == null) {
+            return -1;
+        } else {
+            return s.getLocalPort();
+        }
+    }
+
+
     public boolean isRunning() {
         return running;
     }
@@ -632,9 +646,9 @@ public class JIoEndpoint extends Abstrac
         try {
             // Need to create a connection to unlock the accept();
             if (address == null) {
-                saddr = new InetSocketAddress("localhost", port);
+                saddr = new InetSocketAddress("localhost", getLocalPort());
             } else {
-                saddr = new InetSocketAddress(address,port);
+                saddr = new InetSocketAddress(address, getLocalPort());
             }
             s = new java.net.Socket();
             s.setSoTimeout(soTimeout);
@@ -648,7 +662,8 @@ public class JIoEndpoint extends Abstrac
             } 
         } catch (Exception e) {
             if (log.isDebugEnabled()) {
-                log.debug(sm.getString("endpoint.debug.unlock", "" + port), e);
+                log.debug(sm.getString("endpoint.debug.unlock",
+                        Integer.toString(getLocalPort())), e);
             }
         } finally {
             if (s != null) {
@@ -718,7 +733,7 @@ public class JIoEndpoint extends Abstrac
                 if (curThreadsBusy == maxThreads) {
                     log.info(sm.getString("endpoint.info.maxThreads",
                             Integer.toString(maxThreads), address,
-                            Integer.toString(port)));
+                            Integer.toString(getLocalPort())));
                 }
                 return (newWorkerThread());
             } else {

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/java/org/apache/tomcat/util/net/NioEndpoint.java Thu Jan  7 15:13:37 2016
@@ -22,6 +22,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
+import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketTimeoutException;
 import java.nio.ByteBuffer;
@@ -690,6 +691,26 @@ public class NioEndpoint extends Abstrac
     public SSLContext getSSLContext() { return sslContext;}
     public void setSSLContext(SSLContext c) { sslContext = c;}
 
+
+    /**
+     * Port in use.
+     */
+    @Override
+    public int getLocalPort() {
+        ServerSocketChannel ssc = serverSock;
+        if (ssc == null) {
+            return -1;
+        } else {
+            ServerSocket s = ssc.socket();
+            if (s == null) {
+                return -1;
+            } else {
+                return s.getLocalPort();
+            }
+        }
+    }
+
+
     // --------------------------------------------------------- OOM Parachute Methods
 
     protected void checkParachute() {
@@ -982,7 +1003,7 @@ public class NioEndpoint extends Abstrac
      */
     public void destroy() throws Exception {
         if (log.isDebugEnabled()) {
-            log.debug("Destroy initiated for "+new InetSocketAddress(address,port));
+            log.debug("Destroy initiated for "+new InetSocketAddress(address,getLocalPort()));
         }
         if (running) {
             stop();
@@ -996,7 +1017,7 @@ public class NioEndpoint extends Abstrac
         releaseCaches();
         selectorPool.close();
         if (log.isDebugEnabled()) {
-            log.debug("Destroy completed for "+new InetSocketAddress(address,port));
+            log.debug("Destroy completed for "+new InetSocketAddress(address,getLocalPort()));
         }
     }
 
@@ -1049,9 +1070,9 @@ public class NioEndpoint extends Abstrac
         try {
             // Need to create a connection to unlock the accept();
             if (address == null) {
-                 saddr = new InetSocketAddress("localhost", port);
+                 saddr = new InetSocketAddress("localhost", getLocalPort());
             } else {
-                 saddr = new InetSocketAddress(address,port);
+                 saddr = new InetSocketAddress(address, getLocalPort());
             }
             s = new java.net.Socket();
             s.setSoTimeout(getSocketProperties().getSoTimeout());
@@ -1065,7 +1086,8 @@ public class NioEndpoint extends Abstrac
             }
         } catch(Exception e) {
             if (log.isDebugEnabled()) {
-                log.debug(sm.getString("endpoint.debug.unlock", "" + port), e);
+                log.debug(sm.getString("endpoint.debug.unlock",
+                        Integer.toString(getLocalPort())), e);
             }
         } finally {
             if (s != null) {
@@ -1192,7 +1214,7 @@ public class NioEndpoint extends Abstrac
                 if (curThreadsBusy == maxThreads) {
                     log.info(sm.getString("endpoint.info.maxThreads",
                             Integer.toString(maxThreads), address,
-                            Integer.toString(port)));
+                            Integer.toString(getLocalPort())));
                 }
                 return (newWorkerThread());
             } else {

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/changelog.xml?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/changelog.xml (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/changelog.xml Thu Jan  7 15:13:37 2016
@@ -112,6 +112,15 @@
         implementation to ease future maintenance. (markt)
       </add>
       <fix>
+        <bug>51503</bug>: Add additional validation that prevents a connector
+        from starting if it does not have a valid port number. (kkolinko)
+      </fix>
+      <add>
+        <bug>52028</bug>: Add support for automatic binding to a free port by a
+        connector if the special value of zero is used for the port. This is
+        mainly useful in embedded and testing scenarios. (kkolinko)
+      </add>
+      <fix>
         <bug>52926</bug>: Avoid NPE when an NIO Comet connection times out on
         one thread at the same time as it is closed on another thread.
         (markt/kkolinko)

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/config/ajp.xml
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/config/ajp.xml?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/config/ajp.xml (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/config/ajp.xml Thu Jan  7 15:13:37 2016
@@ -147,7 +147,10 @@
       <p>The TCP port number on which this <strong>Connector</strong>
       will create a server socket and await incoming connections.  Your
       operating system will allow only one server application to listen
-      to a particular port number on a particular IP address.</p>
+      to a particular port number on a particular IP address. If the special
+      value of 0 (zero) is used, then Tomcat will select a free port at random
+      to use for this connector. This is typically only useful in embedded and
+      testing applications.</p>
     </attribute>
 
     <attribute name="protocol" required="false">

Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/config/http.xml
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/config/http.xml?rev=1723572&r1=1723571&r2=1723572&view=diff
==============================================================================
--- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/config/http.xml (original)
+++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/webapps/docs/config/http.xml Thu Jan  7 15:13:37 2016
@@ -154,7 +154,10 @@
       <p>The TCP port number on which this <strong>Connector</strong>
       will create a server socket and await incoming connections.  Your
       operating system will allow only one server application to listen
-      to a particular port number on a particular IP address.</p>
+      to a particular port number on a particular IP address. If the special
+      value of 0 (zero) is used, then Tomcat will select a free port at random
+      to use for this connector. This is typically only useful in embedded and
+      testing applications.</p>
     </attribute>
 
     <attribute name="protocol" required="false">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org