2021年6月19日 星期六

busybox logger

logger [OPTIONS] [MESSAGE]

寫 MESSAGE 或標準輸入到 syslog

選項

  • -s:同時也寫到 stderr。
  • -t TAG:使用 TAG 作為標示,預設是使用者名稱。
  • -p PRIO:numeric 或 facility.level 優先權,預設是 user.notice

範例

  • logger hello

參考

  1. busybox sysklogd 原始碼

2021年6月12日 星期六

busybox syslogd

syslogd [選項]

選項

  • -n:前景執行。
  • -O FILE:日誌檔,預設 /var/log/messages。本地紀錄時,未符合規則、等級小於選項 -l、且不紀錄到 share memory 時使用。
  • -l N:只紀錄小於等級 N (1-8) 的訊息。
  • -S:較小的輸出,不放主機名稱和分類等級。
  • -m MIN:MIN 週期丟 SIGALRM 給自己,在日誌加「-- MARK --」。程式未啟用。參考 alarm()。

功能 ROTATE_LOGFILE

  • -s SIZE:rotation 大小 (KB),預設 200KB,0 不 rotation。
  • -b N:保留 N rotated logs,預設 1,最大 99,0 不保留。

功能 REMOTE_LOG

  • -R HOST[:PORT]:紀錄到遠端 IP 或主機的 PORT,預設 PORT 是 514/UDP。如果本地也要紀錄,選項要開 -L。
  • -L:紀錄到遠端時,同時也紀錄到本地。

功能 SYSLOGD_DUP

  • -D:丟棄重複的訊息。

功能 IPC_SYSLOG

  • -C[size_kb]:未符合規則且等級小於選項 -l 的,紀錄到在 share memory 的 circular buffer,使用 logread 讀取。參考 shmget()、shmat()、shmdt()、shmctl()、semget()、semop()、semctl()。

功能 SYSLOGD_CFG

  • -f FILE:指定設定檔,預設 /etc/syslog.conf。符合規則的就不會再紀錄到指定的日誌檔或 IPC share memory。

範例

  • syslogd -R masterlog:514
  • syslogd -R 192.168.1.1:601

syslogd 動作

  1. 讀取 /dev/log 訊息。
  2. 檢查有沒有重複。
  3. 紀錄到遠端話,送到遠端。沒開 -L 選項則回到 1.。
  4. 預設分類等級是 user.notice,嘗試解析訊息中 <數字>。
  5. 換行替代為空白,TAB 不變,其它 0x1F 以下的碼替代為 ^A、^B、...。
  6. 使用訊息中已有的 timestamp 或產生 timestamp。
  7. 沒設 -S 選項加上主機名稱和分類等級。
  8. 設定檔有符合的分類等級規則,本地紀錄完回到 1.。
  9. 符合紀錄等級以下,紀錄到 share memory,否則本地紀錄到選項 -O 的日誌檔。

本地紀錄的動作

  1. 如果不在同一秒,重新開啟檔案。
  2. 嘗試開啟檔案,失敗改開啟 /dev/console,再不行則用 stderr。
  3. 一般檔案進行 rotate 動作。
  4. 寫入。

參考

  1. busybox sysklogd 原始碼
  2. facilitynames[] 和 prioritynames[] 在 uClibc 的 include/sys/syslog.h

2021年6月8日 星期二

SIP P-Header

SIP 的 Private Header (P-Header) 擴充

3GPP [RFC7315] [RFC7976]

  • P-Associated-URI:在 SIP REGISTER 成功回應時告知所有相關 URI。可有多個。UA 可用這些 URI 身份,但並不表示這些 URI 已註冊。
    P-Associated-URI       = "P-Associated-URI" HCOLON
                             [p-aso-uri-spec]
                             *(COMMA p-aso-uri-spec)
    p-aso-uri-spec         = name-addr *(SEMI ai-param)
    ai-param               = generic-param
    範例 [https://community.cisco.com/t5/ip-telephony-and-phones/cisco-2811-itsp-sip-configuration-was-good-from-a-long-time-but/m-p/4163078]
    P-Associated-URI: <sip:+97440006999@vodafone.qa>
    P-Associated-URI: <tel:+97440006999>
    P-Associated-URI: <tel:+97440006900;wcard-range=+974400069![0-9][0-9]!>
    P-Associated-URI: <sip:+974400069![0-9][0-9]!@vodafone.qa>
    name-addr 的 URI 是 <> 包起來的,其中 user 或 telephone-subscriber 的 wildcard 支援
    • 有沒有標準?一般 wildcard 部份前後用 ! 包起來,放正規表示式語法,但可能不是全部支援。
    • IMS PSI 
    • Alcatel-Lucent 5060 IP Call Server (ICS) 的 wildcard PUID。PrID, pbxPUID, pbxPrID, iDN (individual Directory Number)
  • P-Called-Party-ID
  • P-Visited-Network-ID
  • P-Access-Network-Info [https://datatracker.ietf.org/doc/html/rfc7913]
  • P-Charging-Function-Addresses
  • P-Charging-Vector

Early Media 授權 [https://datatracker.ietf.org/doc/html/rfc5009]

2021年5月28日 星期五

doorphone ii

電話式門口對講機系統局線共用型

明治牌中繼器 SY-333

電源

  • 110VAC 經過變壓器為 62VAC 作為振鈴源
  • 62VAC 經過整流為 41VDC 作為門鎖電壓及門口機電路使用
  • 41VDC 在轉成 15VDC 及 5VDC
_______  __  __  ______        ┌────┐41VDC
110VAC WW  )(  WW 62VAC  \─┬───┤整流├─┬────>門鎖電壓
       5Ω  )(__  1KΩ       │   └────┘ ├>15V->5V
           )(
___________)(____振鈴源             └>門口機電路

外線 L1/L2

  • photodiode 隔離響鈴偵測 => RA0
  • 平常跟內線搭在一起,按下門口機按鍵分離。(RB5 控制的繼電器)

內線 Rph/Tph

  • 電容及變壓器隔離
  • 橋式整流
    • hook detection => RB6
    • ??
  • 平常搭到內線,按下門口機按鍵改搭到另一個 RB4 控制的繼電器。(RB5 控制的繼電器) 內線沒振鈴時搭到門口機電路及 RB7。

門口機 RD/TD

  • 平常 4.8V,按 0V,放 12V

門鎖 EL/AC

  • 可提供 41VDC 或只是讓迴路接通

PIC16F54

  • RA0:偵測外線響鈴
  • RA1:偵測 * (1011) 或 # (1100)
  • RA2:門口機響鈴中
  • RA3:(門口機電路)
  • RB0:偵測門口機按鍵
  • RB1:(門口機電路)
  • RB2:
  • RB3:控制開門鎖繼電器
  • RB4:控制響鈴繼電器
  • RB5:控制外線繼電器。平常為 0 = 搭到內線。
  • RB6:偵測 offhook
  • RB7:輸出音樂?可能是輸出插撥音
```
idle --(門口按鍵)-> 門口響鈴 -(offhook)-> 門口通話
     <-(timeout)---
     <------------------------(onhook)---

門口通話

idle --(offhook)-> 外線通話或撥出
     <-(onhook)---

門口通話 -(外線來電)-> 插撥音

外線通話或撥出 -(門口按鍵來電)-> 插撥音
```
offhook -(門口按鍵)-> 插撥音?

同時外線來電及門口按鍵?

插撥音外線或門口會聽到?

未來
* 一樓蜂鳴器,需要 24VAC 驅動?用 15VDC 可以嗎?
* 局端電源
* 樓層互打
* 轉網路電話、line 電話、FB 電話
* 擴音

參考

  • 厝第一代門口機
  • 電話電纜芯線顏色
    • 單心 2C/4C/6C/7C/8C/10C/12C/14C:
      紅/黑/黃/綠/白/藍/橙/棕/灰/紫
      粉紅/淺黃/淺綠/淺藍
    • 絞線 4P/5P/10P:
      (白/藍)(白/橙)(白/綠)(白/棕)/(白/灰)
      (紅/藍)(紅/橙)(紅/綠)(紅/棕)/(紅/灰)
    • 黑、棕、紅、橙、黃、綠、藍、紫、灰、白、粉紅、青綠。
  • AWG (American wire gauge) 數字越小越粗 AWG24 0.5mm, AWG22 0.65mm
  • 對講機系統可分成三類
    1. 傳統 (類比) 式,在單戶時是 6C
    2. 數位式免持 (4C)
    3. 電話式,門口機通常是透過中繼器接到一般的電話機,也可以接到電話交換機的外線埠。有一種局線共用型可以直接並接話機及市話外線。
  • 電話式門口機局線共用型中繼器
    • 按門口機會響鈴,如跟外線通話中會有插播音。(如何切換?)
    • 跟門口機通話時有來電會有插播音。(外線不會察覺有摘機。如何消除響鈴?)
    • 跟門口機通話時,按 * 或 # 開門。
    • 並接的話機有數量限制嗎?
    • 更改鈴聲?
    • 更改插播音?
  •  * UY 2P K2電話接線壓接端子
    * UR 3P 電話接線壓接端子
    * UB 2P 電話分接線壓接端子
    * 電話線接頭 壓線鉗

    TP-LINK TL-MR3420

    [mksquashfs4] 根目錄做成 root.squashfs-raw
    [dd] loader-tl-mr3420-v1.gz + vmlinux-tl-mr3420-v1.okli = kernel-tl-mr3420-v1.bin
    • loader 4630 bytes,佔用 7680 bytes
    • vmlinux 928400 bytes,佔用 928768 bytes
    [mktplinkfw] header + kernel-tl-mr3420-v1.bin + root.squashfs-raw (2957496B) = openwrt-ar71xx-generic-tl-mr3420-v1-squashfs-sysupgrade.bin
    • header 512 bytes
    • kernel 936448 bytes

    https://redacacia.me/2013/03/07/debrick-your-tl-mr3420-router-with-a-serial-ttl-cable/

    https://forum.archive.openwrt.org/viewtopic.php?id=32512&p=1#p146315 

    Gargoyle 預設密碼:admin

    UART 接頭 SJ1TxRxGNDVCC

    Tx 10K VCC pull-up
    接出線RxTxGNDVCC
    USB UART 線

    2021年5月22日 星期六

    Issabel IP PBX

    Elastix 2.5 是 GPL 自由軟體,而 Elastix 5.0 是 3CX 私有軟體。Issabel 分支 Elastix 5.0 之前的開源軟體維護。

    VirtualBox Linux RetHat 64-bit, 2048M Memroy, 20G HD, Bridged Adaptor

    https://www.youtube.com/watch?v=qZE1Tx-fy90&list=PLtWLDPhfY-igBjqrTY5dCpneHEAAXMLdT 

    基於 Asterisk、...

    參考

    https://en.wikipedia.org/wiki/Elastix

    2021年4月3日 星期六

    SIP Session Timers

    RFC4028 提供 SIP session expiration 機制,週期送 re-INVITE 或 UPDATE 作為 session 持續的請求。雖然 UA 可以知道,但 Proxy 不知道 session 是否還活著,例如 BYE 沒收到。 session timer,週期經過協調,如在週期內沒收到 refresh,視為 session 已經結束,Proxy 或 UA 可以清除狀態,結束 NAT session。

    新增

    • Option Tag:timer
      • 支援的 UAC 必須放 Supported: timer,即使目前 session 不使用,或者 Required 或 Proxy-Required 已經有了。
      • UAC 並不建議放 Required 或 Proxy-Required,因為只要 UAC 支援就能運作。
    • Session-Expires (x): session 逾時的秒數,不能低於 Min-SE。只放在 INVITE 和 UPDATE,或者其 200 回應。建議 1800 秒 (30 分),95% 的通話低於此值。
      • UAC 一開始可以加 refresher=uac,但就不能協調決定。
    • Min-SE:session 逾時最短的秒數,沒有的話預設 90 秒,SIP transaction 逾時兩倍時間多一點。讓 UA 在一半時間嘗試 refresh 前,能夠結束 transaction。只用在 INVITE 和 UPDATE,或其 422 回應則必須要有。
    • 422 Session Interval Too Small:當 proxy 或 UAS 收到請求的 Session-Expires 時間太短時回應,必須包含 Min-SE

    一開始 UAC 送 INVITE 含 Supported: timer,可放 Session-Expires 或 Min-SE。之後 Proxy 或 UAS 可減小 Session-Expires 或加大 Min-SE,沒有的話可插入。如果要求的 Session-Expires 小於自己允許的週期,回 422 含 Min-SE 說明最小允許的週期。最後協調成功決定的週期,放在 200 OK 回應的 Session-Expires,並含 'refresher' 參數表示目前的 uac 或 uas 那邊進行 refreshing。

    在過期前,refresher 產生 re-INVITE 或 UPDATE session refresh request。如果 refresher 沒收到回應,送 BYE 結束 session。另一邊到過期一直沒收到 refresh 請求,同樣送 BYE。

    有一種較複雜的情況,只有一端 UA 支援,一個 Proxy may need to insert the Session-Expires header field into the response, in the event that the UAS doesn't support the extension. The negotiation of the role of refresher is also affected by this capability; it takes into consideration which participants support the extension.

     

    Session-Expires  = ("Session-Expires" / "x") HCOLON delta-seconds
                         *(SEMI se-params)
    se-params        = refresher-param / generic-param
    refresher-param  = "refresher" EQUAL  ("uas" / "uac")
     Min-SE  =  "Min-SE" HCOLON delta-seconds *(SEMI generic-param)

    待整理

    RFC4028 Section 7.2 以後

    SIP header Via

    所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...