logging added.
This commit is contained in:
+21
-5
@@ -7,6 +7,7 @@
|
||||
;; which media renderers commonly use for probing and seeking.
|
||||
|
||||
(require net/url
|
||||
simple-log
|
||||
racket/async-channel
|
||||
racket/file
|
||||
racket/path
|
||||
@@ -19,6 +20,8 @@
|
||||
racket-mimetypes
|
||||
"didl-lite.rkt")
|
||||
|
||||
(sl-def-log upnp-file-server)
|
||||
|
||||
(provide start-media-file-server
|
||||
media-file-server?
|
||||
media-file-server-url
|
||||
@@ -156,6 +159,7 @@
|
||||
listen-ip))
|
||||
(let-values ([(base-url base-path)
|
||||
(normalize-base-url 'start-media-file-server url)])
|
||||
(info-upnp-file-server "Starting media file server url=~a listen-ip=~a" (url->string base-url) (or listen-ip "all interfaces"))
|
||||
(let* ([publications (make-hash)]
|
||||
[mime-types (make-hash)]
|
||||
[lock (make-semaphore 1)]
|
||||
@@ -165,14 +169,19 @@
|
||||
(format "racket-upnp-missing-~a" (gensym)))]
|
||||
[url->path
|
||||
(lambda (request-url)
|
||||
(let ([path
|
||||
(let ([request-path (url-path-string request-url)])
|
||||
(dbg-upnp-file-server "Resolving media request path=~a" request-path)
|
||||
(let ([path
|
||||
(call-with-semaphore
|
||||
lock
|
||||
(lambda ()
|
||||
(hash-ref publications
|
||||
(url-path-string request-url)
|
||||
request-path
|
||||
missing-path)))])
|
||||
(values path '())))]
|
||||
(if (equal? path missing-path)
|
||||
(warn-upnp-file-server "Media request not published path=~a" request-path)
|
||||
(dbg-upnp-file-server "Media request path=~a maps to file=~a" request-path path))
|
||||
(values path '()))))]
|
||||
[path->mime-type
|
||||
(lambda (path)
|
||||
(call-with-semaphore
|
||||
@@ -189,7 +198,8 @@
|
||||
#:path->headers dlna-response-headers)]
|
||||
[not-found-dispatcher
|
||||
(dispatch/servlet
|
||||
(lambda (_request)
|
||||
(lambda (request)
|
||||
(warn-upnp-file-server "Returning 404 for request URI ~a" (url->string (request-uri request)))
|
||||
(response/full
|
||||
404
|
||||
#f
|
||||
@@ -210,8 +220,10 @@
|
||||
#:port (url-effective-port base-url))]
|
||||
[result (sync confirmation)])
|
||||
(when (exn? result)
|
||||
(err-upnp-file-server "Could not start media file server: ~a" (exn-message result))
|
||||
(stop)
|
||||
(raise result))
|
||||
(info-upnp-file-server "Media file server started at ~a" (url->string base-url))
|
||||
(make-media-file-server
|
||||
base-url
|
||||
base-path
|
||||
@@ -265,7 +277,9 @@
|
||||
'media-file-server-publish!
|
||||
mime-type
|
||||
path))))
|
||||
(url->string publication-url))))
|
||||
(let ([published-url (url->string publication-url)])
|
||||
(info-upnp-file-server "Published file=~a url=~a mime-type=~a" path published-url (bytes->string/utf-8 (normalize-mime-type 'media-file-server-publish! mime-type path)))
|
||||
published-url))))
|
||||
|
||||
(define (media-file-server-didl-lite server url
|
||||
#:title [title #f]
|
||||
@@ -328,6 +342,7 @@
|
||||
#:parent-id parent-id))))
|
||||
|
||||
(define (media-file-server-unpublish! server url)
|
||||
(dbg-upnp-file-server "Unpublishing URL ~a" url)
|
||||
(check-media-file-server 'media-file-server-unpublish! server)
|
||||
(let-values ([(_publication-url publication-path)
|
||||
(resolve-publication-url
|
||||
@@ -354,5 +369,6 @@
|
||||
(hash-clear! (media-file-server-publications server))
|
||||
(media-file-server-stop server)))))])
|
||||
(when stop
|
||||
(info-upnp-file-server "Stopping media file server at ~a" (media-file-server-url server))
|
||||
(stop))
|
||||
(void)))
|
||||
|
||||
Reference in New Issue
Block a user