[server] Add support for hash-map based data index (and minor improvements)
This commit is contained in:
parent
9fbae9fccc
commit
2905bf4ef9
2 changed files with 282 additions and 145 deletions
|
@ -36,6 +36,9 @@ import . "github.com/volution/kawipiko/lib/server"
|
||||||
type server struct {
|
type server struct {
|
||||||
httpServer *fasthttp.Server
|
httpServer *fasthttp.Server
|
||||||
cdbReader *cdb.CDB
|
cdbReader *cdb.CDB
|
||||||
|
cachedFileFingerprints map[string][]byte
|
||||||
|
cachedDataMeta map[string][]byte
|
||||||
|
cachedDataContent map[string][]byte
|
||||||
debug bool
|
debug bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +63,8 @@ func (_server *server) Serve (_context *fasthttp.RequestCtx) () {
|
||||||
|
|
||||||
_method := _requestHeaders.Method ()
|
_method := _requestHeaders.Method ()
|
||||||
|
|
||||||
_path := append (_pathBuffer[:0], _requestHeaders.RequestURI () ...)
|
_path := _pathBuffer[:0]
|
||||||
|
_path = append (_path, _requestHeaders.RequestURI () ...)
|
||||||
if _pathLimit := bytes.IndexByte (_path, '?'); _pathLimit > 0 {
|
if _pathLimit := bytes.IndexByte (_path, '?'); _pathLimit > 0 {
|
||||||
_path = _path[: _pathLimit]
|
_path = _path[: _pathLimit]
|
||||||
}
|
}
|
||||||
|
@ -93,7 +97,7 @@ func (_server *server) Serve (_context *fasthttp.RequestCtx) () {
|
||||||
if _code, _error := strconv.Atoi (BytesToString (_code)); _error == nil {
|
if _code, _error := strconv.Atoi (BytesToString (_code)); _error == nil {
|
||||||
_banner, _bannerFound := ErrorBannersData[uint (_code)]
|
_banner, _bannerFound := ErrorBannersData[uint (_code)]
|
||||||
if (_code > 0) && _bannerFound {
|
if (_code > 0) && _bannerFound {
|
||||||
_server.ServeStatic (_context, http.StatusOK, []byte (_banner), ErrorBannerContentType, ErrorBannerContentEncoding, true)
|
_server.ServeStatic (_context, http.StatusOK, _banner, ErrorBannerContentType, ErrorBannerContentEncoding, true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -134,25 +138,32 @@ func (_server *server) Serve (_context *fasthttp.RequestCtx) () {
|
||||||
}
|
}
|
||||||
_pathSuffixHasSlash := (len (_pathSuffix) != 0) && (_pathSuffix[0] == '/')
|
_pathSuffixHasSlash := (len (_pathSuffix) != 0) && (_pathSuffix[0] == '/')
|
||||||
|
|
||||||
_key := _keyBuffer[:0]
|
if _server.cachedFileFingerprints != nil {
|
||||||
_key = append (_key, _namespace ...)
|
_key := _keyBuffer[:0]
|
||||||
_key = append (_key, ':')
|
_key = append (_key, _path ...)
|
||||||
_key = append (_key, _path ...)
|
_key = append (_key, _pathSuffix ...)
|
||||||
_key = append (_key, _pathSuffix ...)
|
_fingerprints, _ = _server.cachedFileFingerprints[BytesToString (_key)]
|
||||||
|
|
||||||
if _value, _error := _server.cdbReader.GetWithCdbHash (_key); _error == nil {
|
|
||||||
if _value != nil {
|
|
||||||
_fingerprints = _value
|
|
||||||
if ((_namespace == NamespaceFoldersContent) || _pathSuffixHasSlash) && (!_pathIsRoot && !_pathHasSlash) {
|
|
||||||
_path = append (_path, '/')
|
|
||||||
_server.ServeRedirect (_context, http.StatusTemporaryRedirect, _path, true)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
break _loop_1
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
_server.ServeError (_context, http.StatusInternalServerError, _error, false)
|
_key := _keyBuffer[:0]
|
||||||
return
|
_key = append (_key, _namespace ...)
|
||||||
|
_key = append (_key, ':')
|
||||||
|
_key = append (_key, _path ...)
|
||||||
|
_key = append (_key, _pathSuffix ...)
|
||||||
|
if _value, _error := _server.cdbReader.GetWithCdbHash (_key); _error == nil {
|
||||||
|
_fingerprints = _value
|
||||||
|
} else {
|
||||||
|
_server.ServeError (_context, http.StatusInternalServerError, _error, false)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if _fingerprints != nil {
|
||||||
|
if ((_namespace == NamespaceFoldersContent) || _pathSuffixHasSlash) && (!_pathIsRoot && !_pathHasSlash) {
|
||||||
|
_path = append (_path, '/')
|
||||||
|
_server.ServeRedirect (_context, http.StatusTemporaryRedirect, _path, true)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
break _loop_1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -170,20 +181,27 @@ func (_server *server) Serve (_context *fasthttp.RequestCtx) () {
|
||||||
_pathLimit >= 0;
|
_pathLimit >= 0;
|
||||||
_pathLimit = bytes.LastIndexByte (_path[: _pathLimit], '/') {
|
_pathLimit = bytes.LastIndexByte (_path[: _pathLimit], '/') {
|
||||||
|
|
||||||
_key := _keyBuffer[:0]
|
if _server.cachedFileFingerprints != nil {
|
||||||
_key = append (_key, NamespaceFilesContent ...)
|
_key := _keyBuffer[:0]
|
||||||
_key = append (_key, ':')
|
_key = append (_key, _path[: _pathLimit] ...)
|
||||||
_key = append (_key, _path[: _pathLimit] ...)
|
_key = append (_key, "/*" ...)
|
||||||
_key = append (_key, "/*" ...)
|
_fingerprints, _ = _server.cachedFileFingerprints[BytesToString (_key)]
|
||||||
|
|
||||||
if _value, _error := _server.cdbReader.GetWithCdbHash (_key); _error == nil {
|
|
||||||
if _value != nil {
|
|
||||||
_fingerprints = _value
|
|
||||||
break _loop_2
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
_server.ServeError (_context, http.StatusInternalServerError, _error, false)
|
_key := _keyBuffer[:0]
|
||||||
return
|
_key = append (_key, NamespaceFilesContent ...)
|
||||||
|
_key = append (_key, ':')
|
||||||
|
_key = append (_key, _path[: _pathLimit] ...)
|
||||||
|
_key = append (_key, "/*" ...)
|
||||||
|
if _value, _error := _server.cdbReader.GetWithCdbHash (_key); _error == nil {
|
||||||
|
_fingerprints = _value
|
||||||
|
} else {
|
||||||
|
_server.ServeError (_context, http.StatusInternalServerError, _error, false)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if _fingerprints != nil {
|
||||||
|
break _loop_2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -199,77 +217,81 @@ func (_server *server) Serve (_context *fasthttp.RequestCtx) () {
|
||||||
_server.ServeError (_context, http.StatusInternalServerError, nil, false)
|
_server.ServeError (_context, http.StatusInternalServerError, nil, false)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_fingerprintContent := _fingerprints[:64]
|
_fingerprintContent := _fingerprints[0:64]
|
||||||
_fingerprintMeta := _fingerprints[65:]
|
_fingerprintMeta := _fingerprints[65:129]
|
||||||
|
|
||||||
_responseHeaders.SetCanonical ([]byte ("Cache-Control"), []byte ("public, immutable, max-age=3600"))
|
_responseHeaders.SetCanonical ([]byte ("Cache-Control"), []byte ("public, immutable, max-age=3600"))
|
||||||
|
|
||||||
var _data []byte
|
var _data []byte
|
||||||
{
|
if _server.cachedDataContent != nil {
|
||||||
|
_data, _ = _server.cachedDataContent[BytesToString (_fingerprintContent)]
|
||||||
|
} else {
|
||||||
_key := _keyBuffer[:0]
|
_key := _keyBuffer[:0]
|
||||||
_key = append (_key, NamespaceDataContent ...)
|
_key = append (_key, NamespaceDataContent ...)
|
||||||
_key = append (_key, ':')
|
_key = append (_key, ':')
|
||||||
_key = append (_key, _fingerprintContent ...)
|
_key = append (_key, _fingerprintContent ...)
|
||||||
if _value, _error := _server.cdbReader.GetWithCdbHash (_key); _error == nil {
|
if _value, _error := _server.cdbReader.GetWithCdbHash (_key); _error == nil {
|
||||||
if _value != nil {
|
_data = _value
|
||||||
_data = _value
|
|
||||||
} else {
|
|
||||||
log.Printf ("[ee] [0165c193] missing data content for `%s`!\n", _requestHeaders.RequestURI ())
|
|
||||||
_server.ServeError (_context, http.StatusInternalServerError, nil, false)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
_server.ServeError (_context, http.StatusInternalServerError, _error, false)
|
_server.ServeError (_context, http.StatusInternalServerError, _error, false)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if _data == nil {
|
||||||
|
log.Printf ("[ee] [0165c193] missing data content for `%s`!\n", _requestHeaders.RequestURI ())
|
||||||
|
_server.ServeError (_context, http.StatusInternalServerError, nil, false)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
_responseStatus := http.StatusOK
|
var _dataMetaRaw []byte
|
||||||
{
|
if _server.cachedDataMeta != nil {
|
||||||
|
_dataMetaRaw, _ = _server.cachedDataMeta[BytesToString (_fingerprintMeta)]
|
||||||
|
} else {
|
||||||
_key := _keyBuffer[:0]
|
_key := _keyBuffer[:0]
|
||||||
_key = append (_key, NamespaceDataMetadata ...)
|
_key = append (_key, NamespaceDataMetadata ...)
|
||||||
_key = append (_key, ':')
|
_key = append (_key, ':')
|
||||||
_key = append (_key, _fingerprintMeta ...)
|
_key = append (_key, _fingerprintMeta ...)
|
||||||
if _value, _error := _server.cdbReader.GetWithCdbHash (_key); _error == nil {
|
if _value, _error := _server.cdbReader.GetWithCdbHash (_key); _error == nil {
|
||||||
if _value != nil {
|
_dataMetaRaw = _value
|
||||||
_handleHeader := func (_name []byte, _value []byte) {
|
|
||||||
switch {
|
|
||||||
case len (_name) == 0 : {
|
|
||||||
log.Printf ("[90009821] invalid data metadata for `%s`!\n", _requestHeaders.RequestURI ())
|
|
||||||
_responseStatus = http.StatusInternalServerError
|
|
||||||
}
|
|
||||||
case _name[0] != '_' :
|
|
||||||
_responseHeaders.SetCanonical (_name, _value)
|
|
||||||
case bytes.Equal (_name, []byte ("_Status")) :
|
|
||||||
if _value, _error := strconv.Atoi (BytesToString (_value)); _error == nil {
|
|
||||||
if (_value >= 200) && (_value <= 599) {
|
|
||||||
_responseStatus = _value
|
|
||||||
} else {
|
|
||||||
log.Printf ("[c2f7ec36] invalid data metadata for `%s`!\n", _requestHeaders.RequestURI ())
|
|
||||||
_responseStatus = http.StatusInternalServerError
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log.Printf ("[beedae55] invalid data metadata for `%s`!\n", _requestHeaders.RequestURI ())
|
|
||||||
_responseStatus = http.StatusInternalServerError
|
|
||||||
}
|
|
||||||
default :
|
|
||||||
log.Printf ("[7acc7d90] invalid data metadata for `%s`!\n", _requestHeaders.RequestURI ())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if _error := MetadataDecodeIterate (_value, _handleHeader); _error != nil {
|
|
||||||
_server.ServeError (_context, http.StatusInternalServerError, _error, false)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log.Printf ("[ee] [e8702411] missing data metadata for `%s`!\n", _requestHeaders.RequestURI ())
|
|
||||||
_server.ServeError (_context, http.StatusInternalServerError, nil, false)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
_server.ServeError (_context, http.StatusInternalServerError, _error, false)
|
_server.ServeError (_context, http.StatusInternalServerError, _error, false)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if _dataMetaRaw == nil {
|
||||||
|
log.Printf ("[ee] [e8702411] missing data metadata for `%s`!\n", _requestHeaders.RequestURI ())
|
||||||
|
_server.ServeError (_context, http.StatusInternalServerError, nil, false)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
_responseStatus := http.StatusOK
|
||||||
|
_handleHeader := func (_name []byte, _value []byte) {
|
||||||
|
switch {
|
||||||
|
case len (_name) == 0 :
|
||||||
|
log.Printf ("[90009821] invalid data metadata for `%s`!\n", _requestHeaders.RequestURI ())
|
||||||
|
_responseStatus = http.StatusInternalServerError
|
||||||
|
case _name[0] != '_' :
|
||||||
|
_responseHeaders.SetCanonical (_name, _value)
|
||||||
|
case bytes.Equal (_name, []byte ("_Status")) :
|
||||||
|
if _value, _error := strconv.Atoi (BytesToString (_value)); _error == nil {
|
||||||
|
if (_value >= 200) && (_value <= 599) {
|
||||||
|
_responseStatus = _value
|
||||||
|
} else {
|
||||||
|
log.Printf ("[c2f7ec36] invalid data metadata for `%s`!\n", _requestHeaders.RequestURI ())
|
||||||
|
_responseStatus = http.StatusInternalServerError
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Printf ("[beedae55] invalid data metadata for `%s`!\n", _requestHeaders.RequestURI ())
|
||||||
|
_responseStatus = http.StatusInternalServerError
|
||||||
|
}
|
||||||
|
default :
|
||||||
|
log.Printf ("[7acc7d90] invalid data metadata for `%s`!\n", _requestHeaders.RequestURI ())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _error := MetadataDecodeIterate (_dataMetaRaw, _handleHeader); _error != nil {
|
||||||
|
_server.ServeError (_context, http.StatusInternalServerError, _error, false)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if _server.debug {
|
if _server.debug {
|
||||||
log.Printf ("[dd] [b15f3cad] serving for `%s`...\n", _requestHeaders.RequestURI ())
|
log.Printf ("[dd] [b15f3cad] serving for `%s`...\n", _requestHeaders.RequestURI ())
|
||||||
|
@ -337,7 +359,7 @@ func (_server *server) ServeError (_context *fasthttp.RequestCtx, _status uint,
|
||||||
_responseHeaders.SetCanonical ([]byte ("Content-Encoding"), []byte (ErrorBannerContentEncoding))
|
_responseHeaders.SetCanonical ([]byte ("Content-Encoding"), []byte (ErrorBannerContentEncoding))
|
||||||
|
|
||||||
if _banner, _bannerFound := ErrorBannersData[_status]; _bannerFound {
|
if _banner, _bannerFound := ErrorBannersData[_status]; _bannerFound {
|
||||||
_response.SetBodyRaw ([]byte (_banner))
|
_response.SetBodyRaw (_banner)
|
||||||
}
|
}
|
||||||
|
|
||||||
_response.SetStatusCode (int (_status))
|
_response.SetStatusCode (int (_status))
|
||||||
|
@ -361,6 +383,9 @@ func main_0 () (error) {
|
||||||
var _archiveInmem bool
|
var _archiveInmem bool
|
||||||
var _archiveMmap bool
|
var _archiveMmap bool
|
||||||
var _archivePreload bool
|
var _archivePreload bool
|
||||||
|
var _indexPaths bool
|
||||||
|
var _indexDataMeta bool
|
||||||
|
var _indexDataContent bool
|
||||||
var _processes uint
|
var _processes uint
|
||||||
var _threads uint
|
var _threads uint
|
||||||
var _slave uint
|
var _slave uint
|
||||||
|
@ -403,6 +428,11 @@ func main_0 () (error) {
|
||||||
--archive-mmap (memory-mapped archive file)
|
--archive-mmap (memory-mapped archive file)
|
||||||
--archive-preload (preload archive file)
|
--archive-preload (preload archive file)
|
||||||
|
|
||||||
|
--index-all
|
||||||
|
--index-paths
|
||||||
|
--index-data-meta
|
||||||
|
--index-data-content
|
||||||
|
|
||||||
--bind <ip>:<port>
|
--bind <ip>:<port>
|
||||||
|
|
||||||
--processes <count> (of slave processes)
|
--processes <count> (of slave processes)
|
||||||
|
@ -421,6 +451,10 @@ func main_0 () (error) {
|
||||||
_archiveInmem_0 := _flags.Bool ("archive-inmem", false, "")
|
_archiveInmem_0 := _flags.Bool ("archive-inmem", false, "")
|
||||||
_archiveMmap_0 := _flags.Bool ("archive-mmap", false, "")
|
_archiveMmap_0 := _flags.Bool ("archive-mmap", false, "")
|
||||||
_archivePreload_0 := _flags.Bool ("archive-preload", false, "")
|
_archivePreload_0 := _flags.Bool ("archive-preload", false, "")
|
||||||
|
_indexAll_0 := _flags.Bool ("index-all", false, "")
|
||||||
|
_indexPaths_0 := _flags.Bool ("index-paths", false, "")
|
||||||
|
_indexDataMeta_0 := _flags.Bool ("index-data-meta", false, "")
|
||||||
|
_indexDataContent_0 := _flags.Bool ("index-data-content", false, "")
|
||||||
_processes_0 := _flags.Uint ("processes", 0, "")
|
_processes_0 := _flags.Uint ("processes", 0, "")
|
||||||
_threads_0 := _flags.Uint ("threads", 0, "")
|
_threads_0 := _flags.Uint ("threads", 0, "")
|
||||||
_slave_0 := _flags.Uint ("slave", 0, "")
|
_slave_0 := _flags.Uint ("slave", 0, "")
|
||||||
|
@ -435,6 +469,10 @@ func main_0 () (error) {
|
||||||
_archiveInmem = *_archiveInmem_0
|
_archiveInmem = *_archiveInmem_0
|
||||||
_archiveMmap = *_archiveMmap_0
|
_archiveMmap = *_archiveMmap_0
|
||||||
_archivePreload = *_archivePreload_0
|
_archivePreload = *_archivePreload_0
|
||||||
|
_indexAll := *_indexAll_0
|
||||||
|
_indexPaths = _indexAll || *_indexPaths_0
|
||||||
|
_indexDataMeta = _indexAll || *_indexDataMeta_0
|
||||||
|
_indexDataContent = _indexAll || *_indexDataContent_0
|
||||||
_processes = *_processes_0
|
_processes = *_processes_0
|
||||||
_threads = *_threads_0
|
_threads = *_threads_0
|
||||||
_slave = *_slave_0
|
_slave = *_slave_0
|
||||||
|
@ -707,7 +745,7 @@ func main_0 () (error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if _schemaVersion, _error := _cdbReader.Get ([]byte (NamespaceSchemaVersion)); _error == nil {
|
if _schemaVersion, _error := _cdbReader.GetWithCdbHash ([]byte (NamespaceSchemaVersion)); _error == nil {
|
||||||
if _schemaVersion == nil {
|
if _schemaVersion == nil {
|
||||||
AbortError (nil, "[09316866] missing archive schema version!")
|
AbortError (nil, "[09316866] missing archive schema version!")
|
||||||
} else if string (_schemaVersion) != CurrentSchemaVersion {
|
} else if string (_schemaVersion) != CurrentSchemaVersion {
|
||||||
|
@ -717,10 +755,109 @@ func main_0 () (error) {
|
||||||
AbortError (_error, "[87cae197] failed opening archive!")
|
AbortError (_error, "[87cae197] failed opening archive!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _cachedFileFingerprints map[string][]byte
|
||||||
|
if _indexPaths {
|
||||||
|
_cachedFileFingerprints = make (map[string][]byte, 128 * 1024)
|
||||||
|
}
|
||||||
|
var _cachedDataMeta map[string][]byte
|
||||||
|
if _indexDataMeta {
|
||||||
|
_cachedDataMeta = make (map[string][]byte, 128 * 1024)
|
||||||
|
}
|
||||||
|
var _cachedDataContent map[string][]byte
|
||||||
|
if _indexDataContent {
|
||||||
|
_cachedDataContent = make (map[string][]byte, 128 * 1024)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _indexPaths || _indexDataMeta || _indexDataContent {
|
||||||
|
if _debug {
|
||||||
|
log.Printf ("[ii] [fa5338fd] indexing archive...\n")
|
||||||
|
}
|
||||||
|
if _filesIndex, _error := _cdbReader.GetWithCdbHash ([]byte (NamespaceFilesIndex)); _error == nil {
|
||||||
|
if _filesIndex != nil {
|
||||||
|
_keyBuffer := [1024]byte {}
|
||||||
|
for {
|
||||||
|
_offset := bytes.IndexByte (_filesIndex, '\n')
|
||||||
|
if _offset == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if _offset == -1 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
_filePath := _filesIndex[: _offset]
|
||||||
|
_filesIndex = _filesIndex[_offset + 1 :]
|
||||||
|
var _fingerprints []byte
|
||||||
|
var _fingerprintContent []byte
|
||||||
|
var _fingerprintMeta []byte
|
||||||
|
{
|
||||||
|
_key := _keyBuffer[:0]
|
||||||
|
_key = append (_key, NamespaceFilesContent ...)
|
||||||
|
_key = append (_key, ':')
|
||||||
|
_key = append (_key, _filePath ...)
|
||||||
|
if _fingerprints_0, _error := _cdbReader.GetWithCdbHash (_key); _error == nil {
|
||||||
|
if _fingerprints_0 != nil {
|
||||||
|
_fingerprints = _fingerprints_0
|
||||||
|
_fingerprintContent = _fingerprints[0:64]
|
||||||
|
_fingerprintMeta = _fingerprints[65:129]
|
||||||
|
} else {
|
||||||
|
AbortError (_error, "[460b3cf1] failed indexing archive!")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
AbortError (_error, "[216f2075] failed indexing archive!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _indexPaths {
|
||||||
|
_cachedFileFingerprints[BytesToString (_filePath)] = _fingerprints
|
||||||
|
}
|
||||||
|
if _indexDataMeta {
|
||||||
|
if _, _wasCached := _cachedDataMeta[BytesToString (_fingerprintMeta)]; !_wasCached {
|
||||||
|
_key := _keyBuffer[:0]
|
||||||
|
_key = append (_key, NamespaceDataMetadata ...)
|
||||||
|
_key = append (_key, ':')
|
||||||
|
_key = append (_key, _fingerprintMeta ...)
|
||||||
|
if _dataMeta, _error := _cdbReader.GetWithCdbHash (_key); _error == nil {
|
||||||
|
if _dataMeta != nil {
|
||||||
|
_cachedDataMeta[BytesToString (_fingerprintMeta)] = _dataMeta
|
||||||
|
} else {
|
||||||
|
AbortError (_error, "[6df556bf] failed indexing archive!")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
AbortError (_error, "[0d730134] failed indexing archive!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _indexDataContent {
|
||||||
|
if _, _wasCached := _cachedDataContent[BytesToString (_fingerprintContent)]; !_wasCached {
|
||||||
|
_key := _keyBuffer[:0]
|
||||||
|
_key = append (_key, NamespaceDataContent ...)
|
||||||
|
_key = append (_key, ':')
|
||||||
|
_key = append (_key, _fingerprintContent ...)
|
||||||
|
if _dataContent, _error := _cdbReader.GetWithCdbHash (_key); _error == nil {
|
||||||
|
if _dataContent != nil {
|
||||||
|
_cachedDataContent[BytesToString (_fingerprintContent)] = _dataContent
|
||||||
|
} else {
|
||||||
|
AbortError (_error, "[4e27fe46] failed indexing archive!")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
AbortError (_error, "[532845ad] failed indexing archive!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Printf ("[ww] [30314f31] missing archive files index; ignoring!\n")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
AbortError (_error, "[82299b3d] failed indexing arcdive!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
_server := & server {
|
_server := & server {
|
||||||
httpServer : nil,
|
httpServer : nil,
|
||||||
cdbReader : _cdbReader,
|
cdbReader : _cdbReader,
|
||||||
|
cachedFileFingerprints : _cachedFileFingerprints,
|
||||||
|
cachedDataMeta : _cachedDataMeta,
|
||||||
|
cachedDataContent : _cachedDataContent,
|
||||||
debug : _debug,
|
debug : _debug,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ import . "github.com/volution/kawipiko/lib/common"
|
||||||
var AboutBannerContentType = MimeTypeText
|
var AboutBannerContentType = MimeTypeText
|
||||||
var AboutBannerContentEncoding = "identity"
|
var AboutBannerContentEncoding = "identity"
|
||||||
|
|
||||||
var AboutBannerData = (
|
var AboutBannerData = []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
". .\n" +
|
". .\n" +
|
||||||
". __ __ .\n" +
|
". __ __ .\n" +
|
||||||
|
@ -57,10 +57,10 @@ var AboutBannerData = (
|
||||||
var ErrorBannerContentType = MimeTypeText
|
var ErrorBannerContentType = MimeTypeText
|
||||||
var ErrorBannerContentEncoding = "identity"
|
var ErrorBannerContentEncoding = "identity"
|
||||||
|
|
||||||
var ErrorBannersData = map[uint]string {
|
var ErrorBannersData = map[uint][]byte {
|
||||||
|
|
||||||
|
|
||||||
100 : (
|
100 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -84,7 +84,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
101 : (
|
101 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -112,7 +112,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
102 : (
|
102 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -136,7 +136,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
103 : (
|
103 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -160,7 +160,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
200 : (
|
200 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -184,7 +184,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
201 : (
|
201 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -208,7 +208,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
202 : (
|
202 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -232,7 +232,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
203 : (
|
203 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -260,7 +260,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
204 : (
|
204 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -284,7 +284,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
205 : (
|
205 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -308,7 +308,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
206 : (
|
206 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -332,7 +332,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
207 : (
|
207 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -356,7 +356,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
208 : (
|
208 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -384,7 +384,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
226 : (
|
226 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -408,7 +408,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
300 : (
|
300 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -432,7 +432,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
301 : (
|
301 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -460,7 +460,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
302 : (
|
302 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -484,7 +484,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
303 : (
|
303 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -508,7 +508,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
304 : (
|
304 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -532,7 +532,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
305 : (
|
305 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -556,7 +556,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
306 : (
|
306 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -580,7 +580,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
307 : (
|
307 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -608,7 +608,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
308 : (
|
308 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -636,7 +636,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
400 : (
|
400 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -660,7 +660,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
401 : (
|
401 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -684,7 +684,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
402 : (
|
402 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -708,7 +708,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
403 : (
|
403 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -732,7 +732,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
404 : (
|
404 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -756,7 +756,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
405 : (
|
405 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -784,7 +784,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
406 : (
|
406 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -808,7 +808,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
407 : (
|
407 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -840,7 +840,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
408 : (
|
408 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -864,7 +864,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
409 : (
|
409 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -888,7 +888,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
410 : (
|
410 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -912,7 +912,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
411 : (
|
411 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -936,7 +936,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
412 : (
|
412 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -964,7 +964,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
413 : (
|
413 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -992,7 +992,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
414 : (
|
414 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1016,7 +1016,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
415 : (
|
415 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1044,7 +1044,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
416 : (
|
416 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1072,7 +1072,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
417 : (
|
417 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1100,7 +1100,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
421 : (
|
421 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1128,7 +1128,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
422 : (
|
422 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1156,7 +1156,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
423 : (
|
423 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1180,7 +1180,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
424 : (
|
424 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1208,7 +1208,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
425 : (
|
425 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1232,7 +1232,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
426 : (
|
426 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1256,7 +1256,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
428 : (
|
428 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1284,7 +1284,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
429 : (
|
429 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1312,7 +1312,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
431 : (
|
431 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1340,7 +1340,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
451 : (
|
451 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1368,7 +1368,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
500 : (
|
500 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1396,7 +1396,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
501 : (
|
501 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1420,7 +1420,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
502 : (
|
502 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1444,7 +1444,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
503 : (
|
503 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1472,7 +1472,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
504 : (
|
504 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1496,7 +1496,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
505 : (
|
505 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1524,7 +1524,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
506 : (
|
506 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1552,7 +1552,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
507 : (
|
507 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1580,7 +1580,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
508 : (
|
508 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1604,7 +1604,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
510 : (
|
510 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
@ -1628,7 +1628,7 @@ var ErrorBannersData = map[uint]string {
|
||||||
""),
|
""),
|
||||||
|
|
||||||
|
|
||||||
511 : (
|
511 : []byte (
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
"| kawipiko -- blazingly fast static HTTP server | https://bit.ly/kawipiko |\n" +
|
||||||
"+---------------------------------------------------------------------------+\n" +
|
"+---------------------------------------------------------------------------+\n" +
|
||||||
|
|
Loading…
Reference in a new issue