content_dir 跟 ushare 的 cds 看來很像,不過分成 public(本檔) 與 private/protected 部份
UpnpSetMaxContentLength (MAX_CONTENT_LENGTH);
didl_object 怪了,跟 ushare 來比,似乎簡單不少,不過感覺 ushare 寫的比較易讀
djfs file system implementation for djmount
<mount> -+- devices
|
|- <devname> -+- .status -> ../.debug/<devname>/status
| |
| +- xxx -+- xxx
| | |- xxx
| | `- _search/
| |
| +- .metadata/ -+- xxx
| | `- xxx
| |
| `- _search/ -+- search_capabilities
| |--+- ...
| `- ...
|
|- <devname>
|
`- .debug/
/*
* Warning : the libupnp API (UpnpOpenHttpGetEx,
* UpnpReadHttpGet ...) has strange prototypes for length
* and ranges : "int" is not sufficient for large files !
*/
UpnpOpenHttpGetEx(), UpnpReadHttpGet(), UpnpCloseHttpGet()
djmount 比較有「物件」的概念,這會是較優的寫法呢,還是讓源碼不易閱讀呢?
比較有關的檔除了上面的 device_list 之外,還有 service, upnp_util,共三個
device_list 這個檔跟 upnp 相關性還比較大些
UpnpSearchAsync(), UpnpDownloadUrlItem(), UpnpGetErrorMessage(), UpnpInit(), UpnpFinish(), UpnpGetServerIpAddress(), UpnpGetServerPort(), UpnpUnRegisterClient(), UpnpRegisterClient() <-- 這是 Control Point 在 EventHandlerCallback () 會看到底下的 event type UPNP_DISCOVERY_ADVERTISEMENT_ALIVE, UPNP_DISCOVERY_SEARCH_RESULT, UPNP_DISCOVERY_SEARCH_TIMEOUT, UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE, UPNP_CONTROL_ACTION_COMPLETE, UPNP_CONTROL_GET_VAR_COMPLETE. UPNP_EVENT_RECEIVED, UPNP_EVENT_SUBSCRIBE_COMPLETE, UPNP_EVENT_UNSUBSCRIBE_COMPLETE, UPNP_EVENT_RENEWAL_COMPLETE, UPNP_EVENT_AUTORENEWAL_FAILED, UPNP_EVENT_SUBSCRIPTION_EXPIRED, UPNP_EVENT_SUBSCRIPTION_REQUEST, UPNP_CONTROL_GET_VAR_REQUEST, UPNP_CONTROL_ACTION_REQUEST 後面三個會被忽略 upnp_util 裡則看到更多些
UPNP_DISCOVERY_ADVERTISEMENT_ALIVE,
UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE,
UPNP_DISCOVERY_SEARCH_RESULT,
UPNP_DISCOVERY_SEARCH_TIMEOUT,
/*
* SOAP Stuff
*/
UPNP_CONTROL_ACTION_REQUEST,
UPNP_CONTROL_ACTION_COMPLETE,
UPNP_CONTROL_GET_VAR_REQUEST,
UPNP_CONTROL_GET_VAR_COMPLETE,
/*
* GENA Stuff
*/
UPNP_EVENT_SUBSCRIPTION_REQUEST,
UPNP_EVENT_RECEIVED,
UPNP_EVENT_RENEWAL_COMPLETE,
UPNP_EVENT_SUBSCRIBE_COMPLETE,
UPNP_EVENT_UNSUBSCRIBE_COMPLETE,
UPNP_EVENT_AUTORENEWAL_FAILED,
UPNP_EVENT_SUBSCRIPTION_EXPIRED,
2 意見:
今天在用另一台電腦來執行 djmount,發現一直跑不起來,後來問 Jason 才又記起以前搞過同樣的事情,記性真的很差。這邊特別寫下來供參考:
一、要執行 modprobe fuse
二、要有工具 fusermount
三、要 route add -net 239.0.0.0 netmask 255.0.0.0 dev eth0
四、檢查一下命令中的 mount point 是否存在
五、要以 root 執行命令
在我的工作電腦裡,我有兩張網卡,一張是公司網路,一張是內部網路,若想把兩張網路切割開來,得自己修改 routing table 才行,請參考 route 命令。我的 route table 目前是:
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 * 255.255.255.0 U 0 0 0 eth0
192.168.6.0 * 255.255.255.0 U 0 0 0 eth0
192.168.123.0 * 255.255.255.0 U 0 0 0 eth1
10.1.0.0 * 255.255.0.0 U 0 0 0 eth0
239.0.0.0 * 255.0.0.0 U 0 0 0 eth0
default 192.168.123.254 0.0.0.0 UG 0 0 0 eth1
對外走 eth1(default), 對內走 eth0, 搭配 route 239.0.0.0 可以抓到內部 upnp devices.
張貼留言