From 1860d25e88fb3854eb97d916e50f241e24642c9f Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 12:55:16 +0300 Subject: [PATCH 01/14] Revert "return NoSuchObject in case no meta" This reverts commit 1353f274a0c03cad8be316a5f75bf441756f7b85. --- server/go.mod | 2 +- server/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/go.mod b/server/go.mod index 32b8da0..df8352d 100644 --- a/server/go.mod +++ b/server/go.mod @@ -3,7 +3,7 @@ module server go 1.17 replace ( - github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210911200354-fd999256e04d + github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163 github.com/anacrolix/torrent v1.31.0 => github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 ) diff --git a/server/go.sum b/server/go.sum index 414dc69..78338e8 100644 --- a/server/go.sum +++ b/server/go.sum @@ -678,8 +678,8 @@ github.com/tinylib/msgp v1.1.1/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDW github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tsynik/dms v0.0.0-20210911200354-fd999256e04d h1:YFNG0P4SKHxOvHM3Ae+FI1/kRnhi/qyvblHOKzDgRPE= -github.com/tsynik/dms v0.0.0-20210911200354-fd999256e04d/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= +github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163 h1:qBZPOad8wOmvFe6rIx1d0U7VpymFalvbM5kjHeEx8Gs= +github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 h1:GHhNKxddZiYrWeiXqMQiPKcSIXKF+o/w1wrqHOgOFrk= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09/go.mod h1:E9gvoHzc58EtTudJbzZ2Ho7SKDCYk84734hB9ztBJS4= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= From c27feb668c7f14ab0ea0ec4b65271fa7ce664687 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 17:12:19 +0300 Subject: [PATCH 02/14] add content-type o http headers --- server/{dlna => mimetype}/mimetype.go | 2 +- server/torr/stream.go | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) rename server/{dlna => mimetype}/mimetype.go (99%) diff --git a/server/dlna/mimetype.go b/server/mimetype/mimetype.go similarity index 99% rename from server/dlna/mimetype.go rename to server/mimetype/mimetype.go index c6f8f1b..ebdf3f8 100644 --- a/server/dlna/mimetype.go +++ b/server/mimetype/mimetype.go @@ -1,4 +1,4 @@ -package dlna +package mimetype import ( "log" diff --git a/server/torr/stream.go b/server/torr/stream.go index da3ca3a..1bfebb3 100644 --- a/server/torr/stream.go +++ b/server/torr/stream.go @@ -12,6 +12,7 @@ import ( "github.com/anacrolix/missinggo/httptoo" "github.com/anacrolix/torrent" + mt "server/mimetype" sets "server/settings" "server/torr/state" ) @@ -61,8 +62,12 @@ func (t *Torrent) Stream(fileID int, req *http.Request, resp http.ResponseWriter resp.Header().Set("Connection", "close") resp.Header().Set("ETag", httptoo.EncodeQuotedString(fmt.Sprintf("%s/%s", t.Hash().HexString(), file.Path()))) + // DLNA headers resp.Header().Set("transferMode.dlna.org", "Streaming") - + mime, err := mt.MimeTypeByPath(file.Path()) + if err == nil && mime.IsMedia() { + resp.Header().Set("content-type", mime.String()) + } if req.Header.Get("getContentFeatures.dlna.org") != "" { resp.Header().Set("contentFeatures.dlna.org", dlna.ContentFeatures{ SupportRange: true, From 9fe6ae8d0fb06622ed58f63864224084e12340bc Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 17:14:34 +0300 Subject: [PATCH 03/14] add searchClass o root obj meta --- server/dlna/list.go | 28 ++++++++++++++++------------ server/go.mod | 4 ++-- server/go.sum | 4 ++-- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/server/dlna/list.go b/server/dlna/list.go index 28fc268..9f42514 100644 --- a/server/dlna/list.go +++ b/server/dlna/list.go @@ -13,6 +13,7 @@ import ( "github.com/anacrolix/dms/upnpav" "server/log" + mt "server/mimetype" "server/settings" "server/torr" "server/torr/state" @@ -124,6 +125,11 @@ func getTorrentMeta(path, host string) (ret interface{}) { Title: "TorrServer", Date: upnpav.Timestamp{Time: time.Now()}, Class: "object.container", + SearchXML: ` object.container + object.item.audioItem + object.item.imageItem + object.item.videoItem +`, } // add Root Object meta := upnpav.Container{Object: rootObj} @@ -134,13 +140,12 @@ func getTorrentMeta(path, host string) (ret interface{}) { ID: "%2FTR", ParentID: "0", Restricted: 1, - Searchable: 1, Title: "Torrents", + Class: "object.container.storageFolder", Date: upnpav.Timestamp{Time: time.Now()}, - Class: "object.container", } - //vol := len(torr.ListTorrent()) - meta := upnpav.Container{Object: trObj} + vol := len(torr.ListTorrent()) + meta := upnpav.Container{Object: trObj, ChildCount: vol} return meta } @@ -165,8 +170,8 @@ func getTorrentMeta(path, host string) (ret interface{}) { ParentID: "%2FTR", Restricted: 1, Title: torr.Title, + Class: "object.container.storageFolder", Date: upnpav.Timestamp{Time: time.Now()}, - Class: "object.container", } meta := upnpav.Container{Object: obj} return meta @@ -180,10 +185,10 @@ func getTorrentMeta(path, host string) (ret interface{}) { ID: parent + "%2FLD", ParentID: parent, Restricted: 1, - Searchable: 1, + Searchable: 0, Title: "Load Torrents", + Class: "object.container.storageFolder", Date: upnpav.Timestamp{Time: time.Now()}, - Class: "object.container", } meta := upnpav.Container{Object: obj} return meta @@ -199,16 +204,15 @@ func getTorrentMeta(path, host string) (ret interface{}) { ID: id, ParentID: parent, Restricted: 1, - Searchable: 1, Title: file, - Date: upnpav.Timestamp{Time: time.Now()}, Class: "object.container", + Date: upnpav.Timestamp{Time: time.Now()}, } meta := upnpav.Container{Object: obj} return meta } - // for error response - return nil + // nil for error + return } func loadTorrent(path, host string) (ret []interface{}) { @@ -263,7 +267,7 @@ func getLink(host, path string) string { func getObjFromTorrent(path, parent, host string, torr *torr.Torrent, file *state.TorrentFileStat) (ret interface{}) { - mime, err := MimeTypeByPath(file.Path) + mime, err := mt.MimeTypeByPath(file.Path) if err != nil { if settings.BTsets.EnableDebug { log.TLogln("Can't detect mime type", err) diff --git a/server/go.mod b/server/go.mod index df8352d..a28a2aa 100644 --- a/server/go.mod +++ b/server/go.mod @@ -3,7 +3,7 @@ module server go 1.17 replace ( - github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163 + github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210913075730-e41ecd88369c github.com/anacrolix/torrent v1.31.0 => github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 ) @@ -20,6 +20,7 @@ require ( github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 github.com/pkg/errors v0.9.1 go.etcd.io/bbolt v1.3.6 + golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac ) @@ -66,7 +67,6 @@ require ( golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e // indirect golang.org/x/text v0.3.6 // indirect google.golang.org/protobuf v1.27.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/server/go.sum b/server/go.sum index 78338e8..36c0fa2 100644 --- a/server/go.sum +++ b/server/go.sum @@ -678,8 +678,8 @@ github.com/tinylib/msgp v1.1.1/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDW github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163 h1:qBZPOad8wOmvFe6rIx1d0U7VpymFalvbM5kjHeEx8Gs= -github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= +github.com/tsynik/dms v0.0.0-20210913075730-e41ecd88369c h1:4yU1p5MmRu+233Hs2OhR8Kx9gOWw20KR2AY1py5pLvA= +github.com/tsynik/dms v0.0.0-20210913075730-e41ecd88369c/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 h1:GHhNKxddZiYrWeiXqMQiPKcSIXKF+o/w1wrqHOgOFrk= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09/go.mod h1:E9gvoHzc58EtTudJbzZ2Ho7SKDCYk84734hB9ztBJS4= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= From e06f16f93e7fc878e5355e70ae0dc662f4aca3f1 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 17:26:56 +0300 Subject: [PATCH 04/14] update dms --- server/go.mod | 2 +- server/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/go.mod b/server/go.mod index a28a2aa..26c1ce2 100644 --- a/server/go.mod +++ b/server/go.mod @@ -3,7 +3,7 @@ module server go 1.17 replace ( - github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210913075730-e41ecd88369c + github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210913141714-452c963535cf github.com/anacrolix/torrent v1.31.0 => github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 ) diff --git a/server/go.sum b/server/go.sum index 36c0fa2..ceff43c 100644 --- a/server/go.sum +++ b/server/go.sum @@ -678,8 +678,8 @@ github.com/tinylib/msgp v1.1.1/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDW github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tsynik/dms v0.0.0-20210913075730-e41ecd88369c h1:4yU1p5MmRu+233Hs2OhR8Kx9gOWw20KR2AY1py5pLvA= -github.com/tsynik/dms v0.0.0-20210913075730-e41ecd88369c/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= +github.com/tsynik/dms v0.0.0-20210913141714-452c963535cf h1:1aPC/oFTq4NsYSjiQFrvn/Tmvq/Qr/sCxzRR669T9nw= +github.com/tsynik/dms v0.0.0-20210913141714-452c963535cf/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 h1:GHhNKxddZiYrWeiXqMQiPKcSIXKF+o/w1wrqHOgOFrk= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09/go.mod h1:E9gvoHzc58EtTudJbzZ2Ho7SKDCYk84734hB9ztBJS4= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= From 7ebf2379ffd1175253daa66f90a8fee9d377472c Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 19:24:50 +0300 Subject: [PATCH 05/14] Revert "update dms" This reverts commit e06f16f93e7fc878e5355e70ae0dc662f4aca3f1. --- server/go.mod | 2 +- server/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/go.mod b/server/go.mod index 26c1ce2..a28a2aa 100644 --- a/server/go.mod +++ b/server/go.mod @@ -3,7 +3,7 @@ module server go 1.17 replace ( - github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210913141714-452c963535cf + github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210913075730-e41ecd88369c github.com/anacrolix/torrent v1.31.0 => github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 ) diff --git a/server/go.sum b/server/go.sum index ceff43c..36c0fa2 100644 --- a/server/go.sum +++ b/server/go.sum @@ -678,8 +678,8 @@ github.com/tinylib/msgp v1.1.1/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDW github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tsynik/dms v0.0.0-20210913141714-452c963535cf h1:1aPC/oFTq4NsYSjiQFrvn/Tmvq/Qr/sCxzRR669T9nw= -github.com/tsynik/dms v0.0.0-20210913141714-452c963535cf/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= +github.com/tsynik/dms v0.0.0-20210913075730-e41ecd88369c h1:4yU1p5MmRu+233Hs2OhR8Kx9gOWw20KR2AY1py5pLvA= +github.com/tsynik/dms v0.0.0-20210913075730-e41ecd88369c/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 h1:GHhNKxddZiYrWeiXqMQiPKcSIXKF+o/w1wrqHOgOFrk= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09/go.mod h1:E9gvoHzc58EtTudJbzZ2Ho7SKDCYk84734hB9ztBJS4= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= From 2551a9ec51b037f094e818a131fc22d04762eb9f Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 19:24:54 +0300 Subject: [PATCH 06/14] Revert "add searchClass o root obj meta" This reverts commit 9fe6ae8d0fb06622ed58f63864224084e12340bc. --- server/dlna/list.go | 28 ++++++++++++---------------- server/go.mod | 4 ++-- server/go.sum | 4 ++-- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/server/dlna/list.go b/server/dlna/list.go index 9f42514..28fc268 100644 --- a/server/dlna/list.go +++ b/server/dlna/list.go @@ -13,7 +13,6 @@ import ( "github.com/anacrolix/dms/upnpav" "server/log" - mt "server/mimetype" "server/settings" "server/torr" "server/torr/state" @@ -125,11 +124,6 @@ func getTorrentMeta(path, host string) (ret interface{}) { Title: "TorrServer", Date: upnpav.Timestamp{Time: time.Now()}, Class: "object.container", - SearchXML: ` object.container - object.item.audioItem - object.item.imageItem - object.item.videoItem -`, } // add Root Object meta := upnpav.Container{Object: rootObj} @@ -140,12 +134,13 @@ func getTorrentMeta(path, host string) (ret interface{}) { ID: "%2FTR", ParentID: "0", Restricted: 1, + Searchable: 1, Title: "Torrents", - Class: "object.container.storageFolder", Date: upnpav.Timestamp{Time: time.Now()}, + Class: "object.container", } - vol := len(torr.ListTorrent()) - meta := upnpav.Container{Object: trObj, ChildCount: vol} + //vol := len(torr.ListTorrent()) + meta := upnpav.Container{Object: trObj} return meta } @@ -170,8 +165,8 @@ func getTorrentMeta(path, host string) (ret interface{}) { ParentID: "%2FTR", Restricted: 1, Title: torr.Title, - Class: "object.container.storageFolder", Date: upnpav.Timestamp{Time: time.Now()}, + Class: "object.container", } meta := upnpav.Container{Object: obj} return meta @@ -185,10 +180,10 @@ func getTorrentMeta(path, host string) (ret interface{}) { ID: parent + "%2FLD", ParentID: parent, Restricted: 1, - Searchable: 0, + Searchable: 1, Title: "Load Torrents", - Class: "object.container.storageFolder", Date: upnpav.Timestamp{Time: time.Now()}, + Class: "object.container", } meta := upnpav.Container{Object: obj} return meta @@ -204,15 +199,16 @@ func getTorrentMeta(path, host string) (ret interface{}) { ID: id, ParentID: parent, Restricted: 1, + Searchable: 1, Title: file, - Class: "object.container", Date: upnpav.Timestamp{Time: time.Now()}, + Class: "object.container", } meta := upnpav.Container{Object: obj} return meta } - // nil for error - return + // for error response + return nil } func loadTorrent(path, host string) (ret []interface{}) { @@ -267,7 +263,7 @@ func getLink(host, path string) string { func getObjFromTorrent(path, parent, host string, torr *torr.Torrent, file *state.TorrentFileStat) (ret interface{}) { - mime, err := mt.MimeTypeByPath(file.Path) + mime, err := MimeTypeByPath(file.Path) if err != nil { if settings.BTsets.EnableDebug { log.TLogln("Can't detect mime type", err) diff --git a/server/go.mod b/server/go.mod index a28a2aa..df8352d 100644 --- a/server/go.mod +++ b/server/go.mod @@ -3,7 +3,7 @@ module server go 1.17 replace ( - github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210913075730-e41ecd88369c + github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163 github.com/anacrolix/torrent v1.31.0 => github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 ) @@ -20,7 +20,6 @@ require ( github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 github.com/pkg/errors v0.9.1 go.etcd.io/bbolt v1.3.6 - golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac ) @@ -67,6 +66,7 @@ require ( golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect + golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e // indirect golang.org/x/text v0.3.6 // indirect google.golang.org/protobuf v1.27.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/server/go.sum b/server/go.sum index 36c0fa2..78338e8 100644 --- a/server/go.sum +++ b/server/go.sum @@ -678,8 +678,8 @@ github.com/tinylib/msgp v1.1.1/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDW github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tsynik/dms v0.0.0-20210913075730-e41ecd88369c h1:4yU1p5MmRu+233Hs2OhR8Kx9gOWw20KR2AY1py5pLvA= -github.com/tsynik/dms v0.0.0-20210913075730-e41ecd88369c/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= +github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163 h1:qBZPOad8wOmvFe6rIx1d0U7VpymFalvbM5kjHeEx8Gs= +github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 h1:GHhNKxddZiYrWeiXqMQiPKcSIXKF+o/w1wrqHOgOFrk= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09/go.mod h1:E9gvoHzc58EtTudJbzZ2Ho7SKDCYk84734hB9ztBJS4= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= From a5f60a530fae4fb98e7e9fe6fb84bcb8681c5884 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 19:25:20 +0300 Subject: [PATCH 07/14] Revert "Revert "return NoSuchObject in case no meta"" This reverts commit 1860d25e88fb3854eb97d916e50f241e24642c9f. --- server/go.mod | 2 +- server/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/go.mod b/server/go.mod index df8352d..32b8da0 100644 --- a/server/go.mod +++ b/server/go.mod @@ -3,7 +3,7 @@ module server go 1.17 replace ( - github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163 + github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210911200354-fd999256e04d github.com/anacrolix/torrent v1.31.0 => github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 ) diff --git a/server/go.sum b/server/go.sum index 78338e8..414dc69 100644 --- a/server/go.sum +++ b/server/go.sum @@ -678,8 +678,8 @@ github.com/tinylib/msgp v1.1.1/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDW github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163 h1:qBZPOad8wOmvFe6rIx1d0U7VpymFalvbM5kjHeEx8Gs= -github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= +github.com/tsynik/dms v0.0.0-20210911200354-fd999256e04d h1:YFNG0P4SKHxOvHM3Ae+FI1/kRnhi/qyvblHOKzDgRPE= +github.com/tsynik/dms v0.0.0-20210911200354-fd999256e04d/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 h1:GHhNKxddZiYrWeiXqMQiPKcSIXKF+o/w1wrqHOgOFrk= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09/go.mod h1:E9gvoHzc58EtTudJbzZ2Ho7SKDCYk84734hB9ztBJS4= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= From 8cd867c92ca6643d1f638d5f528579de69d7a03e Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 19:25:27 +0300 Subject: [PATCH 08/14] Revert "fix build, rework interface check and filter ipv6 for name" This reverts commit ce31a383dbd9814f502661d70224f1dfbfd85198. --- server/dlna/dlna.go | 35 ++++++++----------- .../utils/net_interface_filter_nix_darwin.go | 2 +- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/server/dlna/dlna.go b/server/dlna/dlna.go index 1465267..dfef97c 100644 --- a/server/dlna/dlna.go +++ b/server/dlna/dlna.go @@ -7,7 +7,6 @@ import ( "os" "os/user" "path/filepath" - "runtime" "time" "github.com/anacrolix/dms/dlna/dms" @@ -28,12 +27,10 @@ func Start() { log.TLogln(err) os.Exit(1) } - for _, i := range ifaces { - // interface flags seem to always be 0 on Windows - if runtime.GOOS != "windows" && (i.Flags&net.FlagLoopback != 0 || i.Flags&net.FlagUp == 0 || i.Flags&net.FlagMulticast == 0) || !utils.IsPhysicalInterface(i.HardwareAddr.String()) { - continue + for _, element := range ifaces { + if element.Flags&net.FlagLoopback == 0 && element.Flags&net.FlagUp == net.FlagUp && element.Flags&net.FlagMulticast == net.FlagMulticast && utils.IsPhysicalInterface(element.HardwareAddr.String()) { + ifs = append(ifs, element) } - ifs = append(ifs, i) } return }(), @@ -167,21 +164,19 @@ func getDefaultFriendlyName() string { } var list []string for _, i := range ifaces { - // interface flags seem to always be 0 on Windows - if runtime.GOOS != "windows" && (i.Flags&net.FlagLoopback != 0 || i.Flags&net.FlagUp == 0 || i.Flags&net.FlagMulticast == 0) || !utils.IsPhysicalInterface(i.HardwareAddr.String()) { - continue - } addrs, _ := i.Addrs() - for _, addr := range addrs { - var ip net.IP - switch v := addr.(type) { - case *net.IPNet: - ip = v.IP - case *net.IPAddr: - ip = v.IP - } - if !ip.IsLoopback() && ip.To4() != nil { - list = append(list, ip.String()) + if i.Flags&net.FlagLoopback == 0 && i.Flags&net.FlagUp == net.FlagUp && i.Flags&net.FlagMulticast == net.FlagMulticast && utils.IsPhysicalInterface(i.HardwareAddr.String()) { + for _, addr := range addrs { + var ip net.IP + switch v := addr.(type) { + case *net.IPNet: + ip = v.IP + case *net.IPAddr: + ip = v.IP + } + if !ip.IsLoopback() { + list = append(list, ip.String()) + } } } } diff --git a/server/utils/net_interface_filter_nix_darwin.go b/server/utils/net_interface_filter_nix_darwin.go index ecebcef..5777510 100644 --- a/server/utils/net_interface_filter_nix_darwin.go +++ b/server/utils/net_interface_filter_nix_darwin.go @@ -20,7 +20,7 @@ func GetAllPhysicalInterfaces() []PhysicalInterface { var outInterfaces []PhysicalInterface for _, element := range ifaces { - if element.Flags&net.FlagLoopback == 0 && element.Flags&net.FlagUp == 1 && IsPhysicalInterface(element.HardwareAddr.String()) { + if element.Flags&net.FlagLoopback == 0 && element.Flags&net.FlagUp == 1 && isPhysicalInterface(element.HardwareAddr.String()) { outInterfaces = append(outInterfaces, PhysicalInterface{MACAddress: element.HardwareAddr.String(), Name: element.Name, FriendlyName: element.Name}) } } From 46bd8d0a8dae1cf79d5c5299c75fc0979560af29 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 19:25:32 +0300 Subject: [PATCH 09/14] Revert "add some iface fun and don't start dlna on loopback and tunnels" This reverts commit 02b749a4c419da734b4467bc1214db25b232979a. --- server/dlna/dlna.go | 10 +- server/dlna/list.go | 4 +- server/utils/net_interface_filter.go | 38 ------- .../utils/net_interface_filter_nix_darwin.go | 29 ----- server/utils/net_interface_filter_win.go | 105 ------------------ 5 files changed, 4 insertions(+), 182 deletions(-) delete mode 100644 server/utils/net_interface_filter.go delete mode 100644 server/utils/net_interface_filter_nix_darwin.go delete mode 100644 server/utils/net_interface_filter_win.go diff --git a/server/dlna/dlna.go b/server/dlna/dlna.go index dfef97c..a8763f8 100644 --- a/server/dlna/dlna.go +++ b/server/dlna/dlna.go @@ -12,7 +12,6 @@ import ( "github.com/anacrolix/dms/dlna/dms" "server/log" - "server/utils" "server/web/pages/template" ) @@ -22,16 +21,11 @@ func Start() { dmsServer = &dms.Server{ Interfaces: func() (ifs []net.Interface) { var err error - ifaces, err := net.Interfaces() + ifs, err = net.Interfaces() if err != nil { log.TLogln(err) os.Exit(1) } - for _, element := range ifaces { - if element.Flags&net.FlagLoopback == 0 && element.Flags&net.FlagUp == net.FlagUp && element.Flags&net.FlagMulticast == net.FlagMulticast && utils.IsPhysicalInterface(element.HardwareAddr.String()) { - ifs = append(ifs, element) - } - } return }(), HTTPConn: func() net.Listener { @@ -165,7 +159,7 @@ func getDefaultFriendlyName() string { var list []string for _, i := range ifaces { addrs, _ := i.Addrs() - if i.Flags&net.FlagLoopback == 0 && i.Flags&net.FlagUp == net.FlagUp && i.Flags&net.FlagMulticast == net.FlagMulticast && utils.IsPhysicalInterface(i.HardwareAddr.String()) { + if i.Flags&net.FlagUp == net.FlagUp { for _, addr := range addrs { var ip net.IP switch v := addr.(type) { diff --git a/server/dlna/list.go b/server/dlna/list.go index 28fc268..4e1922f 100644 --- a/server/dlna/list.go +++ b/server/dlna/list.go @@ -115,7 +115,7 @@ func getTorrent(path, host string) (ret []interface{}) { func getTorrentMeta(path, host string) (ret interface{}) { - if path == "/" { + if path=="/" { rootObj := upnpav.Object{ ID: "0", ParentID: "-1", @@ -143,7 +143,7 @@ func getTorrentMeta(path, host string) (ret interface{}) { meta := upnpav.Container{Object: trObj} return meta } - + // find torrent without load torrs := torr.ListTorrent() var torr *torr.Torrent diff --git a/server/utils/net_interface_filter.go b/server/utils/net_interface_filter.go deleted file mode 100644 index 23bdb7b..0000000 --- a/server/utils/net_interface_filter.go +++ /dev/null @@ -1,38 +0,0 @@ -package utils - -import ( - "strings" -) - -type PhysicalInterface struct { - MACAddress string - Name string - FriendlyName string -} - -// Mac Address parts to look for, and identify non physical devices. There may be more, update me! -var macAddrPartsToFilter []string = []string{ - "00:03:FF", // Microsoft Hyper-V, Virtual Server, Virtual PC - "0A:00:27", // VirtualBox - "00:00:00:00:00", // Teredo Tunneling Pseudo-Interface - "00:50:56", // VMware ESX 3, Server, Workstation, Player - "00:1C:14", // VMware ESX 3, Server, Workstation, Player - "00:0C:29", // VMware ESX 3, Server, Workstation, Player - "00:05:69", // VMware ESX 3, Server, Workstation, Player - "00:1C:42", // Microsoft Hyper-V, Virtual Server, Virtual PC - "00:0F:4B", // Virtual Iron 4 - "00:16:3E", // Red Hat Xen, Oracle VM, XenSource, Novell Xen - "08:00:27", // Sun xVM VirtualBox - "7A:79", // Hamachi -} - -// Filters the possible physical interface address by comparing it to known popular VM Software adresses -// and Teredo Tunneling Pseudo-Interface. -func IsPhysicalInterface(addr string) bool { - for _, macPart := range macAddrPartsToFilter { - if strings.HasPrefix(strings.ToLower(addr), strings.ToLower(macPart)) { - return false - } - } - return true -} diff --git a/server/utils/net_interface_filter_nix_darwin.go b/server/utils/net_interface_filter_nix_darwin.go deleted file mode 100644 index 5777510..0000000 --- a/server/utils/net_interface_filter_nix_darwin.go +++ /dev/null @@ -1,29 +0,0 @@ -//go:build linux || darwin -// +build linux darwin - -package utils - -import ( - "fmt" - "net" -) - -// Gets all physical interfaces based on filter results, ignoring all VM, Loopback and Tunnel interfaces. -func GetAllPhysicalInterfaces() []PhysicalInterface { - ifaces, err := net.Interfaces() - - if err != nil { - fmt.Println(err) - return nil - } - - var outInterfaces []PhysicalInterface - - for _, element := range ifaces { - if element.Flags&net.FlagLoopback == 0 && element.Flags&net.FlagUp == 1 && isPhysicalInterface(element.HardwareAddr.String()) { - outInterfaces = append(outInterfaces, PhysicalInterface{MACAddress: element.HardwareAddr.String(), Name: element.Name, FriendlyName: element.Name}) - } - } - - return outInterfaces -} diff --git a/server/utils/net_interface_filter_win.go b/server/utils/net_interface_filter_win.go deleted file mode 100644 index 0620d59..0000000 --- a/server/utils/net_interface_filter_win.go +++ /dev/null @@ -1,105 +0,0 @@ -//go:build windows -// +build windows - -package utils - -import ( - "os" - "syscall" - "unicode/utf16" - "unsafe" - - "golang.org/x/sys/windows" -) - -const ( - IfOperStatusUp = 1 - IF_TYPE_SOFTWARE_LOOPBACK = 24 - IF_TYPE_TUNNEL = 131 -) - -const hexDigit = "0123456789abcdef" - -func adapterAddresses() ([]*windows.IpAdapterAddresses, error) { - var b []byte - l := uint32(15000) // recommended initial size - for { - b = make([]byte, l) - err := windows.GetAdaptersAddresses(syscall.AF_UNSPEC, windows.GAA_FLAG_INCLUDE_PREFIX, 0, (*windows.IpAdapterAddresses)(unsafe.Pointer(&b[0])), &l) - if err == nil { - if l == 0 { - return nil, nil - } - break - } - if err.(syscall.Errno) != syscall.ERROR_BUFFER_OVERFLOW { - return nil, os.NewSyscallError("getadaptersaddresses", err) - } - if l <= uint32(len(b)) { - return nil, os.NewSyscallError("getadaptersaddresses", err) - } - } - var aas []*windows.IpAdapterAddresses - for aa := (*windows.IpAdapterAddresses)(unsafe.Pointer(&b[0])); aa != nil; aa = aa.Next { - aas = append(aas, aa) - } - return aas, nil -} - -func bytePtrToString(p *uint8) string { - a := (*[10000]uint8)(unsafe.Pointer(p)) - i := 0 - for a[i] != 0 { - i++ - } - return string(a[:i]) -} - -func physicalAddrToString(physAddr [8]byte) string { - if len(physAddr) == 0 { - return "" - } - buf := make([]byte, 0, len(physAddr)*3-1) - for i, b := range physAddr { - if i > 0 { - buf = append(buf, ':') - } - buf = append(buf, hexDigit[b>>4]) - buf = append(buf, hexDigit[b&0xF]) - } - return string(buf) -} - -func cStringToString(cs *uint16) (s string) { - if cs != nil { - us := make([]uint16, 0, 256) - for p := uintptr(unsafe.Pointer(cs)); ; p += 2 { - u := *(*uint16)(unsafe.Pointer(p)) - if u == 0 { - return string(utf16.Decode(us)) - } - us = append(us, u) - } - } - return "" -} - -// Gets all physical interfaces based on filter results, ignoring all VM, Loopback and Tunnel interfaces. -func GetAllPhysicalInterfaces() []PhysicalInterface { - aa, _ := adapterAddresses() - - var outInterfaces []PhysicalInterface - - for _, pa := range aa { - mac := physicalAddrToString(pa.PhysicalAddress) - name := "\\Device\\NPF_" + bytePtrToString(pa.AdapterName) - - if pa.IfType != uint32(IF_TYPE_SOFTWARE_LOOPBACK) && pa.IfType != uint32(IF_TYPE_TUNNEL) && - pa.OperStatus == uint32(IfOperStatusUp) && IsPhysicalInterface(mac) { - - outInterfaces = append(outInterfaces, PhysicalInterface{MACAddress: mac, Name: name, FriendlyName: cStringToString(pa.FriendlyName)}) - } - } - - return outInterfaces -} From 6d81b419ab3d3d9024cde7243d1665912284817e Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 19:25:40 +0300 Subject: [PATCH 10/14] Revert "change meta response" This reverts commit 44f1cfbd9df3d2725128bbedd47f0d9364b73bc4. --- server/dlna/dlna.go | 30 +++++++++++++++++++++++++++++ server/dlna/list.go | 47 ++++----------------------------------------- 2 files changed, 34 insertions(+), 43 deletions(-) diff --git a/server/dlna/dlna.go b/server/dlna/dlna.go index a8763f8..6e43f45 100644 --- a/server/dlna/dlna.go +++ b/server/dlna/dlna.go @@ -10,8 +10,10 @@ import ( "time" "github.com/anacrolix/dms/dlna/dms" + "github.com/anacrolix/dms/upnpav" "server/log" + "server/torr" "server/web/pages/template" ) @@ -119,6 +121,34 @@ func onBrowse(path, rootObjectPath, host, userAgent string) (ret []interface{}, } func onBrowseMeta(path string, rootObjectPath string, host, userAgent string) (ret interface{}, err error) { + if path == "/" { + rootObj := upnpav.Object{ + ID: "0", + ParentID: "-1", + Restricted: 1, + Searchable: 1, + Title: "TorrServer", + Date: upnpav.Timestamp{Time: time.Now()}, + Class: "object.container.storageFolder", + } + // add Root Object + ret = upnpav.Container{Object: rootObj, ChildCount: 1} + return + } else if path == "/TR" { + // TR Object Meta + trObj := upnpav.Object{ + ID: "%2FTR", + ParentID: "0", + Restricted: 1, + Searchable: 1, + Title: "Torrents", + Date: upnpav.Timestamp{Time: time.Now()}, + Class: "object.container.storageFolder", + } + vol := len(torr.ListTorrent()) + ret = upnpav.Container{Object: trObj, ChildCount: vol} + return + } ret = getTorrentMeta(path, host) if ret == nil { err = fmt.Errorf("meta not found") diff --git a/server/dlna/list.go b/server/dlna/list.go index 4e1922f..962cf6b 100644 --- a/server/dlna/list.go +++ b/server/dlna/list.go @@ -114,36 +114,6 @@ func getTorrent(path, host string) (ret []interface{}) { } func getTorrentMeta(path, host string) (ret interface{}) { - - if path=="/" { - rootObj := upnpav.Object{ - ID: "0", - ParentID: "-1", - Restricted: 1, - Searchable: 1, - Title: "TorrServer", - Date: upnpav.Timestamp{Time: time.Now()}, - Class: "object.container", - } - // add Root Object - meta := upnpav.Container{Object: rootObj} - return meta - } else if path == "/TR" { - // TR Object Meta - trObj := upnpav.Object{ - ID: "%2FTR", - ParentID: "0", - Restricted: 1, - Searchable: 1, - Title: "Torrents", - Date: upnpav.Timestamp{Time: time.Now()}, - Class: "object.container", - } - //vol := len(torr.ListTorrent()) - meta := upnpav.Container{Object: trObj} - return meta - } - // find torrent without load torrs := torr.ListTorrent() var torr *torr.Torrent @@ -166,15 +136,11 @@ func getTorrentMeta(path, host string) (ret interface{}) { Restricted: 1, Title: torr.Title, Date: upnpav.Timestamp{Time: time.Now()}, - Class: "object.container", } - meta := upnpav.Container{Object: obj} + meta := upnpav.Container{Object: obj, ChildCount: 1} return meta } else if filepath.Base(path) == "LD" { parent := url.PathEscape(filepath.Dir(path)) - if settings.BTsets.EnableDebug { - log.TLogln("getTorrentMeta parent for LD", parent) - } // LD object meta obj := upnpav.Object{ ID: parent + "%2FLD", @@ -183,17 +149,13 @@ func getTorrentMeta(path, host string) (ret interface{}) { Searchable: 1, Title: "Load Torrents", Date: upnpav.Timestamp{Time: time.Now()}, - Class: "object.container", } - meta := upnpav.Container{Object: obj} + meta := upnpav.Container{Object: obj, ChildCount: 1} return meta } else { file := filepath.Base(path) id := url.PathEscape(path) parent := url.PathEscape(filepath.Dir(path)) - if settings.BTsets.EnableDebug { - log.TLogln("getTorrentMeta id:", id, "parent:", parent) - } // file object meta obj := upnpav.Object{ ID: id, @@ -202,12 +164,11 @@ func getTorrentMeta(path, host string) (ret interface{}) { Searchable: 1, Title: file, Date: upnpav.Timestamp{Time: time.Now()}, - Class: "object.container", } - meta := upnpav.Container{Object: obj} + meta := upnpav.Container{Object: obj, ChildCount: 1} return meta } - // for error response + return nil } From 48db00ca40b8bf4b52674a11850796dfa13029b8 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 19:25:45 +0300 Subject: [PATCH 11/14] Revert "return NoSuchObject in case no meta" This reverts commit 1353f274a0c03cad8be316a5f75bf441756f7b85. --- server/go.mod | 2 +- server/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/go.mod b/server/go.mod index 32b8da0..df8352d 100644 --- a/server/go.mod +++ b/server/go.mod @@ -3,7 +3,7 @@ module server go 1.17 replace ( - github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210911200354-fd999256e04d + github.com/anacrolix/dms v1.2.2 => github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163 github.com/anacrolix/torrent v1.31.0 => github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 ) diff --git a/server/go.sum b/server/go.sum index 414dc69..78338e8 100644 --- a/server/go.sum +++ b/server/go.sum @@ -678,8 +678,8 @@ github.com/tinylib/msgp v1.1.1/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDW github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tsynik/dms v0.0.0-20210911200354-fd999256e04d h1:YFNG0P4SKHxOvHM3Ae+FI1/kRnhi/qyvblHOKzDgRPE= -github.com/tsynik/dms v0.0.0-20210911200354-fd999256e04d/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= +github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163 h1:qBZPOad8wOmvFe6rIx1d0U7VpymFalvbM5kjHeEx8Gs= +github.com/tsynik/dms v0.0.0-20210911171915-d3d89ee99163/go.mod h1:oWW4QbQ9YGl+FJ1X8xcrUYVObfA/KdipoeBuTC4ltG8= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09 h1:GHhNKxddZiYrWeiXqMQiPKcSIXKF+o/w1wrqHOgOFrk= github.com/tsynik/torrent v1.2.7-0.20210907192509-2141ede9aa09/go.mod h1:E9gvoHzc58EtTudJbzZ2Ho7SKDCYk84734hB9ztBJS4= github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= From d8a45bff80ceee0203fc40a0384903a294170289 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 19:28:05 +0300 Subject: [PATCH 12/14] Update list.go --- server/dlna/list.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/dlna/list.go b/server/dlna/list.go index 962cf6b..25d28b4 100644 --- a/server/dlna/list.go +++ b/server/dlna/list.go @@ -13,6 +13,7 @@ import ( "github.com/anacrolix/dms/upnpav" "server/log" + mt "server/mimetype" "server/settings" "server/torr" "server/torr/state" @@ -224,7 +225,7 @@ func getLink(host, path string) string { func getObjFromTorrent(path, parent, host string, torr *torr.Torrent, file *state.TorrentFileStat) (ret interface{}) { - mime, err := MimeTypeByPath(file.Path) + mime, err := mt.MimeTypeByPath(file.Path) if err != nil { if settings.BTsets.EnableDebug { log.TLogln("Can't detect mime type", err) From 5f30aa4c275c71f1827ed5f1fb2d2760e1e6a423 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 19:39:55 +0300 Subject: [PATCH 13/14] skip loopback and tunnels for dlna --- server/dlna/dlna.go | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/server/dlna/dlna.go b/server/dlna/dlna.go index 6e43f45..df53758 100644 --- a/server/dlna/dlna.go +++ b/server/dlna/dlna.go @@ -7,6 +7,7 @@ import ( "os" "os/user" "path/filepath" + "runtime" "time" "github.com/anacrolix/dms/dlna/dms" @@ -23,11 +24,18 @@ func Start() { dmsServer = &dms.Server{ Interfaces: func() (ifs []net.Interface) { var err error - ifs, err = net.Interfaces() + ifaces, err := net.Interfaces() if err != nil { log.TLogln(err) os.Exit(1) } + for _, i := range ifaces { + // interface flags seem to always be 0 on Windows + if runtime.GOOS != "windows" && (i.Flags&net.FlagLoopback != 0 || i.Flags&net.FlagUp == 0 || i.Flags&net.FlagMulticast == 0) { + continue + } + ifs = append(ifs, i) + } return }(), HTTPConn: func() net.Listener { @@ -188,19 +196,21 @@ func getDefaultFriendlyName() string { } var list []string for _, i := range ifaces { + // interface flags seem to always be 0 on Windows + if runtime.GOOS != "windows" && (i.Flags&net.FlagLoopback != 0 || i.Flags&net.FlagUp == 0 || i.Flags&net.FlagMulticast == 0) { + continue + } addrs, _ := i.Addrs() - if i.Flags&net.FlagUp == net.FlagUp { - for _, addr := range addrs { - var ip net.IP - switch v := addr.(type) { - case *net.IPNet: - ip = v.IP - case *net.IPAddr: - ip = v.IP - } - if !ip.IsLoopback() { - list = append(list, ip.String()) - } + for _, addr := range addrs { + var ip net.IP + switch v := addr.(type) { + case *net.IPNet: + ip = v.IP + case *net.IPAddr: + ip = v.IP + } + if !ip.IsLoopback() && ip.To4() != nil { + list = append(list, ip.String()) } } } From 136284bff29ac5d8d73b652f1b5ceb535a5b664b Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Mon, 13 Sep 2021 22:28:50 +0300 Subject: [PATCH 14/14] move meta objects to getTorrentMeta --- server/dlna/dlna.go | 30 ------------------------------ server/dlna/list.go | 31 +++++++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 32 deletions(-) diff --git a/server/dlna/dlna.go b/server/dlna/dlna.go index df53758..9bdd7e4 100644 --- a/server/dlna/dlna.go +++ b/server/dlna/dlna.go @@ -11,10 +11,8 @@ import ( "time" "github.com/anacrolix/dms/dlna/dms" - "github.com/anacrolix/dms/upnpav" "server/log" - "server/torr" "server/web/pages/template" ) @@ -129,34 +127,6 @@ func onBrowse(path, rootObjectPath, host, userAgent string) (ret []interface{}, } func onBrowseMeta(path string, rootObjectPath string, host, userAgent string) (ret interface{}, err error) { - if path == "/" { - rootObj := upnpav.Object{ - ID: "0", - ParentID: "-1", - Restricted: 1, - Searchable: 1, - Title: "TorrServer", - Date: upnpav.Timestamp{Time: time.Now()}, - Class: "object.container.storageFolder", - } - // add Root Object - ret = upnpav.Container{Object: rootObj, ChildCount: 1} - return - } else if path == "/TR" { - // TR Object Meta - trObj := upnpav.Object{ - ID: "%2FTR", - ParentID: "0", - Restricted: 1, - Searchable: 1, - Title: "Torrents", - Date: upnpav.Timestamp{Time: time.Now()}, - Class: "object.container.storageFolder", - } - vol := len(torr.ListTorrent()) - ret = upnpav.Container{Object: trObj, ChildCount: vol} - return - } ret = getTorrentMeta(path, host) if ret == nil { err = fmt.Errorf("meta not found") diff --git a/server/dlna/list.go b/server/dlna/list.go index 25d28b4..4a4673b 100644 --- a/server/dlna/list.go +++ b/server/dlna/list.go @@ -73,7 +73,7 @@ func getTorrents() (ret []interface{}) { Class: "object.container.storageFolder", Date: upnpav.Timestamp{Time: time.Now()}, } - cnt := upnpav.Container{Object: obj, ChildCount: 1} + cnt := upnpav.Container{Object: obj, ChildCount: 0} ret = append(ret, cnt) } return @@ -129,7 +129,34 @@ func getTorrentMeta(path, host string) (ret interface{}) { } // Meta object - if isHashPath(path) { + if path == "/" { + // root object meta + rootObj := upnpav.Object{ + ID: "0", + ParentID: "-1", + Restricted: 1, + Searchable: 1, + Title: "TorrServer", + Date: upnpav.Timestamp{Time: time.Now()}, + Class: "object.container.storageFolder", + } + meta := upnpav.Container{Object: rootObj, ChildCount: 1} + return meta + } else if path == "/TR" { + // TR Object Meta + trObj := upnpav.Object{ + ID: "%2FTR", + ParentID: "0", + Restricted: 1, + Searchable: 1, + Title: "Torrents", + Date: upnpav.Timestamp{Time: time.Now()}, + Class: "object.container.storageFolder", + } + vol := len(torrs) + meta := upnpav.Container{Object: trObj, ChildCount: vol} + return meta + } else if isHashPath(path) { // hash object meta obj := upnpav.Object{ ID: "%2F" + torr.TorrentSpec.InfoHash.HexString(),