diff --git a/docs/html/annotated.html b/docs/html/annotated.html new file mode 100644 index 0000000..e3ef0b2 --- /dev/null +++ b/docs/html/annotated.html @@ -0,0 +1,108 @@ + + + + + + +LiteSpeed QUIC Library: Data Structures + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Data Structures
+
+
+
Here are the data structures with brief descriptions:
+ + + + + + + + + +
 Clsquic_engine_api
 Clsquic_engine_settings
 Clsquic_http_header
 Clsquic_http_headers
 Clsquic_logger_if
 Clsquic_out_spec
 Clsquic_packout_mem_if
 Clsquic_stream_ifThe definition of callback functions call by lsquic_stream to process events
+
+
+ + + + diff --git a/docs/html/arrowdown.png b/docs/html/arrowdown.png new file mode 100644 index 0000000..0b63f6d Binary files /dev/null and b/docs/html/arrowdown.png differ diff --git a/docs/html/arrowright.png b/docs/html/arrowright.png new file mode 100644 index 0000000..c6ee22f Binary files /dev/null and b/docs/html/arrowright.png differ diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/docs/html/bc_s.png differ diff --git a/docs/html/bdwn.png b/docs/html/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/docs/html/bdwn.png differ diff --git a/docs/html/classes.html b/docs/html/classes.html new file mode 100644 index 0000000..916391f --- /dev/null +++ b/docs/html/classes.html @@ -0,0 +1,105 @@ + + + + + + +LiteSpeed QUIC Library: Data Structure Index + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Data Structure Index
+
+
+
L
+ + + + + +
  l  
+
lsquic_engine_settings   lsquic_http_headers   lsquic_out_spec   lsquic_stream_if   
lsquic_http_header   lsquic_logger_if   lsquic_packout_mem_if   
lsquic_engine_api   
+
L
+
+ + + + diff --git a/docs/html/closed.png b/docs/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/docs/html/closed.png differ diff --git a/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html b/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..05d9650 --- /dev/null +++ b/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,107 @@ + + + + + + +LiteSpeed QUIC Library: include Directory Reference + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
include Directory Reference
+
+
+ + + + + + +

+Files

file  lsquic.h [code]
 
file  lsquic_types.h [code]
 
+
+ + + + diff --git a/docs/html/doc.png b/docs/html/doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/docs/html/doc.png differ diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css new file mode 100644 index 0000000..1425ec5 --- /dev/null +++ b/docs/html/doxygen.css @@ -0,0 +1,1475 @@ +/* The standard CSS for doxygen 1.8.11 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/docs/html/doxygen.png b/docs/html/doxygen.png new file mode 100644 index 0000000..3ff17d8 Binary files /dev/null and b/docs/html/doxygen.png differ diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js new file mode 100644 index 0000000..85e1836 --- /dev/null +++ b/docs/html/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + +LiteSpeed QUIC Library: File List + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 12]
+ + + +
  include
 lsquic.h
 lsquic_types.h
+
+
+ + + + diff --git a/docs/html/folderclosed.png b/docs/html/folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/docs/html/folderclosed.png differ diff --git a/docs/html/folderopen.png b/docs/html/folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/docs/html/folderopen.png differ diff --git a/docs/html/functions.html b/docs/html/functions.html new file mode 100644 index 0000000..4783edb --- /dev/null +++ b/docs/html/functions.html @@ -0,0 +1,172 @@ + + + + + + +LiteSpeed QUIC Library: Data Fields + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+
+ + + + diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html new file mode 100644 index 0000000..35bd4c4 --- /dev/null +++ b/docs/html/functions_vars.html @@ -0,0 +1,172 @@ + + + + + + +LiteSpeed QUIC Library: Data Fields - Variables + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/html/globals.html b/docs/html/globals.html new file mode 100644 index 0000000..cbc7656 --- /dev/null +++ b/docs/html/globals.html @@ -0,0 +1,350 @@ + + + + + + +LiteSpeed QUIC Library: Globals + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- l -

+
+ + + + diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html new file mode 100644 index 0000000..48ccb57 --- /dev/null +++ b/docs/html/globals_defs.html @@ -0,0 +1,154 @@ + + + + + + +LiteSpeed QUIC Library: Globals + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/html/globals_enum.html b/docs/html/globals_enum.html new file mode 100644 index 0000000..2f1e88f --- /dev/null +++ b/docs/html/globals_enum.html @@ -0,0 +1,109 @@ + + + + + + +LiteSpeed QUIC Library: Globals + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/html/globals_eval.html b/docs/html/globals_eval.html new file mode 100644 index 0000000..0dbf589 --- /dev/null +++ b/docs/html/globals_eval.html @@ -0,0 +1,133 @@ + + + + + + +LiteSpeed QUIC Library: Globals + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/html/globals_func.html b/docs/html/globals_func.html new file mode 100644 index 0000000..a76c1c4 --- /dev/null +++ b/docs/html/globals_func.html @@ -0,0 +1,236 @@ + + + + + + +LiteSpeed QUIC Library: Globals + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- l -

+
+ + + + diff --git a/docs/html/globals_type.html b/docs/html/globals_type.html new file mode 100644 index 0000000..f8fc9c3 --- /dev/null +++ b/docs/html/globals_type.html @@ -0,0 +1,130 @@ + + + + + + +LiteSpeed QUIC Library: Globals + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html new file mode 100644 index 0000000..ee81052 --- /dev/null +++ b/docs/html/graph_legend.html @@ -0,0 +1,118 @@ + + + + + + +LiteSpeed QUIC Library: Graph Legend + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + +
+ +
+
+ + +
+ +
+ +
+
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

1 /*! Invisible class because of truncation */
2 class Invisible { };
3 
4 /*! Truncated class, inheritance relation is hidden */
5 class Truncated : public Invisible { };
6 
7 /* Class not documented with doxygen comments */
8 class Undocumented { };
9 
10 /*! Class that is inherited using public inheritance */
11 class PublicBase : public Truncated { };
12 
13 /*! A template class */
14 template<class T> class Templ { };
15 
16 /*! Class that is inherited using protected inheritance */
17 class ProtectedBase { };
18 
19 /*! Class that is inherited using private inheritance */
20 class PrivateBase { };
21 
22 /*! Class that is used by the Inherited class */
23 class Used { };
24 
25 /*! Super class that inherits a number of other classes */
26 class Inherited : public PublicBase,
27  protected ProtectedBase,
28  private PrivateBase,
29  public Undocumented,
30  public Templ<int>
31 {
32  private:
33  Used *m_usedClass;
34 };

This will result in the following graph:

+
+ +
+

The boxes in the above graph have the following meaning:

+ +

The arrows have the following meaning:

+ +
+ + + + diff --git a/docs/html/graph_legend.md5 b/docs/html/graph_legend.md5 new file mode 100644 index 0000000..a06ed05 --- /dev/null +++ b/docs/html/graph_legend.md5 @@ -0,0 +1 @@ +387ff8eb65306fa251338d3c9bd7bfff \ No newline at end of file diff --git a/docs/html/graph_legend.png b/docs/html/graph_legend.png new file mode 100644 index 0000000..37f264e Binary files /dev/null and b/docs/html/graph_legend.png differ diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100644 index 0000000..f78409b --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,89 @@ + + + + + + +LiteSpeed QUIC Library: Main Page + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + +
+ +
+
+ + +
+ +
+ +
+
+
LiteSpeed QUIC Library Documentation
+
+
+
+ + + + diff --git a/docs/html/jquery.js b/docs/html/jquery.js new file mode 100644 index 0000000..d52a1c7 --- /dev/null +++ b/docs/html/jquery.js @@ -0,0 +1,68 @@ +/* + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/* + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/* + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/* + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/* + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/* + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + + + +
+ +
+
lsquic.h File Reference
+
+
+
#include <stdarg.h>
+#include <lsquic_types.h>
+#include <sys/uio.h>
+#include <sys/types.h>
+#include <time.h>
+
+Include dependency graph for lsquic.h:
+
+
+ + + +
+
+

Go to the source code of this file.

+
+ + + + + + + + + + + + + + + + + + +

+Data Structures

struct  lsquic_stream_if
 The definition of callback functions call by lsquic_stream to process events. More...
 
struct  lsquic_engine_settings
 
struct  lsquic_out_spec
 
struct  lsquic_packout_mem_if
 
struct  lsquic_engine_api
 
struct  lsquic_http_header
 
struct  lsquic_http_headers
 
struct  lsquic_logger_if
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define LSENG_SERVER   (1 << 0)
 
#define LSENG_HTTP   (1 << 1)
 
+#define LSENG_HTTP_SERVER   (LSENG_SERVER|LSENG_HTTP)
 
#define LSQUIC_SUPPORTED_VERSIONS
 
+#define LSQUIC_EXPERIMENTAL_VERSIONS   ((1 << LSQVER_040))
 
#define LSQUIC_MIN_FCW   (16 * 1024)
 
#define LSQUIC_DF_VERSIONS
 
+#define LSQUIC_DF_CFCW_SERVER   (3 * 1024 * 1024 / 2)
 
+#define LSQUIC_DF_CFCW_CLIENT   (15 * 1024 * 1024)
 
+#define LSQUIC_DF_SFCW_SERVER   (1 * 1024 * 1024)
 
+#define LSQUIC_DF_SFCW_CLIENT   (6 * 1024 * 1024)
 
+#define LSQUIC_DF_MAX_STREAMS_IN   100
 
#define LSQUIC_DF_HANDSHAKE_TO   (10 * 1000 * 1000)
 
+#define LSQUIC_DF_IDLE_CONN_TO   (30 * 1000 * 1000)
 
+#define LSQUIC_DF_SILENT_CLOSE   1
 
#define LSQUIC_DF_MAX_HEADER_LIST_SIZE   0
 
#define LSQUIC_DF_UA   "LSQUIC"
 
+#define LSQUIC_DF_STTL   86400
 
+#define LSQUIC_DF_MAX_INCHOATE   (1 * 1000 * 1000)
 
+#define LSQUIC_DF_SUPPORT_SREJ_SERVER   1
 
+#define LSQUIC_DF_SUPPORT_SREJ_CLIENT   0 /* TODO: client support */
 
#define LSQUIC_DF_SUPPORT_NSTP   0
 
+#define LSQUIC_DF_SUPPORT_PUSH   1
 
+#define LSQUIC_DF_SUPPORT_TCID0   1
 
#define LSQUIC_DF_HONOR_PRST   0
 
#define LSQUIC_DF_PROGRESS_CHECK   1000
 
#define LSQUIC_DF_PENDRW_CHECK   10
 
#define LSQUIC_DF_RW_ONCE   0
 
#define LSQUIC_DF_PROC_TIME_THRESH   0
 
#define LSQUIC_DF_PACE_PACKETS   1
 
#define LSQUIC_GLOBAL_CLIENT   (1 << 0)
 
#define LSQUIC_GLOBAL_SERVER   (1 << 1)
 
+ + + + + + + + +

+Typedefs

typedef int(* lsquic_packets_out_f) (void *packets_out_ctx, const struct lsquic_out_spec *out_spec, unsigned n_packets_out)
 
+typedef struct lsquic_engine_api lsquic_engine_api_t
 
+typedef struct lsquic_http_header lsquic_http_header_t
 HTTP header structure. Contains header name and value.
 
+ + + + + +

+Enumerations

enum  lsquic_version {
+  LSQVER_035, +LSQVER_037, +LSQVER_038, +LSQVER_039, +
+  LSQVER_040, +N_LSQVER +
+ }
 
enum  lsquic_logger_timestamp_style {
+  LLTS_NONE, +LLTS_HHMMSSMS, +LLTS_YYYYMMDD_HHMMSSMS, +LLTS_CHROMELIKE, +
+  LLTS_HHMMSSUS, +N_LLTS +
+ }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+void lsquic_engine_init_settings (struct lsquic_engine_settings *, unsigned lsquic_engine_flags)
 
int lsquic_engine_check_settings (const struct lsquic_engine_settings *settings, unsigned lsquic_engine_flags, char *err_buf, size_t err_buf_sz)
 
lsquic_engine_tlsquic_engine_new (unsigned lsquic_engine_flags, const struct lsquic_engine_api *)
 
int lsquic_engine_connect (lsquic_engine_t *, const struct sockaddr *peer_sa, void *peer_ctx, const char *hostname, unsigned short max_packet_size)
 
int lsquic_engine_packet_in (lsquic_engine_t *, const unsigned char *packet_in_data, size_t packet_in_size, const struct sockaddr *sa_local, const struct sockaddr *sa_peer, void *peer_ctx)
 
void lsquic_engine_proc_all (lsquic_engine_t *engine)
 
void lsquic_engine_process_conns_with_incoming (lsquic_engine_t *)
 
void lsquic_engine_process_conns_to_tick (lsquic_engine_t *)
 
int lsquic_engine_has_pend_rw (lsquic_engine_t *)
 
void lsquic_engine_process_conns_with_pend_rw (lsquic_engine_t *)
 
int lsquic_engine_has_unsent_packets (lsquic_engine_t *engine)
 
void lsquic_engine_send_unsent_packets (lsquic_engine_t *engine)
 
+void lsquic_engine_destroy (lsquic_engine_t *)
 
+void lsquic_conn_make_stream (lsquic_conn_t *)
 
unsigned lsquic_conn_n_pending_streams (const lsquic_conn_t *)
 
unsigned lsquic_conn_cancel_pending_streams (lsquic_conn_t *, unsigned n)
 
void lsquic_conn_going_away (lsquic_conn_t *conn)
 
void lsquic_conn_close (lsquic_conn_t *conn)
 
+int lsquic_stream_wantread (lsquic_stream_t *s, int is_want)
 
+ssize_t lsquic_stream_read (lsquic_stream_t *s, void *buf, size_t len)
 
+ssize_t lsquic_stream_readv (lsquic_stream_t *s, const struct iovec *, int iovcnt)
 
+int lsquic_stream_wantwrite (lsquic_stream_t *s, int is_want)
 
size_t lsquic_stream_write_avail (const lsquic_stream_t *s)
 
ssize_t lsquic_stream_write (lsquic_stream_t *s, const void *buf, size_t len)
 
int lsquic_stream_write_file (lsquic_stream_t *s, const char *filename)
 
+ssize_t lsquic_stream_writev (lsquic_stream_t *s, const struct iovec *vec, int count)
 
int lsquic_stream_sendfile (lsquic_stream_t *s, int fdSrc, off_t off, size_t size)
 
+int lsquic_stream_flush (lsquic_stream_t *s)
 
+int lsquic_stream_send_headers (lsquic_stream_t *s, const lsquic_http_headers_t *h, int eos)
 
+int lsquic_conn_is_push_enabled (lsquic_conn_t *c)
 
int lsquic_stream_shutdown (lsquic_stream_t *s, int how)
 
+int lsquic_stream_close (lsquic_stream_t *s)
 
uint32_t lsquic_stream_id (const lsquic_stream_t *s)
 
lsquic_stream_ctx_tlsquic_stream_get_ctx (const lsquic_stream_t *s)
 
int lsquic_stream_is_pushed (const lsquic_stream_t *s)
 
int lsquic_stream_refuse_push (lsquic_stream_t *s)
 
int lsquic_stream_push_info (const lsquic_stream_t *, uint32_t *ref_stream_id, const char **headers, size_t *headers_sz)
 
unsigned lsquic_stream_priority (const lsquic_stream_t *s)
 
int lsquic_stream_set_priority (lsquic_stream_t *s, unsigned priority)
 
lsquic_conn_tlsquic_stream_conn (const lsquic_stream_t *s)
 
+lsquic_stream_tlsquic_conn_get_stream_by_id (lsquic_conn_t *c, uint32_t stream_id)
 
lsquic_cid_t lsquic_conn_id (const lsquic_conn_t *c)
 
+int lsquic_conn_get_sockaddr (const lsquic_conn_t *c, const struct sockaddr **local, const struct sockaddr **peer)
 
void lsquic_logger_init (const struct lsquic_logger_if *, void *logger_ctx, enum lsquic_logger_timestamp_style)
 
int lsquic_set_log_level (const char *log_level)
 
int lsquic_logger_lopt (const char *optarg)
 
unsigned lsquic_engine_quic_versions (const lsquic_engine_t *)
 
int lsquic_global_init (int flags)
 
void lsquic_global_cleanup (void)
 
enum lsquic_version lsquic_conn_quic_version (const lsquic_conn_t *c)
 
enum lsquic_version lsquic_str2ver (const char *str, size_t len)
 
lsquic_conn_ctx_tlsquic_conn_get_ctx (const lsquic_conn_t *c)
 
void * lsquic_conn_get_peer_ctx (const lsquic_conn_t *lconn)
 
void lsquic_conn_abort (lsquic_conn_t *c)
 
int lsquic_engine_earliest_adv_tick (lsquic_engine_t *engine, int *diff)
 
unsigned lsquic_engine_count_attq (lsquic_engine_t *engine, int from_now)
 
+

Detailed Description

+

public API for using liblsquic is defined in this file.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define LSENG_HTTP   (1 << 1)
+
+

Treat stream 3 as headers stream and, in general, behave like the regular QUIC.

+ +
+
+ +
+
+ + + + +
#define LSENG_SERVER   (1 << 0)
+
+

Engine flags:Server mode

+ +
+
+ +
+
+ + + + +
#define LSQUIC_DF_HANDSHAKE_TO   (10 * 1000 * 1000)
+
+

Default handshake timeout in microseconds.

+ +
+
+ +
+
+ + + + +
#define LSQUIC_DF_HONOR_PRST   0
+
+

By default, LSQUIC ignores Public Reset packets.

+ +
+
+ +
+
+ + + + +
#define LSQUIC_DF_MAX_HEADER_LIST_SIZE   0
+
+

Default value of maximum header list size. If set to non-zero value, SETTINGS_MAX_HEADER_LIST_SIZE will be sent to peer after handshake is completed (assuming the peer supports this setting frame type).

+ +
+
+ +
+
+ + + + +
#define LSQUIC_DF_PACE_PACKETS   1
+
+

By default, packets are paced

+ +
+
+ +
+
+ + + + +
#define LSQUIC_DF_PENDRW_CHECK   10
+
+

By default, Pending RW Queue infinite loop checks are turned on:

+ +
+
+ +
+
+ + + + +
#define LSQUIC_DF_PROC_TIME_THRESH   0
+
+

By default, the threshold is not enabled

+ +
+
+ +
+
+ + + + +
#define LSQUIC_DF_PROGRESS_CHECK   1000
+
+

By default, infinite loop checks are turned on

+ +
+
+ +
+
+ + + + +
#define LSQUIC_DF_RW_ONCE   0
+
+

By default, read/write events are dispatched in a loop

+ +
+
+ +
+
+ + + + +
#define LSQUIC_DF_SUPPORT_NSTP   0
+
+

Do not use NSTP by default

+ +
+
+ +
+
+ + + + +
#define LSQUIC_DF_UA   "LSQUIC"
+
+

Default value of UAID (user-agent ID).

+ +
+
+ +
+
+ + + + +
#define LSQUIC_DF_VERSIONS
+
+Value:
~LSQUIC_EXPERIMENTAL_VERSIONS)
#define LSQUIC_SUPPORTED_VERSIONS
Definition: lsquic.h:81
+

By default, experimental versions are not included.

+ +
+
+ +
+
+ + + + +
#define LSQUIC_GLOBAL_CLIENT   (1 << 0)
+
+

This is one of the flags that can be passed to lsquic_global_init. Use it to initialize LSQUIC for use in client mode.

+ +
+
+ +
+
+ + + + +
#define LSQUIC_GLOBAL_SERVER   (1 << 1)
+
+

This is one of the flags that can be passed to lsquic_global_init. Use it to initialize LSQUIC for use in server mode.

+ +
+
+ +
+
+ + + + +
#define LSQUIC_MIN_FCW   (16 * 1024)
+
+

Minimum flow control window is set to 16 KB for both client and server. This means we can send up to this amount of data before handshake gets completed.

+ +
+
+ +
+
+ + + + +
#define LSQUIC_SUPPORTED_VERSIONS
+
+Value:
((1 << LSQVER_035) | (1 << LSQVER_037) | \
(1 << LSQVER_038) | (1 << LSQVER_039) | (1 << LSQVER_040))
Definition: lsquic.h:54
+
Definition: lsquic.h:72
+
Definition: lsquic.h:67
+
Definition: lsquic.h:46
+
Definition: lsquic.h:60
+

We currently support versions 35, 37, 38, 39, and 40.

See also
lsquic_version
+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef int(* lsquic_packets_out_f) (void *packets_out_ctx, const struct lsquic_out_spec *out_spec, unsigned n_packets_out)
+
+

Returns number of packets successfully sent out or -1 on error. -1 should only be returned if no packets were sent out.

+ +
+
+

Enumeration Type Documentation

+ +
+
+

Enumerate timestamp styles supported by LSQUIC logger mechanism.

+ + + + + + +
Enumerator
LLTS_NONE  +

No timestamp is generated.

+
LLTS_HHMMSSMS  +

The timestamp consists of 24 hours, minutes, seconds, and milliseconds. Example: 13:43:46.671

+
LLTS_YYYYMMDD_HHMMSSMS  +

Like above, plus date, e.g: 2017-03-21 13:43:46.671

+
LLTS_CHROMELIKE  +

This is Chrome-like timestamp used by proto-quic. The timestamp includes month, date, hours, minutes, seconds, and microseconds.

+

Example: 1223/104613.946956 (instead of 12/23 10:46:13.946956).

+

This is to facilitate reading two logs side-by-side.

+
LLTS_HHMMSSUS  +

The timestamp consists of 24 hours, minutes, seconds, and microseconds. Example: 13:43:46.671123

+
+ +
+
+ +
+
+ + + + +
enum lsquic_version
+
+

This is a list of QUIC versions that we know of. List of supported versions is in LSQUIC_SUPPORTED_VERSIONS.

+ + + + + + +
Enumerator
LSQVER_035  +

Q035. This is the first version to be supported by LSQUIC.

+
LSQVER_037  +

Q037. This version is like Q035, except the way packet hashes are generated is different for clients and servers. In addition, new option NSTP (no STOP_WAITING frames) is rumored to be supported at some point in the future.

+
LSQVER_038  +

Q038. Based on Q037, supports PADDING frames in the middle of packet and NSTP (no STOP_WAITING frames) option.

+
LSQVER_039  +

Q039. Switch to big endian. Do not ack acks. Send connection level WINDOW_UPDATE frame every 20 sent packets which do not contain retransmittable frames.

+
LSQVER_040  +

Q040. RST_STREAM, ACK and STREAM frames match IETF format.

+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
void lsquic_conn_abort (lsquic_conn_tc)
+
+

Abort connection.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
unsigned lsquic_conn_cancel_pending_streams (lsquic_conn_t,
unsigned n 
)
+
+

Cancel `n' pending streams. Returns new number of pending streams.

+ +
+
+ +
+
+ + + + + + + + +
void lsquic_conn_close (lsquic_conn_tconn)
+
+

This forces connection close. on_conn_closed and on_close callbacks will be called.

+ +
+
+ +
+
+ + + + + + + + +
lsquic_conn_ctx_t* lsquic_conn_get_ctx (const lsquic_conn_tc)
+
+

Get user-supplied context associated with the connection.

+ +
+
+ +
+
+ + + + + + + + +
void* lsquic_conn_get_peer_ctx (const lsquic_conn_tlconn)
+
+

Get peer context associated with the connection. should be UdpListener *.

+ +
+
+ +
+
+ + + + + + + + +
void lsquic_conn_going_away (lsquic_conn_tconn)
+
+

Mark connection as going away: send GOAWAY frame and do not accept any more incoming streams, nor generate streams of our own.

+ +
+
+ +
+
+ + + + + + + + +
lsquic_cid_t lsquic_conn_id (const lsquic_conn_tc)
+
+

Get connection ID

+ +
+
+ +
+
+ + + + + + + + +
unsigned lsquic_conn_n_pending_streams (const lsquic_conn_t)
+
+

Return number of delayed streams currently pending

+ +
+
+ +
+
+ + + + + + + + +
enum lsquic_version lsquic_conn_quic_version (const lsquic_conn_tc)
+
+

Get QUIC version used by the connection.

+
See also
lsquic_version
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int lsquic_engine_check_settings (const struct lsquic_engine_settingssettings,
unsigned lsquic_engine_flags,
char * err_buf,
size_t err_buf_sz 
)
+
+

Check settings for errors.

+
Parameters
+ + + + + +
settingsSettings struct.
flagsEngine flags.
err_bufOptional pointer to buffer into which error string is written.
err_buf_szSize of err_buf. No more than this number of bytes will be written to err_buf, including the NUL byte.
+
+
+
Return values
+ + + +
0Settings have no errors.
-1There are errors in settings.
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int lsquic_engine_connect (lsquic_engine_t,
const struct sockaddr * peer_sa,
void * peer_ctx,
const char * hostname,
unsigned short max_packet_size 
)
+
+

Create a client connection to peer identified by `peer_ctx'. If `max_packet_size' is set to zero, it is inferred based on `peer_sa': 1350 for IPv6 and 1370 for IPv4.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
unsigned lsquic_engine_count_attq (lsquic_engine_tengine,
int from_now 
)
+
+

Return number of connections whose advisory tick time is before $now plus `from_now' delta. `from_now' can be negative.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int lsquic_engine_earliest_adv_tick (lsquic_engine_tengine,
int * diff 
)
+
+

Returns true if there is a connection on the Advisory Tick Time queue, false otherwise. If true, `diff' is set to the difference between the earliest advisory tick time and now. If the former is in the past, the value of `diff' is negative.

+ +
+
+ +
+
+ + + + + + + + +
int lsquic_engine_has_pend_rw (lsquic_engine_t)
+
+

Returns true if engine has connections that have pending read or write events.

+

Connections with pending read or write events are those that have at least one stream whose state changed outside of the regular callback mechanism. The simplest example is writing directly to the stream object when data comes in.

+

A call to lsquic_engine_proc_all, lsquic_engine_process_conns_with_incoming, lsquic_engine_process_conns_to_tick, or lsquic_engine_process_conns_with_pend_rw removes processed connection from Pending RW queue.

+ +
+
+ +
+
+ + + + + + + + +
int lsquic_engine_has_unsent_packets (lsquic_engine_tengine)
+
+

Returns true if engine has some unsent packets. This happens if ea_packets_out() could not send everything out.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
lsquic_engine_t* lsquic_engine_new (unsigned lsquic_engine_flags,
const struct lsquic_engine_api 
)
+
+

Create new engine.

+
Parameters
+ + +
lsquic_engine_flagsA bitmask of LSENG_SERVER and LSENG_HTTP
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int lsquic_engine_packet_in (lsquic_engine_t,
const unsigned char * packet_in_data,
size_t packet_in_size,
const struct sockaddr * sa_local,
const struct sockaddr * sa_peer,
void * peer_ctx 
)
+
+

Pass incoming packet to the QUIC engine. This function can be called more than once in a row. After you add one or more packets, call lsquic_engine_process_conns_with_incoming() to schedule output, if any.

+
Return values
+ + + +
0Packet was processed by a real connection.
-1Some error occurred. Possible reasons are invalid packet size or failure to allocate memory.
+
+
+ +
+
+ +
+
+ + + + + + + + +
void lsquic_engine_proc_all (lsquic_engine_tengine)
+
+

Process all connections. This function must be called often enough so that packets and connections do not expire.

+ +
+
+ +
+
+ + + + + + + + +
void lsquic_engine_process_conns_to_tick (lsquic_engine_t)
+
+

Process connections in Advisory Tick Time queue whose tick times are in the past.

+ +
+
+ +
+
+ + + + + + + + +
void lsquic_engine_process_conns_with_incoming (lsquic_engine_t)
+
+

Process connections that have incoming packets. Call this after adding one or more incoming packets using lsquic_engine_packet_in().

+ +
+
+ +
+
+ + + + + + + + +
void lsquic_engine_process_conns_with_pend_rw (lsquic_engine_t)
+
+

Process connections that have pending read or write events (

See also
lsquic_engine_has_pend_rw for description).
+ +
+
+ +
+
+ + + + + + + + +
unsigned lsquic_engine_quic_versions (const lsquic_engine_t)
+
+

Return the list of QUIC versions (as bitmask) this engine instance supports.

+ +
+
+ +
+
+ + + + + + + + +
void lsquic_engine_send_unsent_packets (lsquic_engine_tengine)
+
+

Send out as many unsent packets as possibe: until we are out of unsent packets or until ea_packets_out() fails.

+ +
+
+ +
+
+ + + + + + + + +
void lsquic_global_cleanup (void )
+
+

Clean up global state created by lsquic_global_init. Should be called after all LSQUIC engine instances are gone.

+ +
+
+ +
+
+ + + + + + + + +
int lsquic_global_init (int flags)
+
+

Initialize LSQUIC. This must be called before any other LSQUIC function is called. Returns 0 on success and -1 on failure.

+
Parameters
+ + +
flagsThis a bitmask of LSQUIC_GLOBAL_CLIENT and LSQUIC_GLOBAL_SERVER. At least one of these flags should be specified.
+
+
+
Return values
+ + + +
0Success.
-1Initialization failed.
+
+
+
See also
LSQUIC_GLOBAL_CLIENT
+
+LSQUIC_GLOBAL_SERVER
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void lsquic_logger_init (const struct lsquic_logger_if,
void * logger_ctx,
enum lsquic_logger_timestamp_style 
)
+
+

Call this if you want to do something with LSQUIC log messages, as they are thrown out by default.

+ +
+
+ +
+
+ + + + + + + + +
int lsquic_logger_lopt (const char * optarg)
+
+

E.g. "event=debug"

+ +
+
+ +
+
+ + + + + + + + +
int lsquic_set_log_level (const char * log_level)
+
+

Set log level for all LSQUIC modules. Acceptable values are debug, info, notice, warning, error, alert, emerg, crit (case-insensitive).

+
Return values
+ + + +
0Success.
-1Failure: log_level is not valid.
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
enum lsquic_version lsquic_str2ver (const char * str,
size_t len 
)
+
+

Translate string QUIC version to LSQUIC QUIC version representation

+ +
+
+ +
+
+ + + + + + + + +
lsquic_conn_t* lsquic_stream_conn (const lsquic_stream_ts)
+
+

Get a pointer to the connection object. Use it with lsquic_conn_* functions.

+ +
+
+ +
+
+ + + + + + + + +
lsquic_stream_ctx_t* lsquic_stream_get_ctx (const lsquic_stream_ts)
+
+

Returns stream ctx associated with the stream. (The context is what is returned by on_new_stream callback).

+ +
+
+ +
+
+ + + + + + + + +
uint32_t lsquic_stream_id (const lsquic_stream_ts)
+
+

Returns ID of the stream

+ +
+
+ +
+
+ + + + + + + + +
int lsquic_stream_is_pushed (const lsquic_stream_ts)
+
+

Returns true if this is a pushed stream

+ +
+
+ +
+
+ + + + + + + + +
unsigned lsquic_stream_priority (const lsquic_stream_ts)
+
+

Return current priority of the stream

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int lsquic_stream_push_info (const lsquic_stream_t,
uint32_t * ref_stream_id,
const char ** headers,
size_t * headers_sz 
)
+
+

Get information associated with pushed stream:

+
Parameters
+ + + + +
ref_stream_idStream ID in response to which push promise was sent.
headersUncompressed request headers.
headers_szSize of uncompressed request headers, not counting the NUL byte.
+
+
+
Return values
+ + + +
0Success.
-1This is not a pushed stream.
+
+
+ +
+
+ +
+
+ + + + + + + + +
int lsquic_stream_refuse_push (lsquic_stream_ts)
+
+

Refuse pushed stream. Call it from on_new_stream.

+

No need to call lsquic_stream_close() after this. on_close will be called.

+
See also
lsquic_stream_is_pushed
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int lsquic_stream_sendfile (lsquic_stream_ts,
int fdSrc,
off_t off,
size_t size 
)
+
+

Returns 0 if `fdSrc' was queued for writing, -1 on error. This function queues at most `size' bytes to be written. If the file shrinks, fewer bytes are written.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int lsquic_stream_set_priority (lsquic_stream_ts,
unsigned priority 
)
+
+

Set stream priority. Valid priority values are 1 through 256, inclusive.

+
Return values
+ + + +
0Success.
-1Priority value is invalid.
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int lsquic_stream_shutdown (lsquic_stream_ts,
int how 
)
+
+

Possible values for how are 0, 1, and 2. See shutdown(2).

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
ssize_t lsquic_stream_write (lsquic_stream_ts,
const void * buf,
size_t len 
)
+
+

Write `len' bytes to the stream. Returns number of bytes written, which may be smaller that `len'. Use lsquic_stream_write_avail() to find out maximum size of `len'.

+ +
+
+ +
+
+ + + + + + + + +
size_t lsquic_stream_write_avail (const lsquic_stream_ts)
+
+

Return maximum number of bytes lsquic_stream_write() will write. This call is useful if you don't want to perform your own buffering.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int lsquic_stream_write_file (lsquic_stream_ts,
const char * filename 
)
+
+

Returns 0 if `filename' was queued for writing, -1 on error. This function queues the size of the file as it was when the function was called. The stream will write at most this number of bytes to the peer. If the file grows, appended data is not used.

+ +
+
+ + + + + diff --git a/docs/html/lsquic_8h__incl.map b/docs/html/lsquic_8h__incl.map new file mode 100644 index 0000000..74f08c2 --- /dev/null +++ b/docs/html/lsquic_8h__incl.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/lsquic_8h__incl.md5 b/docs/html/lsquic_8h__incl.md5 new file mode 100644 index 0000000..836457e --- /dev/null +++ b/docs/html/lsquic_8h__incl.md5 @@ -0,0 +1 @@ +05afcaed8fe83b6a3e0a50e4cc6f4075 \ No newline at end of file diff --git a/docs/html/lsquic_8h__incl.png b/docs/html/lsquic_8h__incl.png new file mode 100644 index 0000000..e104379 Binary files /dev/null and b/docs/html/lsquic_8h__incl.png differ diff --git a/docs/html/lsquic_8h_source.html b/docs/html/lsquic_8h_source.html new file mode 100644 index 0000000..0b66825 --- /dev/null +++ b/docs/html/lsquic_8h_source.html @@ -0,0 +1,192 @@ + + + + + + +LiteSpeed QUIC Library: include/lsquic.h Source File + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
lsquic.h
+
+
+Go to the documentation of this file.
1 /* Copyright (c) 2017 LiteSpeed Technologies Inc. See LICENSE. */
2 #ifndef __LSQUIC_H__
3 #define __LSQUIC_H__
4 
11 #include <stdarg.h>
12 #include <lsquic_types.h>
13 #include <sys/uio.h>
14 #include <sys/types.h>
15 #include <time.h>
16 
17 struct iovec;
18 struct sockaddr;
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
29 #define LSENG_SERVER (1 << 0)
30 
34 #define LSENG_HTTP (1 << 1)
35 
36 #define LSENG_HTTP_SERVER (LSENG_SERVER|LSENG_HTTP)
37 
43 {
44 
47 
55 
61 
68 
73 
74  N_LSQVER
75 };
76 
81 #define LSQUIC_SUPPORTED_VERSIONS ((1 << LSQVER_035) | (1 << LSQVER_037) | \
82  (1 << LSQVER_038) | (1 << LSQVER_039) | (1 << LSQVER_040))
83 
84 #define LSQUIC_EXPERIMENTAL_VERSIONS ((1 << LSQVER_040))
85 
93 
98  lsquic_conn_ctx_t *(*on_new_conn)(void *stream_if_ctx,
99  lsquic_conn_t *c);
100 
105  void (*on_conn_closed)(lsquic_conn_t *c);
106 
115  (*on_new_stream)(void *stream_if_ctx, lsquic_stream_t *s);
116 
117  void (*on_read) (lsquic_stream_t *s, lsquic_stream_ctx_t *h);
118  void (*on_write) (lsquic_stream_t *s, lsquic_stream_ctx_t *h);
119  void (*on_close) (lsquic_stream_t *s, lsquic_stream_ctx_t *h);
120 };
121 
127 #define LSQUIC_MIN_FCW (16 * 1024)
128 
129 /* Each LSQUIC_DF_* value corresponds to es_* entry in
130  * lsquic_engine_settings below.
131  */
132 
136 #define LSQUIC_DF_VERSIONS (LSQUIC_SUPPORTED_VERSIONS & \
137  ~LSQUIC_EXPERIMENTAL_VERSIONS)
138 
139 #define LSQUIC_DF_CFCW_SERVER (3 * 1024 * 1024 / 2)
140 #define LSQUIC_DF_CFCW_CLIENT (15 * 1024 * 1024)
141 #define LSQUIC_DF_SFCW_SERVER (1 * 1024 * 1024)
142 #define LSQUIC_DF_SFCW_CLIENT (6 * 1024 * 1024)
143 #define LSQUIC_DF_MAX_STREAMS_IN 100
144 
148 #define LSQUIC_DF_HANDSHAKE_TO (10 * 1000 * 1000)
149 
150 #define LSQUIC_DF_IDLE_CONN_TO (30 * 1000 * 1000)
151 #define LSQUIC_DF_SILENT_CLOSE 1
152 
157 #define LSQUIC_DF_MAX_HEADER_LIST_SIZE 0
158 
160 #define LSQUIC_DF_UA "LSQUIC"
161 
162 #define LSQUIC_DF_STTL 86400
163 #define LSQUIC_DF_MAX_INCHOATE (1 * 1000 * 1000)
164 #define LSQUIC_DF_SUPPORT_SREJ_SERVER 1
165 #define LSQUIC_DF_SUPPORT_SREJ_CLIENT 0 /* TODO: client support */
166 
167 #define LSQUIC_DF_SUPPORT_NSTP 0
168 #define LSQUIC_DF_SUPPORT_PUSH 1
169 #define LSQUIC_DF_SUPPORT_TCID0 1
170 
171 #define LSQUIC_DF_HONOR_PRST 0
172 
174 #define LSQUIC_DF_PROGRESS_CHECK 1000
175 
177 #define LSQUIC_DF_PENDRW_CHECK 10
178 
180 #define LSQUIC_DF_RW_ONCE 0
181 
183 #define LSQUIC_DF_PROC_TIME_THRESH 0
184 
186 #define LSQUIC_DF_PACE_PACKETS 1
187 
197  unsigned es_versions;
198 
209  unsigned es_cfcw;
210 
221  unsigned es_sfcw;
222 
231  unsigned es_max_cfcw;
232 
233  unsigned es_max_sfcw;
234 
237 
245  unsigned long es_handshake_to;
246 
248  unsigned long es_idle_conn_to;
249 
252 
259 
261  const char *es_ua;
262 
263  uint32_t es_pdmd; /* One fixed value X509 */
264  uint32_t es_aead; /* One fixed value AESG */
265  uint32_t es_kexs; /* One fixed value C255 */
266 
273 
285 
294 
306 
313 
328 
344  unsigned es_pendrw_check;
345 
359 
379 
386 
387 };
388 
389 /* Initialize `settings' to default values */
390 void
391 lsquic_engine_init_settings (struct lsquic_engine_settings *,
392  unsigned lsquic_engine_flags);
393 
410 int
412  unsigned lsquic_engine_flags,
413  char *err_buf, size_t err_buf_sz);
414 
416 {
417  const unsigned char *buf;
418  size_t sz;
419  const struct sockaddr *local_sa;
420  const struct sockaddr *dest_sa;
421  void *peer_ctx;
422 };
423 
428 typedef int (*lsquic_packets_out_f)(
429  void *packets_out_ctx,
430  const struct lsquic_out_spec *out_spec,
431  unsigned n_packets_out
432 );
433 
444 {
445  void * (*pmi_allocate) (void *pmi_ctx, size_t sz);
446  void (*pmi_release) (void *pmi_ctx, void *obj);
447 };
448 
449 /* TODO: describe this important data structure */
450 typedef struct lsquic_engine_api
451 {
452  const struct lsquic_engine_settings *ea_settings; /* Optional */
453  const struct lsquic_stream_if *ea_stream_if;
454  void *ea_stream_if_ctx;
455  lsquic_packets_out_f ea_packets_out;
456  void *ea_packets_out_ctx;
461  void *ea_pmi_ctx;
463 
471 lsquic_engine_new (unsigned lsquic_engine_flags,
472  const struct lsquic_engine_api *);
473 
479 int
480 lsquic_engine_connect (lsquic_engine_t *, const struct sockaddr *peer_sa,
481  void *peer_ctx, const char *hostname,
482  unsigned short max_packet_size);
483 
494 int
496  const unsigned char *packet_in_data, size_t packet_in_size,
497  const struct sockaddr *sa_local, const struct sockaddr *sa_peer,
498  void *peer_ctx);
499 
504 void
506 
511 void
513 
518 void
520 
536 int
538 
543 void
545 
550 int
552 
557 void
559 
560 void
561 lsquic_engine_destroy (lsquic_engine_t *);
562 
563 void lsquic_conn_make_stream(lsquic_conn_t *);
564 
566 unsigned
568 
570 unsigned
572 
577 void
579 
584 void lsquic_conn_close(lsquic_conn_t *conn);
585 
586 int lsquic_stream_wantread(lsquic_stream_t *s, int is_want);
587 ssize_t lsquic_stream_read(lsquic_stream_t *s, void *buf, size_t len);
588 ssize_t lsquic_stream_readv(lsquic_stream_t *s, const struct iovec *,
589  int iovcnt);
590 
591 int lsquic_stream_wantwrite(lsquic_stream_t *s, int is_want);
592 
598 
604 ssize_t lsquic_stream_write(lsquic_stream_t *s, const void *buf, size_t len);
605 
612 int lsquic_stream_write_file(lsquic_stream_t *s, const char *filename);
613 
614 ssize_t lsquic_stream_writev(lsquic_stream_t *s, const struct iovec *vec, int count);
615 
621 int lsquic_stream_sendfile(lsquic_stream_t *s, int fdSrc, off_t off, size_t size);
622 
623 int lsquic_stream_flush(lsquic_stream_t *s);
624 
630 typedef struct lsquic_http_header
631 {
632  struct iovec name;
633  struct iovec value;
635 
642 {
643  int count;
644  lsquic_http_header_t *headers;
645 };
646 
647 int lsquic_stream_send_headers(lsquic_stream_t *s,
648  const lsquic_http_headers_t *h, int eos);
649 
650 int lsquic_conn_is_push_enabled(lsquic_conn_t *c);
651 
653 int lsquic_stream_shutdown(lsquic_stream_t *s, int how);
654 
655 int lsquic_stream_close(lsquic_stream_t *s);
656 
658 uint32_t
660 
667 
669 int
671 
679 int
681 
694 int
695 lsquic_stream_push_info (const lsquic_stream_t *, uint32_t *ref_stream_id,
696  const char **headers, size_t *headers_sz);
697 
699 unsigned lsquic_stream_priority (const lsquic_stream_t *s);
700 
707 int lsquic_stream_set_priority (lsquic_stream_t *s, unsigned priority);
708 
714 
716 lsquic_conn_get_stream_by_id (lsquic_conn_t *c, uint32_t stream_id);
717 
720 lsquic_conn_id (const lsquic_conn_t *c);
721 
722 int lsquic_conn_get_sockaddr(const lsquic_conn_t *c,
723  const struct sockaddr **local, const struct sockaddr **peer);
724 
726  int (*vprintf)(void *logger_ctx, const char *fmt, va_list args);
727 };
728 
737 
743 
748 
758 
764 
765  N_LLTS
766 };
767 
772 void lsquic_logger_init(const struct lsquic_logger_if *, void *logger_ctx,
774 
782 int
783 lsquic_set_log_level (const char *log_level);
784 
788 int
789 lsquic_logger_lopt (const char *optarg);
790 
796 
801 #define LSQUIC_GLOBAL_CLIENT (1 << 0)
802 
807 #define LSQUIC_GLOBAL_SERVER (1 << 1)
808 
823 int
824 lsquic_global_init (int flags);
825 
830 void
831 lsquic_global_cleanup (void);
832 
838 enum lsquic_version
840 
842 enum lsquic_version
843 lsquic_str2ver (const char *str, size_t len);
844 
850 
854 void *lsquic_conn_get_peer_ctx( const lsquic_conn_t *lconn);
855 
859 void
861 
868 int
870 
875 unsigned
876 lsquic_engine_count_attq (lsquic_engine_t *engine, int from_now);
877 
878 #ifdef __cplusplus
879 }
880 #endif
881 
882 #endif //__LSQUIC_H__
883 
int lsquic_engine_has_pend_rw(lsquic_engine_t *)
+
void lsquic_global_cleanup(void)
+
unsigned es_max_cfcw
Definition: lsquic.h:231
+
unsigned lsquic_engine_quic_versions(const lsquic_engine_t *)
+
Definition: lsquic.h:736
+
const char * es_ua
Definition: lsquic.h:261
+
Definition: lsquic.h:742
+
void lsquic_engine_send_unsent_packets(lsquic_engine_t *engine)
+
Definition: lsquic.h:54
+
unsigned es_pendrw_check
Definition: lsquic.h:344
+
Definition: lsquic.h:72
+
int lsquic_engine_earliest_adv_tick(lsquic_engine_t *engine, int *diff)
+
Definition: lsquic.h:415
+
Definition: lsquic.h:747
+
int es_support_tcid0
Definition: lsquic.h:293
+
Definition: lsquic.h:450
+
int lsquic_stream_is_pushed(const lsquic_stream_t *s)
+
unsigned long es_handshake_to
Definition: lsquic.h:245
+
ssize_t lsquic_stream_write(lsquic_stream_t *s, const void *buf, size_t len)
+
unsigned es_max_streams_in
Definition: lsquic.h:236
+
int lsquic_set_log_level(const char *log_level)
+
The definition of callback functions call by lsquic_stream to process events.
Definition: lsquic.h:92
+
void lsquic_engine_process_conns_with_incoming(lsquic_engine_t *)
+
unsigned lsquic_engine_count_attq(lsquic_engine_t *engine, int from_now)
+
unsigned es_cfcw
Definition: lsquic.h:209
+
uint64_t lsquic_cid_t
Definition: lsquic_types.h:15
+ +
int lsquic_stream_write_file(lsquic_stream_t *s, const char *filename)
+
Definition: lsquic.h:757
+
lsquic_stream_ctx_t * lsquic_stream_get_ctx(const lsquic_stream_t *s)
+
unsigned es_versions
Definition: lsquic.h:197
+
unsigned lsquic_conn_cancel_pending_streams(lsquic_conn_t *, unsigned n)
+
Definition: lsquic.h:763
+
Definition: lsquic.h:630
+
unsigned long es_idle_conn_to
Definition: lsquic.h:248
+
enum lsquic_version lsquic_str2ver(const char *str, size_t len)
+
struct lsquic_conn lsquic_conn_t
Definition: lsquic_types.h:21
+
int es_support_nstp
Definition: lsquic.h:305
+
int lsquic_stream_push_info(const lsquic_stream_t *, uint32_t *ref_stream_id, const char **headers, size_t *headers_sz)
+
lsquic_logger_timestamp_style
Definition: lsquic.h:732
+
int lsquic_engine_packet_in(lsquic_engine_t *, const unsigned char *packet_in_data, size_t packet_in_size, const struct sockaddr *sa_local, const struct sockaddr *sa_peer, void *peer_ctx)
+
unsigned es_proc_time_thresh
Definition: lsquic.h:378
+
void lsquic_engine_proc_all(lsquic_engine_t *engine)
+
size_t lsquic_stream_write_avail(const lsquic_stream_t *s)
+
int lsquic_stream_set_priority(lsquic_stream_t *s, unsigned priority)
+
Definition: lsquic.h:67
+
Definition: lsquic.h:725
+
Definition: lsquic.h:46
+
int es_silent_close
Definition: lsquic.h:251
+
int es_honor_prst
Definition: lsquic.h:312
+
void lsquic_engine_process_conns_to_tick(lsquic_engine_t *)
+
unsigned es_max_header_list_size
Definition: lsquic.h:258
+
int lsquic_engine_check_settings(const struct lsquic_engine_settings *settings, unsigned lsquic_engine_flags, char *err_buf, size_t err_buf_sz)
+
int es_rw_once
Definition: lsquic.h:358
+
lsquic_version
Definition: lsquic.h:42
+
int lsquic_global_init(int flags)
+
int lsquic_engine_connect(lsquic_engine_t *, const struct sockaddr *peer_sa, void *peer_ctx, const char *hostname, unsigned short max_packet_size)
+
struct lsquic_engine lsquic_engine_t
Definition: lsquic_types.h:18
+
int lsquic_stream_refuse_push(lsquic_stream_t *s)
+
Definition: lsquic.h:443
+
int es_support_srej
Definition: lsquic.h:272
+
lsquic_conn_ctx_t * lsquic_conn_get_ctx(const lsquic_conn_t *c)
+
void lsquic_logger_init(const struct lsquic_logger_if *, void *logger_ctx, enum lsquic_logger_timestamp_style)
+
int(* lsquic_packets_out_f)(void *packets_out_ctx, const struct lsquic_out_spec *out_spec, unsigned n_packets_out)
Definition: lsquic.h:428
+
unsigned es_sfcw
Definition: lsquic.h:221
+
int es_pace_packets
Definition: lsquic.h:385
+
int lsquic_stream_shutdown(lsquic_stream_t *s, int how)
+
lsquic_engine_t * lsquic_engine_new(unsigned lsquic_engine_flags, const struct lsquic_engine_api *)
+
lsquic_cid_t lsquic_conn_id(const lsquic_conn_t *c)
+
Definition: lsquic.h:641
+
void * lsquic_conn_get_peer_ctx(const lsquic_conn_t *lconn)
+
unsigned lsquic_stream_priority(const lsquic_stream_t *s)
+
struct lsquic_http_header lsquic_http_header_t
HTTP header structure. Contains header name and value.
+
int lsquic_logger_lopt(const char *optarg)
+
const struct lsquic_packout_mem_if * ea_pmi
Definition: lsquic.h:460
+
struct lsquic_conn_ctx lsquic_conn_ctx_t
Definition: lsquic_types.h:24
+
struct lsquic_stream_ctx lsquic_stream_ctx_t
Definition: lsquic_types.h:30
+
void lsquic_engine_process_conns_with_pend_rw(lsquic_engine_t *)
+
struct lsquic_stream lsquic_stream_t
Definition: lsquic_types.h:27
+
lsquic_conn_t * lsquic_stream_conn(const lsquic_stream_t *s)
+
int lsquic_engine_has_unsent_packets(lsquic_engine_t *engine)
+
void lsquic_conn_going_away(lsquic_conn_t *conn)
+
Definition: lsquic.h:188
+
enum lsquic_version lsquic_conn_quic_version(const lsquic_conn_t *c)
+
void lsquic_conn_close(lsquic_conn_t *conn)
+
Definition: lsquic.h:60
+
uint32_t lsquic_stream_id(const lsquic_stream_t *s)
+
void(* on_goaway_received)(lsquic_conn_t *c)
Definition: lsquic.h:104
+
unsigned es_progress_check
Definition: lsquic.h:327
+
int es_support_push
Definition: lsquic.h:284
+
unsigned lsquic_conn_n_pending_streams(const lsquic_conn_t *)
+
int lsquic_stream_sendfile(lsquic_stream_t *s, int fdSrc, off_t off, size_t size)
+
void lsquic_conn_abort(lsquic_conn_t *c)
+
+ + + + diff --git a/docs/html/lsquic__types_8h.html b/docs/html/lsquic__types_8h.html new file mode 100644 index 0000000..b7b0bf9 --- /dev/null +++ b/docs/html/lsquic__types_8h.html @@ -0,0 +1,234 @@ + + + + + + +LiteSpeed QUIC Library: include/lsquic_types.h File Reference + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
lsquic_types.h File Reference
+
+
+
#include <stdint.h>
+
+Include dependency graph for lsquic_types.h:
+
+
+ + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + +

+Typedefs

typedef uint64_t lsquic_cid_t
 
typedef struct lsquic_engine lsquic_engine_t
 
typedef struct lsquic_conn lsquic_conn_t
 
typedef struct lsquic_conn_ctx lsquic_conn_ctx_t
 
typedef struct lsquic_stream lsquic_stream_t
 
typedef struct lsquic_stream_ctx lsquic_stream_ctx_t
 
typedef struct lsquic_http_headers lsquic_http_headers_t
 HTTP header list structure. Contains a list of HTTP headers in key/value pairs. used in API functions to pass headers. More...
 
+

Detailed Description

+

LSQUIC types.

+

Typedef Documentation

+ +
+
+ + + + +
typedef uint64_t lsquic_cid_t
+
+

Connection ID

+ +
+
+ +
+
+ + + + +
typedef struct lsquic_conn_ctx lsquic_conn_ctx_t
+
+

Connection context. This is the return value of on_new_conn.

+ +
+
+ +
+
+ + + + +
typedef struct lsquic_conn lsquic_conn_t
+
+

Connection

+ +
+
+ +
+
+ + + + +
typedef struct lsquic_engine lsquic_engine_t
+
+

LSQUIC engine

+ +
+
+ +
+
+ +

HTTP header list structure. Contains a list of HTTP headers in key/value pairs. used in API functions to pass headers.

+

HTTP headers

+ +
+
+ +
+
+ + + + +
typedef struct lsquic_stream_ctx lsquic_stream_ctx_t
+
+

Stream context. This is the return value of on_new_stream.

+ +
+
+ +
+
+ + + + +
typedef struct lsquic_stream lsquic_stream_t
+
+

Stream

+ +
+
+
+ + + + diff --git a/docs/html/lsquic__types_8h__dep__incl.map b/docs/html/lsquic__types_8h__dep__incl.map new file mode 100644 index 0000000..a1557cd --- /dev/null +++ b/docs/html/lsquic__types_8h__dep__incl.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/lsquic__types_8h__dep__incl.md5 b/docs/html/lsquic__types_8h__dep__incl.md5 new file mode 100644 index 0000000..832c906 --- /dev/null +++ b/docs/html/lsquic__types_8h__dep__incl.md5 @@ -0,0 +1 @@ +6e83b10ec092a93472eff607fc94c5af \ No newline at end of file diff --git a/docs/html/lsquic__types_8h__dep__incl.png b/docs/html/lsquic__types_8h__dep__incl.png new file mode 100644 index 0000000..4488625 Binary files /dev/null and b/docs/html/lsquic__types_8h__dep__incl.png differ diff --git a/docs/html/lsquic__types_8h__incl.map b/docs/html/lsquic__types_8h__incl.map new file mode 100644 index 0000000..73dcb4d --- /dev/null +++ b/docs/html/lsquic__types_8h__incl.map @@ -0,0 +1,2 @@ + + diff --git a/docs/html/lsquic__types_8h__incl.md5 b/docs/html/lsquic__types_8h__incl.md5 new file mode 100644 index 0000000..74b53ec --- /dev/null +++ b/docs/html/lsquic__types_8h__incl.md5 @@ -0,0 +1 @@ +adbe7ba2f8f0c45d6ce46a8bbdc61912 \ No newline at end of file diff --git a/docs/html/lsquic__types_8h__incl.png b/docs/html/lsquic__types_8h__incl.png new file mode 100644 index 0000000..4d484c8 Binary files /dev/null and b/docs/html/lsquic__types_8h__incl.png differ diff --git a/docs/html/lsquic__types_8h_source.html b/docs/html/lsquic__types_8h_source.html new file mode 100644 index 0000000..7eec150 --- /dev/null +++ b/docs/html/lsquic__types_8h_source.html @@ -0,0 +1,106 @@ + + + + + + +LiteSpeed QUIC Library: include/lsquic_types.h Source File + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
lsquic_types.h
+
+
+Go to the documentation of this file.
1 /* Copyright (c) 2017 LiteSpeed Technologies Inc. See LICENSE. */
2 #ifndef __LSQUIC_TYPES_H__
3 #define __LSQUIC_TYPES_H__
4 
10 #include <stdint.h>
11 
15 typedef uint64_t lsquic_cid_t;
16 
18 typedef struct lsquic_engine lsquic_engine_t;
19 
21 typedef struct lsquic_conn lsquic_conn_t;
22 
24 typedef struct lsquic_conn_ctx lsquic_conn_ctx_t;
25 
27 typedef struct lsquic_stream lsquic_stream_t;
28 
30 typedef struct lsquic_stream_ctx lsquic_stream_ctx_t;
31 
34 
35 #endif
uint64_t lsquic_cid_t
Definition: lsquic_types.h:15
+
struct lsquic_conn lsquic_conn_t
Definition: lsquic_types.h:21
+
struct lsquic_engine lsquic_engine_t
Definition: lsquic_types.h:18
+
Definition: lsquic.h:641
+
struct lsquic_conn_ctx lsquic_conn_ctx_t
Definition: lsquic_types.h:24
+
struct lsquic_stream_ctx lsquic_stream_ctx_t
Definition: lsquic_types.h:30
+
struct lsquic_stream lsquic_stream_t
Definition: lsquic_types.h:27
+
+ + + + diff --git a/docs/html/nav_f.png b/docs/html/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/docs/html/nav_f.png differ diff --git a/docs/html/nav_g.png b/docs/html/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/docs/html/nav_g.png differ diff --git a/docs/html/nav_h.png b/docs/html/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/docs/html/nav_h.png differ diff --git a/docs/html/open.png b/docs/html/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/docs/html/open.png differ diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html new file mode 100644 index 0000000..d54e0bd --- /dev/null +++ b/docs/html/search/all_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js new file mode 100644 index 0000000..3e4a61a --- /dev/null +++ b/docs/html/search/all_0.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['ea_5fpmi',['ea_pmi',['../structlsquic__engine__api.html#ab1c6af0c63f81cfa0c9ed6d6952b5482',1,'lsquic_engine_api']]], + ['es_5fcfcw',['es_cfcw',['../structlsquic__engine__settings.html#a2931ff6b1bc06429379debcc2c5cc5fa',1,'lsquic_engine_settings']]], + ['es_5fhandshake_5fto',['es_handshake_to',['../structlsquic__engine__settings.html#aeaef9bb4ecadb340cd05cfb85a6901a5',1,'lsquic_engine_settings']]], + ['es_5fhonor_5fprst',['es_honor_prst',['../structlsquic__engine__settings.html#ac5a3d759dcdf8915a98cbc3dd56d5f22',1,'lsquic_engine_settings']]], + ['es_5fidle_5fconn_5fto',['es_idle_conn_to',['../structlsquic__engine__settings.html#a4ba2bd3e85b8b4d0d929e31d675554e2',1,'lsquic_engine_settings']]], + ['es_5fmax_5fcfcw',['es_max_cfcw',['../structlsquic__engine__settings.html#a7297980e558cd2deafb955534520934b',1,'lsquic_engine_settings']]], + ['es_5fmax_5fheader_5flist_5fsize',['es_max_header_list_size',['../structlsquic__engine__settings.html#ab7b7eb8ab17eb47b8ea69d8ee8ef4a5b',1,'lsquic_engine_settings']]], + ['es_5fmax_5fstreams_5fin',['es_max_streams_in',['../structlsquic__engine__settings.html#ab6848de0e8025b08398ba43445de7405',1,'lsquic_engine_settings']]], + ['es_5fpace_5fpackets',['es_pace_packets',['../structlsquic__engine__settings.html#a90403ce7cbb10f9ddf438cfc1bd62530',1,'lsquic_engine_settings']]], + ['es_5fpendrw_5fcheck',['es_pendrw_check',['../structlsquic__engine__settings.html#a9baca38fb49c0028941a54de17a3580a',1,'lsquic_engine_settings']]], + ['es_5fproc_5ftime_5fthresh',['es_proc_time_thresh',['../structlsquic__engine__settings.html#aaa9758b94c763b457c4a6ccc4f1e8100',1,'lsquic_engine_settings']]], + ['es_5fprogress_5fcheck',['es_progress_check',['../structlsquic__engine__settings.html#a85a83ab74a018c293f83d9b78a797d8e',1,'lsquic_engine_settings']]], + ['es_5frw_5fonce',['es_rw_once',['../structlsquic__engine__settings.html#a59907a4c1080bd6eb5c5c7776b968af4',1,'lsquic_engine_settings']]], + ['es_5fsfcw',['es_sfcw',['../structlsquic__engine__settings.html#ac88c5a68eac5f324a1b1524a962be26d',1,'lsquic_engine_settings']]], + ['es_5fsilent_5fclose',['es_silent_close',['../structlsquic__engine__settings.html#aebf95d077a1a0de005b2ddac5afdfdc4',1,'lsquic_engine_settings']]], + ['es_5fsupport_5fnstp',['es_support_nstp',['../structlsquic__engine__settings.html#addfa7e19884a81f50ca4d573b9aa16a3',1,'lsquic_engine_settings']]], + ['es_5fsupport_5fpush',['es_support_push',['../structlsquic__engine__settings.html#a8b68eb068b40eb24e5e08cab097f077a',1,'lsquic_engine_settings']]], + ['es_5fsupport_5fsrej',['es_support_srej',['../structlsquic__engine__settings.html#adfd0c61d3243d85d3676876ca67e6466',1,'lsquic_engine_settings']]], + ['es_5fsupport_5ftcid0',['es_support_tcid0',['../structlsquic__engine__settings.html#a1570dc65c3b4d097987f08ade3cfd993',1,'lsquic_engine_settings']]], + ['es_5fua',['es_ua',['../structlsquic__engine__settings.html#a578718dc886cffa23e97fa11fb26138b',1,'lsquic_engine_settings']]], + ['es_5fversions',['es_versions',['../structlsquic__engine__settings.html#a9dca1ee29ab43ca9454b6b0a8d5e2799',1,'lsquic_engine_settings']]] +]; diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html new file mode 100644 index 0000000..8cc6a1d --- /dev/null +++ b/docs/html/search/all_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js new file mode 100644 index 0000000..06fa750 --- /dev/null +++ b/docs/html/search/all_1.js @@ -0,0 +1,93 @@ +var searchData= +[ + ['llts_5fchromelike',['LLTS_CHROMELIKE',['../lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a5aa72ace83b5948f4d5a9ed5c72a4c4b',1,'lsquic.h']]], + ['llts_5fhhmmssms',['LLTS_HHMMSSMS',['../lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235aa00368e0a7e30628851ab624d6e7575b',1,'lsquic.h']]], + ['llts_5fhhmmssus',['LLTS_HHMMSSUS',['../lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a874a36df2ce02e162104c2345b176185',1,'lsquic.h']]], + ['llts_5fnone',['LLTS_NONE',['../lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a4bc180853f0f833b9c93bf7080ce2805',1,'lsquic.h']]], + ['llts_5fyyyymmdd_5fhhmmssms',['LLTS_YYYYMMDD_HHMMSSMS',['../lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a8754c3fced294cfb146625c586a55a56',1,'lsquic.h']]], + ['lseng_5fhttp',['LSENG_HTTP',['../lsquic_8h.html#a8f395ac69797c7be8d9d524d464e7ed2',1,'lsquic.h']]], + ['lseng_5fserver',['LSENG_SERVER',['../lsquic_8h.html#abaf1fe07c4f99aa36d3d5502bbfc371d',1,'lsquic.h']]], + ['lsquic_2eh',['lsquic.h',['../lsquic_8h.html',1,'']]], + ['lsquic_5fcid_5ft',['lsquic_cid_t',['../lsquic__types_8h.html#acf675534bad01d31b48d9113feff1bbb',1,'lsquic_types.h']]], + ['lsquic_5fconn_5fabort',['lsquic_conn_abort',['../lsquic_8h.html#a6da1350d78db9a83810a00dcee3e4944',1,'lsquic.h']]], + ['lsquic_5fconn_5fcancel_5fpending_5fstreams',['lsquic_conn_cancel_pending_streams',['../lsquic_8h.html#a8fe1ef20026e5e68a892036005c20a19',1,'lsquic.h']]], + ['lsquic_5fconn_5fclose',['lsquic_conn_close',['../lsquic_8h.html#ad8f2345e0b9f8d19f7b6a1fa4e970aa8',1,'lsquic.h']]], + ['lsquic_5fconn_5fctx_5ft',['lsquic_conn_ctx_t',['../lsquic__types_8h.html#a21c289bcbb4643effba8bb75eeffd8cd',1,'lsquic_types.h']]], + ['lsquic_5fconn_5fget_5fctx',['lsquic_conn_get_ctx',['../lsquic_8h.html#a53d1105503b5ab46384451ff4bbd0391',1,'lsquic.h']]], + ['lsquic_5fconn_5fget_5fpeer_5fctx',['lsquic_conn_get_peer_ctx',['../lsquic_8h.html#a8edf1874acb10f4b95abf8894023c3c9',1,'lsquic.h']]], + ['lsquic_5fconn_5fgoing_5faway',['lsquic_conn_going_away',['../lsquic_8h.html#aff77b794b9ca995245cc9a739b76d197',1,'lsquic.h']]], + ['lsquic_5fconn_5fid',['lsquic_conn_id',['../lsquic_8h.html#a487bffd57fd7febe4b316be7dc0a3016',1,'lsquic.h']]], + ['lsquic_5fconn_5fn_5fpending_5fstreams',['lsquic_conn_n_pending_streams',['../lsquic_8h.html#a33bb7961ffad842a052bcd81202de5b9',1,'lsquic.h']]], + ['lsquic_5fconn_5fquic_5fversion',['lsquic_conn_quic_version',['../lsquic_8h.html#a2a07e308beb5e1f29ba62597c2a37b2b',1,'lsquic.h']]], + ['lsquic_5fconn_5ft',['lsquic_conn_t',['../lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036',1,'lsquic_types.h']]], + ['lsquic_5fdf_5fhandshake_5fto',['LSQUIC_DF_HANDSHAKE_TO',['../lsquic_8h.html#a1e7808ab9863e1ae4b44e7856e75eee8',1,'lsquic.h']]], + ['lsquic_5fdf_5fhonor_5fprst',['LSQUIC_DF_HONOR_PRST',['../lsquic_8h.html#a13d1cb05ad19ae5cd016e016d228326c',1,'lsquic.h']]], + ['lsquic_5fdf_5fmax_5fheader_5flist_5fsize',['LSQUIC_DF_MAX_HEADER_LIST_SIZE',['../lsquic_8h.html#a1e1ab46b8acff52f127359bf68a8b297',1,'lsquic.h']]], + ['lsquic_5fdf_5fpace_5fpackets',['LSQUIC_DF_PACE_PACKETS',['../lsquic_8h.html#a332b2fcfbbd83bbeb6027a622ec72f69',1,'lsquic.h']]], + ['lsquic_5fdf_5fpendrw_5fcheck',['LSQUIC_DF_PENDRW_CHECK',['../lsquic_8h.html#a472d9508529e22b2be78b48d0fd69529',1,'lsquic.h']]], + ['lsquic_5fdf_5fproc_5ftime_5fthresh',['LSQUIC_DF_PROC_TIME_THRESH',['../lsquic_8h.html#a4a8cbc259dcff01fa93959ca5b2a0a35',1,'lsquic.h']]], + ['lsquic_5fdf_5fprogress_5fcheck',['LSQUIC_DF_PROGRESS_CHECK',['../lsquic_8h.html#afc995b576f8013a43436201a7adf0221',1,'lsquic.h']]], + ['lsquic_5fdf_5frw_5fonce',['LSQUIC_DF_RW_ONCE',['../lsquic_8h.html#a5665ba68a62be14aa1332316512ec4fe',1,'lsquic.h']]], + ['lsquic_5fdf_5fsupport_5fnstp',['LSQUIC_DF_SUPPORT_NSTP',['../lsquic_8h.html#a9e3f5f4a0ecb53f96d2b9249cded3aef',1,'lsquic.h']]], + ['lsquic_5fdf_5fua',['LSQUIC_DF_UA',['../lsquic_8h.html#aeefb2f925217c311af00c92a77e0f191',1,'lsquic.h']]], + ['lsquic_5fdf_5fversions',['LSQUIC_DF_VERSIONS',['../lsquic_8h.html#aecb8427433af4e3fa5260fe71c313d8f',1,'lsquic.h']]], + ['lsquic_5fengine_5fapi',['lsquic_engine_api',['../structlsquic__engine__api.html',1,'']]], + ['lsquic_5fengine_5fcheck_5fsettings',['lsquic_engine_check_settings',['../lsquic_8h.html#a827d6567e492bd67c330e2d48047ad49',1,'lsquic.h']]], + ['lsquic_5fengine_5fconnect',['lsquic_engine_connect',['../lsquic_8h.html#a5e2335a871f1ab9b66e3c59b442e8cbe',1,'lsquic.h']]], + ['lsquic_5fengine_5fcount_5fattq',['lsquic_engine_count_attq',['../lsquic_8h.html#aec59af9ee5cb005bef2e828ee8a0a4be',1,'lsquic.h']]], + ['lsquic_5fengine_5fearliest_5fadv_5ftick',['lsquic_engine_earliest_adv_tick',['../lsquic_8h.html#ac864ff28dcaa1c09ef796a3cdcf83e27',1,'lsquic.h']]], + ['lsquic_5fengine_5fhas_5fpend_5frw',['lsquic_engine_has_pend_rw',['../lsquic_8h.html#a74d8c8f033c2e654fdb3487a2bf55d8a',1,'lsquic.h']]], + ['lsquic_5fengine_5fhas_5funsent_5fpackets',['lsquic_engine_has_unsent_packets',['../lsquic_8h.html#a9d5d9609ca70350117994e2e2e934a22',1,'lsquic.h']]], + ['lsquic_5fengine_5fnew',['lsquic_engine_new',['../lsquic_8h.html#afa6f69c943be0a943f28699af6ae1000',1,'lsquic.h']]], + ['lsquic_5fengine_5fpacket_5fin',['lsquic_engine_packet_in',['../lsquic_8h.html#adb3d3d822e9a8217d90acbf29594ae40',1,'lsquic.h']]], + ['lsquic_5fengine_5fproc_5fall',['lsquic_engine_proc_all',['../lsquic_8h.html#a60427549acdb608cc360173d817393e3',1,'lsquic.h']]], + ['lsquic_5fengine_5fprocess_5fconns_5fto_5ftick',['lsquic_engine_process_conns_to_tick',['../lsquic_8h.html#aefc66717813306c208483cccbb90ab9a',1,'lsquic.h']]], + ['lsquic_5fengine_5fprocess_5fconns_5fwith_5fincoming',['lsquic_engine_process_conns_with_incoming',['../lsquic_8h.html#aefe24851a36ebe16289a6fa3c5a1c8cc',1,'lsquic.h']]], + ['lsquic_5fengine_5fprocess_5fconns_5fwith_5fpend_5frw',['lsquic_engine_process_conns_with_pend_rw',['../lsquic_8h.html#aae156a499af8ae01ca6f4fa307da86c6',1,'lsquic.h']]], + ['lsquic_5fengine_5fquic_5fversions',['lsquic_engine_quic_versions',['../lsquic_8h.html#abebdca40ce630ad8272752da926d7a24',1,'lsquic.h']]], + ['lsquic_5fengine_5fsend_5funsent_5fpackets',['lsquic_engine_send_unsent_packets',['../lsquic_8h.html#a88a2040cc4b0e575b2fa2affe8597697',1,'lsquic.h']]], + ['lsquic_5fengine_5fsettings',['lsquic_engine_settings',['../structlsquic__engine__settings.html',1,'']]], + ['lsquic_5fengine_5ft',['lsquic_engine_t',['../lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f',1,'lsquic_types.h']]], + ['lsquic_5fglobal_5fcleanup',['lsquic_global_cleanup',['../lsquic_8h.html#a06b9ac9ba933a060b72975640b2d79a3',1,'lsquic.h']]], + ['lsquic_5fglobal_5fclient',['LSQUIC_GLOBAL_CLIENT',['../lsquic_8h.html#add59f38ae0a3bea39bd3c5c86b70c63c',1,'lsquic.h']]], + ['lsquic_5fglobal_5finit',['lsquic_global_init',['../lsquic_8h.html#a754a3d611e8c6f9a1daeb7b06c00af88',1,'lsquic.h']]], + ['lsquic_5fglobal_5fserver',['LSQUIC_GLOBAL_SERVER',['../lsquic_8h.html#a632ff4c3837f60fae3436db6e5f3e039',1,'lsquic.h']]], + ['lsquic_5fhttp_5fheader',['lsquic_http_header',['../structlsquic__http__header.html',1,'']]], + ['lsquic_5fhttp_5fheader_5ft',['lsquic_http_header_t',['../lsquic_8h.html#a822627a87eb003fd9e2e56ebded5b3f3',1,'lsquic.h']]], + ['lsquic_5fhttp_5fheaders',['lsquic_http_headers',['../structlsquic__http__headers.html',1,'']]], + ['lsquic_5fhttp_5fheaders_5ft',['lsquic_http_headers_t',['../lsquic__types_8h.html#a91f399fbcccaf01b47ca209c5c170ba2',1,'lsquic_types.h']]], + ['lsquic_5flogger_5fif',['lsquic_logger_if',['../structlsquic__logger__if.html',1,'']]], + ['lsquic_5flogger_5finit',['lsquic_logger_init',['../lsquic_8h.html#a5059cabdc84335f56870c8bc7a1235e2',1,'lsquic.h']]], + ['lsquic_5flogger_5flopt',['lsquic_logger_lopt',['../lsquic_8h.html#af8c718a3780425357d070419106e4bc8',1,'lsquic.h']]], + ['lsquic_5flogger_5ftimestamp_5fstyle',['lsquic_logger_timestamp_style',['../lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235',1,'lsquic.h']]], + ['lsquic_5fmin_5ffcw',['LSQUIC_MIN_FCW',['../lsquic_8h.html#a6fd9104d1ffa8c391dede0a714a5919b',1,'lsquic.h']]], + ['lsquic_5fout_5fspec',['lsquic_out_spec',['../structlsquic__out__spec.html',1,'']]], + ['lsquic_5fpackets_5fout_5ff',['lsquic_packets_out_f',['../lsquic_8h.html#aade9ff8d34cbcb33cd04a41377797fcf',1,'lsquic.h']]], + ['lsquic_5fpackout_5fmem_5fif',['lsquic_packout_mem_if',['../structlsquic__packout__mem__if.html',1,'']]], + ['lsquic_5fset_5flog_5flevel',['lsquic_set_log_level',['../lsquic_8h.html#a337f6adcc4ec9328e0f293d6128ee376',1,'lsquic.h']]], + ['lsquic_5fstr2ver',['lsquic_str2ver',['../lsquic_8h.html#a8fef45d333b115d996080bb254077d8d',1,'lsquic.h']]], + ['lsquic_5fstream_5fconn',['lsquic_stream_conn',['../lsquic_8h.html#a177184b3d7178dda5a3e95e539230b2b',1,'lsquic.h']]], + ['lsquic_5fstream_5fctx_5ft',['lsquic_stream_ctx_t',['../lsquic__types_8h.html#a4012fdeb11382d691dfe5f025206b8f3',1,'lsquic_types.h']]], + ['lsquic_5fstream_5fget_5fctx',['lsquic_stream_get_ctx',['../lsquic_8h.html#a26335cffe38e49a6e87d94967371150d',1,'lsquic.h']]], + ['lsquic_5fstream_5fid',['lsquic_stream_id',['../lsquic_8h.html#a534523d663336969494d6a3721a63640',1,'lsquic.h']]], + ['lsquic_5fstream_5fif',['lsquic_stream_if',['../structlsquic__stream__if.html',1,'']]], + ['lsquic_5fstream_5fis_5fpushed',['lsquic_stream_is_pushed',['../lsquic_8h.html#a199b551bc87bb77814ab4ce58abcdff9',1,'lsquic.h']]], + ['lsquic_5fstream_5fpriority',['lsquic_stream_priority',['../lsquic_8h.html#aa45f5d45b56f5a0d7f881dbccebc5fd8',1,'lsquic.h']]], + ['lsquic_5fstream_5fpush_5finfo',['lsquic_stream_push_info',['../lsquic_8h.html#ae0b8525f7dac119f6122af564d0e17fd',1,'lsquic.h']]], + ['lsquic_5fstream_5frefuse_5fpush',['lsquic_stream_refuse_push',['../lsquic_8h.html#ada61e01ced7a7db11e5c503409c565be',1,'lsquic.h']]], + ['lsquic_5fstream_5fsendfile',['lsquic_stream_sendfile',['../lsquic_8h.html#a1700c950ace4e560d225b474a5e44d58',1,'lsquic.h']]], + ['lsquic_5fstream_5fset_5fpriority',['lsquic_stream_set_priority',['../lsquic_8h.html#aa5e0ddfd53a44561248a286caacbd114',1,'lsquic.h']]], + ['lsquic_5fstream_5fshutdown',['lsquic_stream_shutdown',['../lsquic_8h.html#a7fee61cc609a4b274a4de2b41db6a9e4',1,'lsquic.h']]], + ['lsquic_5fstream_5ft',['lsquic_stream_t',['../lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6',1,'lsquic_types.h']]], + ['lsquic_5fstream_5fwrite',['lsquic_stream_write',['../lsquic_8h.html#a1071b7be4f2f28c5fedf957aa6309f9a',1,'lsquic.h']]], + ['lsquic_5fstream_5fwrite_5favail',['lsquic_stream_write_avail',['../lsquic_8h.html#a97229544d7aaf6c5dcd5e071613f9c8f',1,'lsquic.h']]], + ['lsquic_5fstream_5fwrite_5ffile',['lsquic_stream_write_file',['../lsquic_8h.html#af5b85bb360eb8316fd663d7c5bc149c9',1,'lsquic.h']]], + ['lsquic_5fsupported_5fversions',['LSQUIC_SUPPORTED_VERSIONS',['../lsquic_8h.html#a0420e68d347462080cf2e583b77d61a0',1,'lsquic.h']]], + ['lsquic_5ftypes_2eh',['lsquic_types.h',['../lsquic__types_8h.html',1,'']]], + ['lsquic_5fversion',['lsquic_version',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db',1,'lsquic.h']]], + ['lsqver_5f035',['LSQVER_035',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32',1,'lsquic.h']]], + ['lsqver_5f037',['LSQVER_037',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7',1,'lsquic.h']]], + ['lsqver_5f038',['LSQVER_038',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966',1,'lsquic.h']]], + ['lsqver_5f039',['LSQVER_039',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3',1,'lsquic.h']]], + ['lsqver_5f040',['LSQVER_040',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac17f226a6a4c61377a5e50710d5ef12f',1,'lsquic.h']]] +]; diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html new file mode 100644 index 0000000..d15ac65 --- /dev/null +++ b/docs/html/search/all_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js new file mode 100644 index 0000000..e455b23 --- /dev/null +++ b/docs/html/search/all_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['on_5fgoaway_5freceived',['on_goaway_received',['../structlsquic__stream__if.html#afdab3bce65931517452d2ddd979596d7',1,'lsquic_stream_if']]], + ['on_5fnew_5fconn',['on_new_conn',['../structlsquic__stream__if.html#a1eb8c7575d67c7b1c75c472288751adb',1,'lsquic_stream_if']]], + ['on_5fnew_5fstream',['on_new_stream',['../structlsquic__stream__if.html#aa9c28eae8f3bd33d028578e0aef24402',1,'lsquic_stream_if']]] +]; diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html new file mode 100644 index 0000000..025587a --- /dev/null +++ b/docs/html/search/classes_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js new file mode 100644 index 0000000..6d4e947 --- /dev/null +++ b/docs/html/search/classes_0.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['lsquic_5fengine_5fapi',['lsquic_engine_api',['../structlsquic__engine__api.html',1,'']]], + ['lsquic_5fengine_5fsettings',['lsquic_engine_settings',['../structlsquic__engine__settings.html',1,'']]], + ['lsquic_5fhttp_5fheader',['lsquic_http_header',['../structlsquic__http__header.html',1,'']]], + ['lsquic_5fhttp_5fheaders',['lsquic_http_headers',['../structlsquic__http__headers.html',1,'']]], + ['lsquic_5flogger_5fif',['lsquic_logger_if',['../structlsquic__logger__if.html',1,'']]], + ['lsquic_5fout_5fspec',['lsquic_out_spec',['../structlsquic__out__spec.html',1,'']]], + ['lsquic_5fpackout_5fmem_5fif',['lsquic_packout_mem_if',['../structlsquic__packout__mem__if.html',1,'']]], + ['lsquic_5fstream_5fif',['lsquic_stream_if',['../structlsquic__stream__if.html',1,'']]] +]; diff --git a/docs/html/search/close.png b/docs/html/search/close.png new file mode 100644 index 0000000..9342d3d Binary files /dev/null and b/docs/html/search/close.png differ diff --git a/docs/html/search/defines_0.html b/docs/html/search/defines_0.html new file mode 100644 index 0000000..17cfaa2 --- /dev/null +++ b/docs/html/search/defines_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js new file mode 100644 index 0000000..04c33ca --- /dev/null +++ b/docs/html/search/defines_0.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['lseng_5fhttp',['LSENG_HTTP',['../lsquic_8h.html#a8f395ac69797c7be8d9d524d464e7ed2',1,'lsquic.h']]], + ['lseng_5fserver',['LSENG_SERVER',['../lsquic_8h.html#abaf1fe07c4f99aa36d3d5502bbfc371d',1,'lsquic.h']]], + ['lsquic_5fdf_5fhandshake_5fto',['LSQUIC_DF_HANDSHAKE_TO',['../lsquic_8h.html#a1e7808ab9863e1ae4b44e7856e75eee8',1,'lsquic.h']]], + ['lsquic_5fdf_5fhonor_5fprst',['LSQUIC_DF_HONOR_PRST',['../lsquic_8h.html#a13d1cb05ad19ae5cd016e016d228326c',1,'lsquic.h']]], + ['lsquic_5fdf_5fmax_5fheader_5flist_5fsize',['LSQUIC_DF_MAX_HEADER_LIST_SIZE',['../lsquic_8h.html#a1e1ab46b8acff52f127359bf68a8b297',1,'lsquic.h']]], + ['lsquic_5fdf_5fpace_5fpackets',['LSQUIC_DF_PACE_PACKETS',['../lsquic_8h.html#a332b2fcfbbd83bbeb6027a622ec72f69',1,'lsquic.h']]], + ['lsquic_5fdf_5fpendrw_5fcheck',['LSQUIC_DF_PENDRW_CHECK',['../lsquic_8h.html#a472d9508529e22b2be78b48d0fd69529',1,'lsquic.h']]], + ['lsquic_5fdf_5fproc_5ftime_5fthresh',['LSQUIC_DF_PROC_TIME_THRESH',['../lsquic_8h.html#a4a8cbc259dcff01fa93959ca5b2a0a35',1,'lsquic.h']]], + ['lsquic_5fdf_5fprogress_5fcheck',['LSQUIC_DF_PROGRESS_CHECK',['../lsquic_8h.html#afc995b576f8013a43436201a7adf0221',1,'lsquic.h']]], + ['lsquic_5fdf_5frw_5fonce',['LSQUIC_DF_RW_ONCE',['../lsquic_8h.html#a5665ba68a62be14aa1332316512ec4fe',1,'lsquic.h']]], + ['lsquic_5fdf_5fsupport_5fnstp',['LSQUIC_DF_SUPPORT_NSTP',['../lsquic_8h.html#a9e3f5f4a0ecb53f96d2b9249cded3aef',1,'lsquic.h']]], + ['lsquic_5fdf_5fua',['LSQUIC_DF_UA',['../lsquic_8h.html#aeefb2f925217c311af00c92a77e0f191',1,'lsquic.h']]], + ['lsquic_5fdf_5fversions',['LSQUIC_DF_VERSIONS',['../lsquic_8h.html#aecb8427433af4e3fa5260fe71c313d8f',1,'lsquic.h']]], + ['lsquic_5fglobal_5fclient',['LSQUIC_GLOBAL_CLIENT',['../lsquic_8h.html#add59f38ae0a3bea39bd3c5c86b70c63c',1,'lsquic.h']]], + ['lsquic_5fglobal_5fserver',['LSQUIC_GLOBAL_SERVER',['../lsquic_8h.html#a632ff4c3837f60fae3436db6e5f3e039',1,'lsquic.h']]], + ['lsquic_5fmin_5ffcw',['LSQUIC_MIN_FCW',['../lsquic_8h.html#a6fd9104d1ffa8c391dede0a714a5919b',1,'lsquic.h']]], + ['lsquic_5fsupported_5fversions',['LSQUIC_SUPPORTED_VERSIONS',['../lsquic_8h.html#a0420e68d347462080cf2e583b77d61a0',1,'lsquic.h']]] +]; diff --git a/docs/html/search/enums_0.html b/docs/html/search/enums_0.html new file mode 100644 index 0000000..aba8d79 --- /dev/null +++ b/docs/html/search/enums_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/enums_0.js b/docs/html/search/enums_0.js new file mode 100644 index 0000000..0310d18 --- /dev/null +++ b/docs/html/search/enums_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['lsquic_5flogger_5ftimestamp_5fstyle',['lsquic_logger_timestamp_style',['../lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235',1,'lsquic.h']]], + ['lsquic_5fversion',['lsquic_version',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4db',1,'lsquic.h']]] +]; diff --git a/docs/html/search/enumvalues_0.html b/docs/html/search/enumvalues_0.html new file mode 100644 index 0000000..83192d3 --- /dev/null +++ b/docs/html/search/enumvalues_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/enumvalues_0.js b/docs/html/search/enumvalues_0.js new file mode 100644 index 0000000..ac2c758 --- /dev/null +++ b/docs/html/search/enumvalues_0.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['llts_5fchromelike',['LLTS_CHROMELIKE',['../lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a5aa72ace83b5948f4d5a9ed5c72a4c4b',1,'lsquic.h']]], + ['llts_5fhhmmssms',['LLTS_HHMMSSMS',['../lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235aa00368e0a7e30628851ab624d6e7575b',1,'lsquic.h']]], + ['llts_5fhhmmssus',['LLTS_HHMMSSUS',['../lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a874a36df2ce02e162104c2345b176185',1,'lsquic.h']]], + ['llts_5fnone',['LLTS_NONE',['../lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a4bc180853f0f833b9c93bf7080ce2805',1,'lsquic.h']]], + ['llts_5fyyyymmdd_5fhhmmssms',['LLTS_YYYYMMDD_HHMMSSMS',['../lsquic_8h.html#ac4584806627d352797a2e0cfae2e6235a8754c3fced294cfb146625c586a55a56',1,'lsquic.h']]], + ['lsqver_5f035',['LSQVER_035',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba1956abef5d785f45310599e4fcd39c32',1,'lsquic.h']]], + ['lsqver_5f037',['LSQVER_037',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba5c2aa78b22ea462ae839566e19a87ea7',1,'lsquic.h']]], + ['lsqver_5f038',['LSQVER_038',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dba2d39809298e0c7866b21fc7932504966',1,'lsquic.h']]], + ['lsqver_5f039',['LSQVER_039',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbaa9b8bed8ca169e8a3762308cbf0f3af3',1,'lsquic.h']]], + ['lsqver_5f040',['LSQVER_040',['../lsquic_8h.html#a2633ae9ee8d564f4c499f6eb0913d4dbac17f226a6a4c61377a5e50710d5ef12f',1,'lsquic.h']]] +]; diff --git a/docs/html/search/files_0.html b/docs/html/search/files_0.html new file mode 100644 index 0000000..0b637cf --- /dev/null +++ b/docs/html/search/files_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js new file mode 100644 index 0000000..e848aaa --- /dev/null +++ b/docs/html/search/files_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['lsquic_2eh',['lsquic.h',['../lsquic_8h.html',1,'']]], + ['lsquic_5ftypes_2eh',['lsquic_types.h',['../lsquic__types_8h.html',1,'']]] +]; diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html new file mode 100644 index 0000000..6bc52b6 --- /dev/null +++ b/docs/html/search/functions_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js new file mode 100644 index 0000000..56c828e --- /dev/null +++ b/docs/html/search/functions_0.js @@ -0,0 +1,45 @@ +var searchData= +[ + ['lsquic_5fconn_5fabort',['lsquic_conn_abort',['../lsquic_8h.html#a6da1350d78db9a83810a00dcee3e4944',1,'lsquic.h']]], + ['lsquic_5fconn_5fcancel_5fpending_5fstreams',['lsquic_conn_cancel_pending_streams',['../lsquic_8h.html#a8fe1ef20026e5e68a892036005c20a19',1,'lsquic.h']]], + ['lsquic_5fconn_5fclose',['lsquic_conn_close',['../lsquic_8h.html#ad8f2345e0b9f8d19f7b6a1fa4e970aa8',1,'lsquic.h']]], + ['lsquic_5fconn_5fget_5fctx',['lsquic_conn_get_ctx',['../lsquic_8h.html#a53d1105503b5ab46384451ff4bbd0391',1,'lsquic.h']]], + ['lsquic_5fconn_5fget_5fpeer_5fctx',['lsquic_conn_get_peer_ctx',['../lsquic_8h.html#a8edf1874acb10f4b95abf8894023c3c9',1,'lsquic.h']]], + ['lsquic_5fconn_5fgoing_5faway',['lsquic_conn_going_away',['../lsquic_8h.html#aff77b794b9ca995245cc9a739b76d197',1,'lsquic.h']]], + ['lsquic_5fconn_5fid',['lsquic_conn_id',['../lsquic_8h.html#a487bffd57fd7febe4b316be7dc0a3016',1,'lsquic.h']]], + ['lsquic_5fconn_5fn_5fpending_5fstreams',['lsquic_conn_n_pending_streams',['../lsquic_8h.html#a33bb7961ffad842a052bcd81202de5b9',1,'lsquic.h']]], + ['lsquic_5fconn_5fquic_5fversion',['lsquic_conn_quic_version',['../lsquic_8h.html#a2a07e308beb5e1f29ba62597c2a37b2b',1,'lsquic.h']]], + ['lsquic_5fengine_5fcheck_5fsettings',['lsquic_engine_check_settings',['../lsquic_8h.html#a827d6567e492bd67c330e2d48047ad49',1,'lsquic.h']]], + ['lsquic_5fengine_5fconnect',['lsquic_engine_connect',['../lsquic_8h.html#a5e2335a871f1ab9b66e3c59b442e8cbe',1,'lsquic.h']]], + ['lsquic_5fengine_5fcount_5fattq',['lsquic_engine_count_attq',['../lsquic_8h.html#aec59af9ee5cb005bef2e828ee8a0a4be',1,'lsquic.h']]], + ['lsquic_5fengine_5fearliest_5fadv_5ftick',['lsquic_engine_earliest_adv_tick',['../lsquic_8h.html#ac864ff28dcaa1c09ef796a3cdcf83e27',1,'lsquic.h']]], + ['lsquic_5fengine_5fhas_5fpend_5frw',['lsquic_engine_has_pend_rw',['../lsquic_8h.html#a74d8c8f033c2e654fdb3487a2bf55d8a',1,'lsquic.h']]], + ['lsquic_5fengine_5fhas_5funsent_5fpackets',['lsquic_engine_has_unsent_packets',['../lsquic_8h.html#a9d5d9609ca70350117994e2e2e934a22',1,'lsquic.h']]], + ['lsquic_5fengine_5fnew',['lsquic_engine_new',['../lsquic_8h.html#afa6f69c943be0a943f28699af6ae1000',1,'lsquic.h']]], + ['lsquic_5fengine_5fpacket_5fin',['lsquic_engine_packet_in',['../lsquic_8h.html#adb3d3d822e9a8217d90acbf29594ae40',1,'lsquic.h']]], + ['lsquic_5fengine_5fproc_5fall',['lsquic_engine_proc_all',['../lsquic_8h.html#a60427549acdb608cc360173d817393e3',1,'lsquic.h']]], + ['lsquic_5fengine_5fprocess_5fconns_5fto_5ftick',['lsquic_engine_process_conns_to_tick',['../lsquic_8h.html#aefc66717813306c208483cccbb90ab9a',1,'lsquic.h']]], + ['lsquic_5fengine_5fprocess_5fconns_5fwith_5fincoming',['lsquic_engine_process_conns_with_incoming',['../lsquic_8h.html#aefe24851a36ebe16289a6fa3c5a1c8cc',1,'lsquic.h']]], + ['lsquic_5fengine_5fprocess_5fconns_5fwith_5fpend_5frw',['lsquic_engine_process_conns_with_pend_rw',['../lsquic_8h.html#aae156a499af8ae01ca6f4fa307da86c6',1,'lsquic.h']]], + ['lsquic_5fengine_5fquic_5fversions',['lsquic_engine_quic_versions',['../lsquic_8h.html#abebdca40ce630ad8272752da926d7a24',1,'lsquic.h']]], + ['lsquic_5fengine_5fsend_5funsent_5fpackets',['lsquic_engine_send_unsent_packets',['../lsquic_8h.html#a88a2040cc4b0e575b2fa2affe8597697',1,'lsquic.h']]], + ['lsquic_5fglobal_5fcleanup',['lsquic_global_cleanup',['../lsquic_8h.html#a06b9ac9ba933a060b72975640b2d79a3',1,'lsquic.h']]], + ['lsquic_5fglobal_5finit',['lsquic_global_init',['../lsquic_8h.html#a754a3d611e8c6f9a1daeb7b06c00af88',1,'lsquic.h']]], + ['lsquic_5flogger_5finit',['lsquic_logger_init',['../lsquic_8h.html#a5059cabdc84335f56870c8bc7a1235e2',1,'lsquic.h']]], + ['lsquic_5flogger_5flopt',['lsquic_logger_lopt',['../lsquic_8h.html#af8c718a3780425357d070419106e4bc8',1,'lsquic.h']]], + ['lsquic_5fset_5flog_5flevel',['lsquic_set_log_level',['../lsquic_8h.html#a337f6adcc4ec9328e0f293d6128ee376',1,'lsquic.h']]], + ['lsquic_5fstr2ver',['lsquic_str2ver',['../lsquic_8h.html#a8fef45d333b115d996080bb254077d8d',1,'lsquic.h']]], + ['lsquic_5fstream_5fconn',['lsquic_stream_conn',['../lsquic_8h.html#a177184b3d7178dda5a3e95e539230b2b',1,'lsquic.h']]], + ['lsquic_5fstream_5fget_5fctx',['lsquic_stream_get_ctx',['../lsquic_8h.html#a26335cffe38e49a6e87d94967371150d',1,'lsquic.h']]], + ['lsquic_5fstream_5fid',['lsquic_stream_id',['../lsquic_8h.html#a534523d663336969494d6a3721a63640',1,'lsquic.h']]], + ['lsquic_5fstream_5fis_5fpushed',['lsquic_stream_is_pushed',['../lsquic_8h.html#a199b551bc87bb77814ab4ce58abcdff9',1,'lsquic.h']]], + ['lsquic_5fstream_5fpriority',['lsquic_stream_priority',['../lsquic_8h.html#aa45f5d45b56f5a0d7f881dbccebc5fd8',1,'lsquic.h']]], + ['lsquic_5fstream_5fpush_5finfo',['lsquic_stream_push_info',['../lsquic_8h.html#ae0b8525f7dac119f6122af564d0e17fd',1,'lsquic.h']]], + ['lsquic_5fstream_5frefuse_5fpush',['lsquic_stream_refuse_push',['../lsquic_8h.html#ada61e01ced7a7db11e5c503409c565be',1,'lsquic.h']]], + ['lsquic_5fstream_5fsendfile',['lsquic_stream_sendfile',['../lsquic_8h.html#a1700c950ace4e560d225b474a5e44d58',1,'lsquic.h']]], + ['lsquic_5fstream_5fset_5fpriority',['lsquic_stream_set_priority',['../lsquic_8h.html#aa5e0ddfd53a44561248a286caacbd114',1,'lsquic.h']]], + ['lsquic_5fstream_5fshutdown',['lsquic_stream_shutdown',['../lsquic_8h.html#a7fee61cc609a4b274a4de2b41db6a9e4',1,'lsquic.h']]], + ['lsquic_5fstream_5fwrite',['lsquic_stream_write',['../lsquic_8h.html#a1071b7be4f2f28c5fedf957aa6309f9a',1,'lsquic.h']]], + ['lsquic_5fstream_5fwrite_5favail',['lsquic_stream_write_avail',['../lsquic_8h.html#a97229544d7aaf6c5dcd5e071613f9c8f',1,'lsquic.h']]], + ['lsquic_5fstream_5fwrite_5ffile',['lsquic_stream_write_file',['../lsquic_8h.html#af5b85bb360eb8316fd663d7c5bc149c9',1,'lsquic.h']]] +]; diff --git a/docs/html/search/mag_sel.png b/docs/html/search/mag_sel.png new file mode 100644 index 0000000..81f6040 Binary files /dev/null and b/docs/html/search/mag_sel.png differ diff --git a/docs/html/search/nomatches.html b/docs/html/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/docs/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/docs/html/search/search.css b/docs/html/search/search.css new file mode 100644 index 0000000..4d7612f --- /dev/null +++ b/docs/html/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; + background-color: white; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:111px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/html/search/search.js b/docs/html/search/search.js new file mode 100644 index 0000000..dedce3b --- /dev/null +++ b/docs/html/search/search.js @@ -0,0 +1,791 @@ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/typedefs_0.js b/docs/html/search/typedefs_0.js new file mode 100644 index 0000000..4a2aa50 --- /dev/null +++ b/docs/html/search/typedefs_0.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['lsquic_5fcid_5ft',['lsquic_cid_t',['../lsquic__types_8h.html#acf675534bad01d31b48d9113feff1bbb',1,'lsquic_types.h']]], + ['lsquic_5fconn_5fctx_5ft',['lsquic_conn_ctx_t',['../lsquic__types_8h.html#a21c289bcbb4643effba8bb75eeffd8cd',1,'lsquic_types.h']]], + ['lsquic_5fconn_5ft',['lsquic_conn_t',['../lsquic__types_8h.html#a7e5d9c467ebef6810d3c5100e4684036',1,'lsquic_types.h']]], + ['lsquic_5fengine_5ft',['lsquic_engine_t',['../lsquic__types_8h.html#a41d83b8270d6f12d2812203a7614b55f',1,'lsquic_types.h']]], + ['lsquic_5fhttp_5fheader_5ft',['lsquic_http_header_t',['../lsquic_8h.html#a822627a87eb003fd9e2e56ebded5b3f3',1,'lsquic.h']]], + ['lsquic_5fhttp_5fheaders_5ft',['lsquic_http_headers_t',['../lsquic__types_8h.html#a91f399fbcccaf01b47ca209c5c170ba2',1,'lsquic_types.h']]], + ['lsquic_5fpackets_5fout_5ff',['lsquic_packets_out_f',['../lsquic_8h.html#aade9ff8d34cbcb33cd04a41377797fcf',1,'lsquic.h']]], + ['lsquic_5fstream_5fctx_5ft',['lsquic_stream_ctx_t',['../lsquic__types_8h.html#a4012fdeb11382d691dfe5f025206b8f3',1,'lsquic_types.h']]], + ['lsquic_5fstream_5ft',['lsquic_stream_t',['../lsquic__types_8h.html#ad286bcdd799bb3733f1d6568e25c57c6',1,'lsquic_types.h']]] +]; diff --git a/docs/html/search/variables_0.html b/docs/html/search/variables_0.html new file mode 100644 index 0000000..3835278 --- /dev/null +++ b/docs/html/search/variables_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js new file mode 100644 index 0000000..3e4a61a --- /dev/null +++ b/docs/html/search/variables_0.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['ea_5fpmi',['ea_pmi',['../structlsquic__engine__api.html#ab1c6af0c63f81cfa0c9ed6d6952b5482',1,'lsquic_engine_api']]], + ['es_5fcfcw',['es_cfcw',['../structlsquic__engine__settings.html#a2931ff6b1bc06429379debcc2c5cc5fa',1,'lsquic_engine_settings']]], + ['es_5fhandshake_5fto',['es_handshake_to',['../structlsquic__engine__settings.html#aeaef9bb4ecadb340cd05cfb85a6901a5',1,'lsquic_engine_settings']]], + ['es_5fhonor_5fprst',['es_honor_prst',['../structlsquic__engine__settings.html#ac5a3d759dcdf8915a98cbc3dd56d5f22',1,'lsquic_engine_settings']]], + ['es_5fidle_5fconn_5fto',['es_idle_conn_to',['../structlsquic__engine__settings.html#a4ba2bd3e85b8b4d0d929e31d675554e2',1,'lsquic_engine_settings']]], + ['es_5fmax_5fcfcw',['es_max_cfcw',['../structlsquic__engine__settings.html#a7297980e558cd2deafb955534520934b',1,'lsquic_engine_settings']]], + ['es_5fmax_5fheader_5flist_5fsize',['es_max_header_list_size',['../structlsquic__engine__settings.html#ab7b7eb8ab17eb47b8ea69d8ee8ef4a5b',1,'lsquic_engine_settings']]], + ['es_5fmax_5fstreams_5fin',['es_max_streams_in',['../structlsquic__engine__settings.html#ab6848de0e8025b08398ba43445de7405',1,'lsquic_engine_settings']]], + ['es_5fpace_5fpackets',['es_pace_packets',['../structlsquic__engine__settings.html#a90403ce7cbb10f9ddf438cfc1bd62530',1,'lsquic_engine_settings']]], + ['es_5fpendrw_5fcheck',['es_pendrw_check',['../structlsquic__engine__settings.html#a9baca38fb49c0028941a54de17a3580a',1,'lsquic_engine_settings']]], + ['es_5fproc_5ftime_5fthresh',['es_proc_time_thresh',['../structlsquic__engine__settings.html#aaa9758b94c763b457c4a6ccc4f1e8100',1,'lsquic_engine_settings']]], + ['es_5fprogress_5fcheck',['es_progress_check',['../structlsquic__engine__settings.html#a85a83ab74a018c293f83d9b78a797d8e',1,'lsquic_engine_settings']]], + ['es_5frw_5fonce',['es_rw_once',['../structlsquic__engine__settings.html#a59907a4c1080bd6eb5c5c7776b968af4',1,'lsquic_engine_settings']]], + ['es_5fsfcw',['es_sfcw',['../structlsquic__engine__settings.html#ac88c5a68eac5f324a1b1524a962be26d',1,'lsquic_engine_settings']]], + ['es_5fsilent_5fclose',['es_silent_close',['../structlsquic__engine__settings.html#aebf95d077a1a0de005b2ddac5afdfdc4',1,'lsquic_engine_settings']]], + ['es_5fsupport_5fnstp',['es_support_nstp',['../structlsquic__engine__settings.html#addfa7e19884a81f50ca4d573b9aa16a3',1,'lsquic_engine_settings']]], + ['es_5fsupport_5fpush',['es_support_push',['../structlsquic__engine__settings.html#a8b68eb068b40eb24e5e08cab097f077a',1,'lsquic_engine_settings']]], + ['es_5fsupport_5fsrej',['es_support_srej',['../structlsquic__engine__settings.html#adfd0c61d3243d85d3676876ca67e6466',1,'lsquic_engine_settings']]], + ['es_5fsupport_5ftcid0',['es_support_tcid0',['../structlsquic__engine__settings.html#a1570dc65c3b4d097987f08ade3cfd993',1,'lsquic_engine_settings']]], + ['es_5fua',['es_ua',['../structlsquic__engine__settings.html#a578718dc886cffa23e97fa11fb26138b',1,'lsquic_engine_settings']]], + ['es_5fversions',['es_versions',['../structlsquic__engine__settings.html#a9dca1ee29ab43ca9454b6b0a8d5e2799',1,'lsquic_engine_settings']]] +]; diff --git a/docs/html/search/variables_1.html b/docs/html/search/variables_1.html new file mode 100644 index 0000000..3c65cf2 --- /dev/null +++ b/docs/html/search/variables_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/variables_1.js b/docs/html/search/variables_1.js new file mode 100644 index 0000000..e455b23 --- /dev/null +++ b/docs/html/search/variables_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['on_5fgoaway_5freceived',['on_goaway_received',['../structlsquic__stream__if.html#afdab3bce65931517452d2ddd979596d7',1,'lsquic_stream_if']]], + ['on_5fnew_5fconn',['on_new_conn',['../structlsquic__stream__if.html#a1eb8c7575d67c7b1c75c472288751adb',1,'lsquic_stream_if']]], + ['on_5fnew_5fstream',['on_new_stream',['../structlsquic__stream__if.html#aa9c28eae8f3bd33d028578e0aef24402',1,'lsquic_stream_if']]] +]; diff --git a/docs/html/splitbar.png b/docs/html/splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/docs/html/splitbar.png differ diff --git a/docs/html/structlsquic__engine__api.html b/docs/html/structlsquic__engine__api.html new file mode 100644 index 0000000..af1a358 --- /dev/null +++ b/docs/html/structlsquic__engine__api.html @@ -0,0 +1,150 @@ + + + + + + +LiteSpeed QUIC Library: lsquic_engine_api Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
lsquic_engine_api Struct Reference
+
+
+
+Collaboration diagram for lsquic_engine_api:
+
+
Collaboration graph
+ + + + + + +
[legend]
+ + + + + + + + + + + + + + + + +

+Data Fields

+const struct lsquic_engine_settingsea_settings
 
+const struct lsquic_stream_ifea_stream_if
 
+void * ea_stream_if_ctx
 
+lsquic_packets_out_f ea_packets_out
 
+void * ea_packets_out_ctx
 
const struct lsquic_packout_mem_ifea_pmi
 
+void * ea_pmi_ctx
 
+

Field Documentation

+ +
+
+ + + + +
const struct lsquic_packout_mem_if* lsquic_engine_api::ea_pmi
+
+

Memory interface is optional.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/structlsquic__engine__api__coll__graph.map b/docs/html/structlsquic__engine__api__coll__graph.map new file mode 100644 index 0000000..76185c3 --- /dev/null +++ b/docs/html/structlsquic__engine__api__coll__graph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/html/structlsquic__engine__api__coll__graph.md5 b/docs/html/structlsquic__engine__api__coll__graph.md5 new file mode 100644 index 0000000..880ab6d --- /dev/null +++ b/docs/html/structlsquic__engine__api__coll__graph.md5 @@ -0,0 +1 @@ +c04c1378a86f745b5e7ac25d9f4e0de3 \ No newline at end of file diff --git a/docs/html/structlsquic__engine__api__coll__graph.png b/docs/html/structlsquic__engine__api__coll__graph.png new file mode 100644 index 0000000..1d20869 Binary files /dev/null and b/docs/html/structlsquic__engine__api__coll__graph.png differ diff --git a/docs/html/structlsquic__engine__settings.html b/docs/html/structlsquic__engine__settings.html new file mode 100644 index 0000000..3be91fb --- /dev/null +++ b/docs/html/structlsquic__engine__settings.html @@ -0,0 +1,443 @@ + + + + + + +LiteSpeed QUIC Library: lsquic_engine_settings Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
lsquic_engine_settings Struct Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Data Fields

unsigned es_versions
 
unsigned es_cfcw
 
unsigned es_sfcw
 
unsigned es_max_cfcw
 
+unsigned es_max_sfcw
 
unsigned es_max_streams_in
 
unsigned long es_handshake_to
 
unsigned long es_idle_conn_to
 
int es_silent_close
 
unsigned es_max_header_list_size
 
const char * es_ua
 
+uint32_t es_pdmd
 
+uint32_t es_aead
 
+uint32_t es_kexs
 
int es_support_srej
 
int es_support_push
 
int es_support_tcid0
 
int es_support_nstp
 
int es_honor_prst
 
unsigned es_progress_check
 
unsigned es_pendrw_check
 
int es_rw_once
 
unsigned es_proc_time_thresh
 
int es_pace_packets
 
+

Field Documentation

+ +
+
+ + + + +
unsigned lsquic_engine_settings::es_cfcw
+
+

Initial default CFCW.

+

In server mode, per-connection values may be set lower than this if resources are scarce.

+

Do not set es_cfcw and es_sfcw lower than LSQUIC_MIN_FCW.

+
See also
es_max_cfcw
+ +
+
+ +
+
+ + + + +
unsigned long lsquic_engine_settings::es_handshake_to
+
+

Handshake timeout in microseconds.

+

For client, this can be set to an arbitrary value (zero turns the timeout off).

+ +
+
+ +
+
+ + + + +
int lsquic_engine_settings::es_honor_prst
+
+

If set to true value, the library will drop connections when it receives corresponding Public Reset packet. The default is to ignore these packets.

+ +
+
+ +
+
+ + + + +
unsigned long lsquic_engine_settings::es_idle_conn_to
+
+

ICSL in microseconds

+ +
+
+ +
+
+ + + + +
unsigned lsquic_engine_settings::es_max_cfcw
+
+

This value is used to specify maximum allowed value CFCW is allowed to reach due to window auto-tuning. By default, this value is zero, which means that CFCW is not allowed to increase from its initial value.

+
See also
es_cfcw
+ +
+
+ +
+
+ + + + +
unsigned lsquic_engine_settings::es_max_header_list_size
+
+

This corresponds to SETTINGS_MAX_HEADER_LIST_SIZE (RFC 7540, Section 6.5.2). 0 means no limit. Defaults to LSQUIC_DF_MAX_HEADER_LIST_SIZE.

+ +
+
+ +
+
+ + + + +
unsigned lsquic_engine_settings::es_max_streams_in
+
+

MIDS

+ +
+
+ +
+
+ + + + +
int lsquic_engine_settings::es_pace_packets
+
+

If set to true, packet pacing is implemented per connection.

+

The default value is LSQUIC_DF_PACE_PACKETS.

+ +
+
+ +
+
+ + + + +
unsigned lsquic_engine_settings::es_pendrw_check
+
+

A non-zero value enables internal checks to identify suspected infinite loops in Pending RW Queue logic. The value of this setting is the number of times a connection on Pending RW Queue is allowed to be processed without making progress before it is banished from Pending RW Queue.

+

Progress is considered to have happened if any of the following occurs:

    +
  • User reads data, FIN, or new error (due to a reset) from a stream.
  • +
  • A new stream-related frame is packetized.
  • +
+

The defaut value is LSQUIC_DF_PENDRW_CHECK.

+ +
+
+ +
+
+ + + + +
unsigned lsquic_engine_settings::es_proc_time_thresh
+
+

If set, this value specifies that number of microseconds that functions lsquic_engine_proc_all(), lsquic_engine_process_conns_with_incoming(), lsquic_engine_process_conns_to_tick(), and lsquic_engine_process_conns_with_pend_rw() are allowed to spend before returning.

+

This is not an exact science and the connections must make progress, so the deadline is checked after all connections get a chance to tick and at least one batch of packets is sent out.

+

When processing function runs out of its time slice, immediate calls to lsquic_engine_has_pend_rw() and lsquic_engine_has_unsent_packets() return false.

+

The default value is LSQUIC_DF_PROC_TIME_THRESH.

+ +
+
+ +
+
+ + + + +
unsigned lsquic_engine_settings::es_progress_check
+
+

A non-zero value enables internal checks that identify suspected infinite loops in user on_read and on_write callbacks and break them. An infinite loop may occur if user code keeps on performing the same operation without checking status, e.g. reading from a closed stream etc.

+

The value of this parameter is as follows: should a callback return this number of times in a row without making progress (that is, reading, writing, or changing stream state), loop break will occur.

+

The defaut value is LSQUIC_DF_PROGRESS_CHECK.

+ +
+
+ +
+
+ + + + +
int lsquic_engine_settings::es_rw_once
+
+

A non-zero value make stream dispatch its read-write events once per call.

+

When zero, read and write events are dispatched until the stream is no longer readable or writeable, respectively, or until the user signals unwillingness to read or write using lsquic_stream_wantread() or lsquic_stream_wantwrite() or shuts down the stream.

+

The default value is LSQUIC_DF_RW_ONCE.

+ +
+
+ +
+
+ + + + +
unsigned lsquic_engine_settings::es_sfcw
+
+

Initial default SFCW.

+

In server mode, per-connection values may be set lower than this if resources are scarce.

+

Do not set es_cfcw and es_sfcw lower than LSQUIC_MIN_FCW.

+
See also
es_max_sfcw
+ +
+
+ +
+
+ + + + +
int lsquic_engine_settings::es_silent_close
+
+

SCLS (silent close)

+ +
+
+ +
+
+ + + + +
int lsquic_engine_settings::es_support_nstp
+
+

Q037 and higher support "No STOP_WAITING frame" mode. When set, the client will send NSTP option in its Client Hello message and will not sent STOP_WAITING frames, while ignoring incoming STOP_WAITING frames, if any. Note that if the version negotiation happens to downgrade the client below Q037, this mode will *not* be used.

+

This option does not affect the server, as it must support NSTP mode if it was specified by the client.

+ +
+
+ +
+
+ + + + +
int lsquic_engine_settings::es_support_push
+
+

Setting this value to 0 means that

+

For client: a) we send a SETTINGS frame to indicate that we do not support server push; and b) All incoming pushed streams get reset immediately. (For maximum effect, set es_max_streams_in to 0.)

+ +
+
+ +
+
+ + + + +
int lsquic_engine_settings::es_support_srej
+
+

Support SREJ: for client side, this means supporting server's SREJ responses (this does not work yet) and for server side, this means generating SREJ instead of REJ when appropriate.

+ +
+
+ +
+
+ + + + +
int lsquic_engine_settings::es_support_tcid0
+
+

If set to true value, the server will not include connection ID in outgoing packets if client's CHLO specifies TCID=0.

+

For client, this means including TCID=0 into CHLO message. TODO: this does not work yet.

+ +
+
+ +
+
+ + + + +
const char* lsquic_engine_settings::es_ua
+
+

UAID – User-Agent ID. Defaults to LSQUIC_DF_UA.

+ +
+
+ +
+
+ + + + +
unsigned lsquic_engine_settings::es_versions
+
+

This is a bit mask wherein each bit corresponds to a value in enum lsquic_version. Client starts negotiating with the highest version and goes down. Server supports either of the versions specified here.

+
See also
lsquic_version
+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/structlsquic__http__header.html b/docs/html/structlsquic__http__header.html new file mode 100644 index 0000000..75a153a --- /dev/null +++ b/docs/html/structlsquic__http__header.html @@ -0,0 +1,111 @@ + + + + + + +LiteSpeed QUIC Library: lsquic_http_header Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
lsquic_http_header Struct Reference
+
+
+ + + + + + +

+Data Fields

+struct iovec name
 
+struct iovec value
 
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/structlsquic__http__headers.html b/docs/html/structlsquic__http__headers.html new file mode 100644 index 0000000..3d05161 --- /dev/null +++ b/docs/html/structlsquic__http__headers.html @@ -0,0 +1,119 @@ + + + + + + +LiteSpeed QUIC Library: lsquic_http_headers Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
lsquic_http_headers Struct Reference
+
+
+
+Collaboration diagram for lsquic_http_headers:
+
+
Collaboration graph
+ + + +
[legend]
+ + + + + + +

+Data Fields

+int count
 
+lsquic_http_header_theaders
 
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/structlsquic__http__headers__coll__graph.map b/docs/html/structlsquic__http__headers__coll__graph.map new file mode 100644 index 0000000..af1c2d0 --- /dev/null +++ b/docs/html/structlsquic__http__headers__coll__graph.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/structlsquic__http__headers__coll__graph.md5 b/docs/html/structlsquic__http__headers__coll__graph.md5 new file mode 100644 index 0000000..17f70af --- /dev/null +++ b/docs/html/structlsquic__http__headers__coll__graph.md5 @@ -0,0 +1 @@ +ac8a13c8e1bd555c86750c70cab5e55e \ No newline at end of file diff --git a/docs/html/structlsquic__http__headers__coll__graph.png b/docs/html/structlsquic__http__headers__coll__graph.png new file mode 100644 index 0000000..4e06e75 Binary files /dev/null and b/docs/html/structlsquic__http__headers__coll__graph.png differ diff --git a/docs/html/structlsquic__logger__if.html b/docs/html/structlsquic__logger__if.html new file mode 100644 index 0000000..66bc53f --- /dev/null +++ b/docs/html/structlsquic__logger__if.html @@ -0,0 +1,108 @@ + + + + + + +LiteSpeed QUIC Library: lsquic_logger_if Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
lsquic_logger_if Struct Reference
+
+
+ + + + +

+Data Fields

+int(* vprintf )(void *logger_ctx, const char *fmt, va_list args)
 
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/structlsquic__out__spec.html b/docs/html/structlsquic__out__spec.html new file mode 100644 index 0000000..05dd18c --- /dev/null +++ b/docs/html/structlsquic__out__spec.html @@ -0,0 +1,120 @@ + + + + + + +LiteSpeed QUIC Library: lsquic_out_spec Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
lsquic_out_spec Struct Reference
+
+
+ + + + + + + + + + + + +

+Data Fields

+const unsigned char * buf
 
+size_t sz
 
+const struct sockaddr * local_sa
 
+const struct sockaddr * dest_sa
 
+void * peer_ctx
 
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/structlsquic__packout__mem__if.html b/docs/html/structlsquic__packout__mem__if.html new file mode 100644 index 0000000..9066f2e --- /dev/null +++ b/docs/html/structlsquic__packout__mem__if.html @@ -0,0 +1,116 @@ + + + + + + +LiteSpeed QUIC Library: lsquic_packout_mem_if Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
lsquic_packout_mem_if Struct Reference
+
+
+ +

#include <lsquic.h>

+ + + + + + +

+Data Fields

+void *(* pmi_allocate )(void *pmi_ctx, size_t sz)
 
+void(* pmi_release )(void *pmi_ctx, void *obj)
 
+

Detailed Description

+

The packet out memory interface is used by LSQUIC to get buffers to which outgoing packets will be written before they are passed to ea_packets_out callback. pmi_release() is called at some point, usually after the packet is sent successfully, to return the buffer to the pool.

+

If not specified, malloc() and free() are used.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/structlsquic__stream__if.html b/docs/html/structlsquic__stream__if.html new file mode 100644 index 0000000..c926e66 --- /dev/null +++ b/docs/html/structlsquic__stream__if.html @@ -0,0 +1,171 @@ + + + + + + +LiteSpeed QUIC Library: lsquic_stream_if Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
LiteSpeed QUIC Library +
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
lsquic_stream_if Struct Reference
+
+
+ +

The definition of callback functions call by lsquic_stream to process events. + More...

+ +

#include <lsquic.h>

+ + + + + + + + + + + + + + + + +

+Data Fields

lsquic_conn_ctx_t *(* on_new_conn )(void *stream_if_ctx, lsquic_conn_t *c)
 
void(* on_goaway_received )(lsquic_conn_t *c)
 
+void(* on_conn_closed )(lsquic_conn_t *c)
 
lsquic_stream_ctx_t *(* on_new_stream )(void *stream_if_ctx, lsquic_stream_t *s)
 
+void(* on_read )(lsquic_stream_t *s, lsquic_stream_ctx_t *h)
 
+void(* on_write )(lsquic_stream_t *s, lsquic_stream_ctx_t *h)
 
+void(* on_close )(lsquic_stream_t *s, lsquic_stream_ctx_t *h)
 
+

Detailed Description

+

The definition of callback functions call by lsquic_stream to process events.

+

Field Documentation

+ +
+
+ + + + +
void(* lsquic_stream_if::on_goaway_received) (lsquic_conn_t *c)
+
+

This is called when our side received GOAWAY frame. After this, new streams should not be created. The callback is optional.

+ +
+
+ +
+
+ + + + +
lsquic_conn_ctx_t*(* lsquic_stream_if::on_new_conn) (void *stream_if_ctx, lsquic_conn_t *c)
+
+

Use lsquic_conn_get_ctx to get back the context. It is OK for this function to return NULL.

+ +
+
+ +
+
+ + + + +
lsquic_stream_ctx_t*(* lsquic_stream_if::on_new_stream) (void *stream_if_ctx, lsquic_stream_t *s)
+
+

If you need to initiate a connection, call lsquic_conn_make_stream(). This will cause `on_new_stream' callback to be called when appropriate (this operation is delayed when maximum number of outgoing streams is reached).

+

After `on_close' is called, the stream is no longer accessible.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/sync_off.png b/docs/html/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/docs/html/sync_off.png differ diff --git a/docs/html/sync_on.png b/docs/html/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/docs/html/sync_on.png differ diff --git a/docs/html/tab_a.png b/docs/html/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/docs/html/tab_a.png differ diff --git a/docs/html/tab_b.png b/docs/html/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/docs/html/tab_b.png differ diff --git a/docs/html/tab_h.png b/docs/html/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/docs/html/tab_h.png differ diff --git a/docs/html/tab_s.png b/docs/html/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/docs/html/tab_s.png differ diff --git a/docs/html/tabs.css b/docs/html/tabs.css new file mode 100644 index 0000000..9cf578f --- /dev/null +++ b/docs/html/tabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/docs/index.html b/docs/index.html index 7ce5354..f329c82 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1 +1,9 @@ -

Hello, world!

+ + + LiteSpeed QUIC Client Documentation + + +

LiteSpeed QUIC Client Documentation

+

Available in HTML format (doxygen) + +