แž€แžถแžšแžšแžปแž€แžšแž€แž˜แŸ‰แžถแžŸแŸŠแžธแž“ Mediastreamer2 VoIP แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 9

แžŸแž˜แŸ’แž—แžถแžšแŸˆแž“แŸƒแžขแžแŸ’แžแž”แž‘แž‚แžบแž™แž€แž–แžธแžแŸ’แž‰แžปแŸ† แž”แŸ‰แžปแžŸแŸ’แžแžทแŸ zen.

แž–แžธแžšแž‡แžถแž“แŸ‹ intercom

แž€แžถแžšแžšแžปแž€แžšแž€แž˜แŸ‰แžถแžŸแŸŠแžธแž“ Mediastreamer2 VoIP แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 9

แž€แŸ’แž“แžปแž„โ€‹แžขแžแžธแžแž€แžถแž› แžขแžแŸ’แžแž”แž‘ duplex intercom แžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ’แžšแž€แžถแžŸ แž แžพแž™แž“แŸ…แž€แŸ’แž“แžปแž„แž˜แžฝแž™แž“แŸแŸ‡ แž™แžพแž„แž“แžนแž„แž”แž„แŸ’แž€แžพแžแžœแžถแŸ”

แžŠแŸ’แž™แžถแž€แŸ’แžšแžถแž˜แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž แžถแž‰แž€แŸ’แž“แžปแž„แžšแžผแž”แž—แžถแž–แž…แŸ†แžŽแž„แž‡แžพแž„แŸ” แžแŸ’แžŸแŸ‚แžŸแž„แŸ’แžœแžถแž€แŸ‹แž‘แžถแž”แž“แŸƒแžแž˜แŸ’แžšแž„แž”แž„แŸ’แž€แžพแžแž‡แžถแž•แŸ’แž›แžผแžœแž”แž‰แŸ’แž‡แžผแž“ แžŠแŸ‚แž›แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž–แžธแž€แžถแžแžŸแŸ†แžกแŸแž„แŸ” แžœแžถแž•แŸ’แžแž›แŸ‹แž“แžผแžœแž‚แŸ†แžšแžผแžŸแž‰แŸ’แž‰แžถแž–แžธแž˜แžธแž€แŸ’แžšแžผแž แŸ’แžœแžผแž“แŸ” แžแžถแž˜แž›แŸ†แž“แžถแŸ†แžŠแžพแž˜ แžœแžถแž€แžพแžแžกแžพแž„แž€แŸ’แž“แžปแž„แžขแžแŸ’แžšแžถ 8000 แž‚แŸ†แžšแžผแž€แŸ’แž“แžปแž„แž˜แžฝแž™แžœแžทแž“แžถแž‘แžธแŸ” แž‡แž˜แŸ’แžšแŸ…แž”แŸŠแžธแžแž‘แžทแž“แŸ’แž“แž“แŸแž™แžŠแŸ‚แž›แžแž˜แŸ’แžšแž„แžขแžผแžŒแžธแž™แŸ‰แžผแžŸแŸ’แž‘แŸ’แžšแžธแž˜แž˜แŸแžŒแŸ€แž”แŸ’แžšแžพแž‚แžบ 16 แž”แŸŠแžธแž (แžœแžถแž˜แžทแž“แžŸแŸ†แžแžถแž“แŸ‹แž‘แŸ แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แž“แž€แž…แž„แŸ‹แž”แžถแž“ แžขแŸ’แž“แž€แžขแžถแž…แžŸแžšแžŸแŸแžšแžแž˜แŸ’แžšแž„แžŠแŸ‚แž›แž“แžนแž„แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž‡แžถแž˜แžฝแž™แž‡แž˜แŸ’แžšแŸ…แž”แŸŠแžธแžแžแŸ’แž–แžŸแŸ‹แž‡แžถแž„แž“แŸแŸ‡)แŸ” แž‘แžทแž“แŸ’แž“แž“แŸแž™แžแŸ’แžšแžผแžœแž”แžถแž“แžŠแžถแž€แŸ‹แž‡แžถแž€แŸ’แžšแžปแž˜แž‘แŸ…แž‡แžถแž”แŸ’แž›แžปแž€แž“แŸƒ 160 แž‚แŸ†แžšแžผแŸ” แžŠแžผแž…แŸ’แž“แŸแŸ‡แž”แŸ’แž›แžปแž€แž“แžธแž˜แžฝแž™แŸ—แž˜แžถแž“แž‘แŸ†แž แŸ† 320 แž”แŸƒแŸ” แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€ แž™แžพแž„แž”แž‰แŸ’แž‡แžผแž“แž‘แžทแž“แŸ’แž“แž“แŸแž™แž‘แŸ…แž€แžถแžšแž”แž‰แŸ’แž…แžผแž›แžšแž”แžŸแŸ‹แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž—แŸ’แž›แžพแž„ แžŠแŸ‚แž›แž“แŸ…แž–แŸแž›แž”แžทแž‘ แž‚แžบ "แžแž˜แŸ’แž›แžถแž—แžถแž–" แž‘แŸ…แž“แžนแž„แž‘แžทแž“แŸ’แž“แž“แŸแž™แŸ” แžแŸ’แž‰แžปแŸ†แž”แžถแž“แž”แž“แŸ’แžแŸ‚แž˜แžœแžถแž€แŸ’แž“แžปแž„แž€แžšแžŽแžธแžŠแŸ‚แž›แžขแŸ’แž“แž€แž’แžปแž‰แž‘แŸ’แžšแžถแž“แŸ‹แž“แžนแž„แž€แžถแžšแž“แžทแž™แžถแž™แž‘แŸ…แž€แžถแž“แŸ‹แž˜แžธแž€แŸ’แžšแžผแž แŸ’แžœแžผแž“แž€แŸ†แžกแžปแž„แž–แŸแž›แž”แŸ†แž”แžถแžแŸ‹แž€แŸ†แž แžปแžŸ - แžขแŸ’แž“แž€แžขแžถแž…แž”แŸ’แžšแžพแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž—แŸ’แž›แžพแž„แžŠแžพแž˜แŸ’แž”แžธ "แž”แžถแž‰แŸ‹" แž•แŸ’แž›แžผแžœแž‡แžถแž˜แžฝแž™แž“แžนแž„แžŸแž‰แŸ’แž‰แžถแžŸแŸ†แžกแŸแž„แŸ”

แž”แž“แŸ’แž‘แžถแž”แŸ‹แž–แžธแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž—แŸ’แž›แžพแž„ แžŸแž‰แŸ’แž‰แžถแž‘แŸ…แžงแž”แž€แžšแžŽแŸแž”แŸ†แž›แŸ‚แž„แž€แžผแžŠ แžŠแŸ‚แž›แž”แŸ†แž”แŸ’แž›แŸ‚แž„แž‚แŸ†แžšแžผ 16 แž”แŸŠแžธแžแžšแž”แžŸแŸ‹แž™แžพแž„แž™แŸ„แž„แž‘แŸ…แžแžถแž˜แž…แŸ’แž”แžถแž”แŸ‹ ยต-law (G.711 standard) แž‘แŸ…แž‡แžถแž”แŸ’แžšแžถแŸ†แž”แžธแž”แŸŠแžธแžแŸ” แž“แŸ…แž›แž‘แŸ’แž’แž•แž›แž“แŸƒแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž”แŸ†แž›แŸ‚แž„แž€แžผแžŠ แž™แžพแž„แž˜แžถแž“แž”แŸ’แž›แžปแž€แž‘แžทแž“แŸ’แž“แž“แŸแž™แž‘แŸ†แž แŸ†แž–แžถแž€แŸ‹แž€แžŽแŸ’แžแžถแž›แžšแžฝแž…แž แžพแž™แŸ” แž‡แžถแž‘แžผแž‘แŸ… แž™แžพแž„แžขแžถแž…แž”แž‰แŸ’แž‡แžผแž“แž‘แžทแž“แŸ’แž“แž“แŸแž™แžŠแŸ„แž™แž‚แŸ’แž˜แžถแž“แž€แžถแžšแž”แž„แŸ’แž แžถแž”แŸ‹ แž”แŸ’แžšแžŸแžทแž“แž”แžพแž™แžพแž„แž˜แžทแž“แžแŸ’แžšแžผแžœแž€แžถแžšแžšแž€แŸ’แžŸแžถแž‘แžปแž€แž…แžšแžถแž…แžšแžŽแŸแŸ” แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž“แŸ…แž‘แžธแž“แŸแŸ‡ แžœแžถแž˜แžถแž“แž”แŸ’แžšแž™แŸ„แž‡แž“แŸแž€แŸ’แž“แžปแž„แž€แžถแžšแž”แŸ’แžšแžพแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž”แŸ†แž”แŸ’แž›แŸ‚แž„แž€แžผแžŠ แž–แŸ’แžšแŸ„แŸ‡ Wireshark แžขแžถแž…แž•แž›แžทแžแžขแžผแžŒแžธแž™แŸ‰แžผแž–แžธแžŸแŸ’แž‘แŸ’แžšแžธแž˜ RTP แžกแžพแž„แžœแžทแž‰แž”แžถแž“แž›แžปแŸ‡แžแŸ’แžšแžถแžแŸ‚แžœแžถแžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž แžถแž”แŸ‹แž™แŸ„แž„แž‘แŸ…แžแžถแž˜ ยต-law แžฌ a-law แŸ”

แž”แž“แŸ’แž‘แžถแž”แŸ‹แž–แžธแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž”แŸ†แž›แŸ‚แž„แž€แžผแžŠ แž”แŸ’แž›แžปแž€แž‘แžทแž“แŸ’แž“แž“แŸแž™แžŸแŸ’แžšแžถแž›แž‡แžถแž„แž˜แžปแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž•แŸ’แž‰แžพแž‘แŸ…แž€แžถแž“แŸ‹แžแž˜แŸ’แžšแž„ rtpsend แžŠแŸ‚แž›แž“แžนแž„แžŠแžถแž€แŸ‹แž–แžฝแž€แžœแžถแž“แŸ…แž€แŸ’แž“แžปแž„แž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“ RTP แž€แŸ†แžŽแžแŸ‹แž‘แž„แŸ‹แž…แžถแŸ†แž”แžถแž…แŸ‹ แž“แžทแž„แž•แŸ’แžแž›แŸ‹แžฑแŸ’แž™แžœแžถแž‘แŸ…แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž•แŸ’แžŸแžถแž™แž–แŸแžแŸŒแž˜แžถแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž”แž‰แŸ’แž‡แžผแž“แžแžถแž˜แž”แžŽแŸ’แžแžถแž‰แž€แŸ’แž“แžปแž„แž‘แž˜แŸ’แžšแž„แŸ‹แž‡แžถแž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“ UDP แŸ”

แžแŸ’แžŸแŸ‚แžŸแž„แŸ’แžœแžถแž€แŸ‹แžแžถแž„แž›แžพแž“แŸƒแžแž˜แŸ’แžšแž„แž”แž„แŸ’แž€แžพแžแž‡แžถแž•แŸ’แž›แžผแžœแž‘แž‘แžฝแž› แž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“ RTP แžŠแŸ‚แž›แž‘แž‘แžฝแž›แž”แžถแž“แžŠแŸ„แž™แžขแŸ’แž“แž€แž•แŸ’แžŸแžถแž™แž˜แŸแžŒแŸ€แž–แžธแž”แžŽแŸ’แžแžถแž‰แž”แž‰แŸ’แž…แžผแž›แžแž˜แŸ’แžšแž„ rtprecv แž“แŸ…แž‘แžทแž“แŸ’แž“แž•แž›แžŠแŸ‚แž›แž–แžฝแž€แžœแžถแž›แŸแž…แžกแžพแž„แž€แŸ’แž“แžปแž„แž‘แž˜แŸ’แžšแž„แŸ‹แž‡แžถแž”แŸ’แž›แžปแž€แž‘แžทแž“แŸ’แž“แž“แŸแž™ แžŠแŸ‚แž›แž“แžธแž˜แžฝแž™แŸ—แžแŸ’แžšแžผแžœแž‚แŸ’แž“แžถแž“แžนแž„แž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“แžŠแŸ‚แž›แž‘แž‘แžฝแž›แž”แžถแž“แž˜แžฝแž™แŸ” แž”แŸ’แž›แžปแž€แž“แŸแŸ‡แž•แŸ’แž‘แžปแž€แž‘แžทแž“แŸ’แž“แž“แŸแž™แž”แž“แŸ’แž‘แžปแž€แžแŸ‚แž”แŸ‰แžปแžŽแŸ’แžŽแŸ„แŸ‡ แž“แŸ…แž€แŸ’แž“แžปแž„แžขแžแŸ’แžแž”แž‘แž˜แžปแž“ แž–แžฝแž€แžœแžถแžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž แžถแž‰แž‡แžถแž–แžŽแŸŒแž”แŸƒแžแž„แž“แŸ…แž€แŸ’แž“แžปแž„แžšแžผแž”แž—แžถแž–แŸ”

แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€ แž”แŸ’แž›แžปแž€แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž‰แŸ’แž‡แžผแž“แž‘แŸ…แžแž˜แŸ’แžšแž„แžŒแžทแž€แžผแžŠ แžŠแŸ‚แž›แž”แŸ†แž”แŸ’แž›แŸ‚แž„แž‚แŸ†แžšแžผแž˜แžฝแž™แž”แŸƒแžŠแŸ‚แž›แž˜แžถแž“แž“แŸ…แž€แŸ’แž“แžปแž„แž–แžฝแž€แžœแžถแž‘แŸ…แž‡แžถแž›แžธแž“แŸแžขแŸŠแŸ‚แžš 16 แž”แŸŠแžธแžแŸ” แžŠแŸ‚แž›แžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แžŠแŸ†แžŽแžพแžšแž€แžถแžšแžŠแŸ„แž™แžแž˜แŸ’แžšแž„แžขแŸ’แž“แž€แž•แŸ’แžŸแžถแž™แž˜แŸแžŒแŸ€แžšแžฝแž…แž แžพแž™แŸ” แž€แŸ’แž“แžปแž„แž€แžšแžŽแžธแžšแž”แžŸแŸ‹แž™แžพแž„ แž™แžพแž„แž‚แŸ’แžšแžถแž“แŸ‹แžแŸ‚แž•แŸ’แž‰แžพแžœแžถแž‘แŸ…แž€แžถแžแžŸแŸ†แžกแŸแž„แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž…แžถแž€แŸ‹แžŸแžถแžšแžแŸ’แž˜แžธแž“แŸ…แž›แžพแžงแž”แž€แžšแžŽแŸแž”แŸ†แž–แž„แžŸแž˜แŸ’แž›แŸแž„แž“แŸƒแž€แžถแžŸแžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แŸ”

แžฅแžกแžผแžœแž“แŸแŸ‡แžŸแžผแž˜แž”แž“แŸ’แžแž‘แŸ…แž€แžถแžšแžขแž“แžปแžœแžแŸ’แžแž€แž˜แŸ’แž˜แžœแžทแž’แžธแŸ” แžŠแžพแž˜แŸ’แž”แžธแž’แŸ’แžœแžพแžŠแžผแž…แž“แŸแŸ‡แž™แžพแž„แž“แžนแž„แž”แž‰แŸ’แž…แžผแž›แž‚แŸ’แž“แžถแž“แžผแžœแžฏแž€แžŸแžถแžšแžขแŸ’แž“แž€แž‘แž‘แžฝแž›แž“แžทแž„แžขแŸ’แž“แž€แž”แž‰แŸ’แž‡แžผแž“แžŠแŸ‚แž›แž™แžพแž„แž”แžถแž“แž”แŸ†แž”แŸ‚แž€แž–แžธแž˜แžปแž“แŸ” แž˜แžปแž“แž“แŸแŸ‡ แž™แžพแž„แž”แžถแž“แž”แŸ’แžšแžพแž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžแŸแžšแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž…แŸ’แžšแž€ แž“แžทแž„แžขแžถแžŸแž™แžŠแŸ’แž‹แžถแž“ แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžฅแžกแžผแžœแž“แŸแŸ‡แž™แžพแž„แžแŸ’แžšแžผแžœแž€แžถแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแžพแž˜แŸ’แž”แžธแžขแžถแž…แž”แŸ’แžšแžพแž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžŠแŸ‚แž›แž™แžพแž„แž”แž‰แŸ’แž‡แžถแž€แŸ‹แž“แŸ…แž–แŸแž›แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แŸ” แžŠแžพแž˜แŸ’แž”แžธแž’แŸ’แžœแžพแžŠแžผแž…แž“แŸแŸ‡แž™แžพแž„แž“แžนแž„แž”แž“แŸ’แžแŸ‚แž˜แž˜แžปแžแž„แžถแžšแžŸแž˜แŸ’แžšแžถแž”แŸ‹แžŠแŸ†แžŽแžพแžšแž€แžถแžšแžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹แž”แž“แŸ’แž‘แžถแžแŸ‹แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแŸ” แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€แž™แžพแž„แž“แžนแž„แžขแžถแž…แž€แŸ†แžŽแžแŸ‹แžขแžถแžŸแž™แžŠแŸ’แž‹แžถแž“ IP แž“แžทแž„แž…แŸ’แžšแž€แž“แŸƒ intercom แžŠแŸ‚แž›แž™แžพแž„แž…แž„แŸ‹แž”แž„แŸ’แž€แžพแžแž€แžถแžšแžแž—แŸ’แž‡แžถแž”แŸ‹แŸ”

แžŠแŸ†แž”แžผแž„ แž™แžพแž„แž”แž“แŸ’แžแŸ‚แž˜แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แž‘แŸ…แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ‚แž›แž“แžนแž„แžšแž€แŸ’แžŸแžถแž‘แžปแž€แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž”แžŸแŸ‹แžœแžถแŸ–

struct _app_vars
{
  int  local_port;              /* ะ›ะพะบะฐะปัŒะฝั‹ะน ะฟะพั€ั‚. */
  int  remote_port;             /* ะŸะพั€ั‚ ะฟะตั€ะตะณะพะฒะพั€ะฝะพะณะพ ัƒัั‚ั€ะพะนัั‚ะฒะฐ ะฝะฐ ัƒะดะฐะปะตะฝะฝะพะผ ะบะพะผะฟัŒัŽั‚ะตั€ะต. */
  char remote_addr[128];        /* IP-ะฐะดั€ะตั ัƒะดะฐะปะตะฝะฝะพะณะพ ะบะพะผะฟัŒัŽั‚ะตั€ะฐ. */
  MSDtmfGenCustomTone dtmf_cfg; /* ะะฐัั‚ั€ะพะนะบะธ ั‚ะตัั‚ะพะฒะพะณะพ ัะธะณะฝะฐะปะฐ ะณะตะฝะตั€ะฐั‚ะพั€ะฐ. */
};

typedef struct _app_vars app_vars;

แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž“แžนแž„แž”แŸ’แžšแž€แžถแžŸแžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แž“แŸƒแž”แŸ’แžšแž—แŸแž‘แž“แŸแŸ‡แž แŸ…แžแžถ vars แŸ”
แž”แž“แŸ’แž‘แžถแž”แŸ‹ แž™แžพแž„แž”แž“แŸ’แžแŸ‚แž˜แž˜แžปแžแž„แžถแžšแž˜แžฝแž™แžŠแžพแž˜แŸ’แž”แžธแž‰แŸ‚แž€แžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹แž”แž“แŸ’แž‘แžถแžแŸ‹แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแŸ–

/* ะคัƒะฝะบั†ะธั ะฟั€ะตะพะฑั€ะฐะทะพะฒะฐะฝะธั ะฐั€ะณัƒะผะตะฝั‚ะพะฒ ะบะพะผะฐะฝะดะฝะพะน ัั‚ั€ะพะบะธ ะฒ
* ะฝะฐัั‚ั€ะพะนะบะธ ะฟั€ะพะณั€ะฐะผะผั‹. */
void  scan_args(int argc, char *argv[], app_vars *v)
{
    char i;
    for (i=0; i<argc; i++)
    {
        if (!strcmp(argv[i], "--help"))
        {
            char *p=argv[0]; p=p + 2;
            printf("  %s walkie talkienn", p);
            printf("--help      List of options.n");
            printf("--version   Version of application.n");
            printf("--addr      Remote abonent IP address string.n");
            printf("--port      Remote abonent port number.n");
            printf("--lport     Local port number.n");
            printf("--gen       Generator frequency.n");
            exit(0);
        }

        if (!strcmp(argv[i], "--version"))
        {
            printf("0.1n");
            exit(0);
        }

        if (!strcmp(argv[i], "--addr"))
        {
            strncpy(v->remote_addr, argv[i+1], 16);
            v->remote_addr[16]=0;
            printf("remote addr: %sn", v->remote_addr);
        }

        if (!strcmp(argv[i], "--port"))
        {
            v->remote_port=atoi(argv[i+1]);
            printf("remote port: %in", v->remote_port);
        }

        if (!strcmp(argv[i], "--lport"))
        {
            v->local_port=atoi(argv[i+1]);
            printf("local port : %in", v->local_port);
        }

        if (!strcmp(argv[i], "--gen"))
        {
            v -> dtmf_cfg.frequencies[0] = atoi(argv[i+1]);
                printf("gen freq : %in", v -> dtmf_cfg.frequencies[0]);
        }
    }
}

แž‡แžถแž›แž‘แŸ’แž’แž•แž›แž“แŸƒแž€แžถแžšแžœแžทแž—แžถแž‚ แžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹แž”แž“แŸ’แž‘แžถแžแŸ‹แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž“แžนแž„แžแŸ’แžšแžผแžœแž”แžถแž“แžŠแžถแž€แŸ‹แž€แŸ’แž“แžปแž„แžœแžถแž›แž“แŸƒแžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’ vars แŸ” แž˜แžปแžแž„แžถแžšแž…แž˜แŸ’แž”แž„แžšแž”แžŸแŸ‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‚แžบแžŠแžพแž˜แŸ’แž”แžธแž”แŸ’แžšแž˜แžผแž›แž•แŸ’แž›แžผแžœแž”แž‰แŸ’แž‡แžผแž“ แž“แžทแž„แž‘แž‘แžฝแž›แž–แžธแžแž˜แŸ’แžšแž„ แž”แž“แŸ’แž‘แžถแž”แŸ‹แž–แžธแž—แŸ’แž‡แžถแž”แŸ‹แžŸแž‰แŸ’แž‰แžถแž’แžธแž€ แž€แžถแžšแž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„แž“แžนแž„แžแŸ’แžšแžผแžœแž”แžถแž“แž•แŸ’แž‘แŸแžšแž‘แŸ…แžšแž„แŸ’แžœแžทแž›แž‡แžปแŸ†แž‚แŸ’แž˜แžถแž“แž€แŸ†แžŽแžแŸ‹ แžŠแŸ‚แž›แž”แŸ’แžšแžŸแžทแž“แž”แžพแž”แŸ’แžšแŸแž€แž„แŸ‹แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž—แŸ’แž›แžพแž„แžแŸ’แžšแžผแžœแž”แžถแž“แž€แŸ†แžŽแžแŸ‹แž‘แŸ…แž˜แžทแž“แžŸแžผแž“แŸ’แž™ แž“แŸ„แŸ‡แž“แžนแž„แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž—แŸ’แž›แžพแž„แžŸแžถแž€แž›แŸ’แž”แž„แžกแžพแž„แžœแžทแž‰ แžŠแžผแž…แŸ’แž“แŸแŸ‡ แžœแžถแžŠแŸ†แžŽแžพแžšแž€แžถแžšแžŠแŸ„แž™แž˜แžทแž“แžˆแž”แŸ‹แŸ”

แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž—แŸ’แž›แžพแž„แž“แžนแž„แžแŸ’แžšแžผแžœแž€แžถแžšแž€แžถแžšแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แžกแžพแž„แžœแžทแž‰แž‘แžถแŸ†แž„แž“แŸแŸ‡ แžŠแŸ„แž™แžŸแžถแžšแž€แžถแžšแžšแž…แž“แžถแžšแž”แžŸแŸ‹แžœแžถ แžŠแŸ„แž™แžŸแžถแžšแž แŸแžแžปแž•แž›แž˜แžฝแž™แž…แŸ†แž“แžฝแž“ แžœแžถแž˜แžทแž“แžขแžถแž…แž”แž„แŸ’แž€แžพแžแžŸแž‰แŸ’แž‰แžถแžšแž™แŸˆแž–แŸแž›แž›แžพแžŸแž–แžธ 16 แžœแžทแž“แžถแž‘แžธแž”แžถแž“แž‘แŸแŸ” แž‚แžฝแžšแž€แžแŸ‹แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แžแžถแžšแž™แŸˆแž–แŸแž›แžšแž”แžŸแŸ‹แžœแžถแžแŸ’แžšแžผแžœแž”แžถแž“แž”แž‰แŸ’แž‡แžถแž€แŸ‹แžŠแŸ„แž™แž›แŸแž 32 แž”แŸŠแžธแžแŸ”

แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‘แžถแŸ†แž„แž˜แžผแž›แž“แžนแž„แž˜แžพแž›แž‘แŸ…แžŠแžผแž…แž“แŸแŸ‡แŸ–

/* ะคะฐะนะป mstest8.c ะ˜ะผะธั‚ะฐั‚ะพั€ ะฟะตั€ะตะณะพะฒะพั€ะฝะพะณะพ ัƒัั‚ั€ะพะนัั‚ะฒะฐ. */

#include <mediastreamer2/mssndcard.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/msrtp.h>

/* ะŸะพะดะบะปัŽั‡ะฐะตะผ ั„ะฐะนะป ะพะฑั‰ะธั… ั„ัƒะฝะบั†ะธะน. */
#include "mstest_common.c"

/*----------------------------------------------------------*/
struct _app_vars
{
    int  local_port;              /* ะ›ะพะบะฐะปัŒะฝั‹ะน ะฟะพั€ั‚. */
    int  remote_port;             /* ะŸะพั€ั‚ ะฟะตั€ะตะณะพะฒะพั€ะฝะพะณะพ ัƒัั‚ั€ะพะนัั‚ะฒะฐ ะฝะฐ ัƒะดะฐะปะตะฝะฝะพะผ ะบะพะผะฟัŒัŽั‚ะตั€ะต. */
    char remote_addr[128];        /* IP-ะฐะดั€ะตั ัƒะดะฐะปะตะฝะฝะพะณะพ ะบะพะผะฟัŒัŽั‚ะตั€ะฐ. */
    MSDtmfGenCustomTone dtmf_cfg; /* ะะฐัั‚ั€ะพะนะบะธ ั‚ะตัั‚ะพะฒะพะณะพ ัะธะณะฝะฐะปะฐ ะณะตะฝะตั€ะฐั‚ะพั€ะฐ. */
};

typedef struct _app_vars app_vars;

/*----------------------------------------------------------*/
/* ะกะพะทะดะฐะตะผ ะดัƒะฟะปะตะบัะฝัƒัŽ RTP-ัะตััะธัŽ. */
RtpSession* create_duplex_rtp_session(app_vars v)
{
    RtpSession *session = create_rtpsession (v.local_port, v.local_port + 1, FALSE, RTP_SESSION_SENDRECV);
    rtp_session_set_remote_addr_and_port(session, v.remote_addr, v.remote_port, v.remote_port + 1);
    rtp_session_set_send_payload_type(session, PCMU);
    return session;
}

/*----------------------------------------------------------*/
/* ะคัƒะฝะบั†ะธั ะฟั€ะตะพะฑั€ะฐะทะพะฒะฐะฝะธั ะฐั€ะณัƒะผะตะฝั‚ะพะฒ ะบะพะผะฐะฝะดะฝะพะน ัั‚ั€ะพะบะธ ะฒ
* ะฝะฐัั‚ั€ะพะนะบะธ ะฟั€ะพะณั€ะฐะผะผั‹. */
void  scan_args(int argc, char *argv[], app_vars *v)
{
    char i;
    for (i=0; i<argc; i++)
    {
        if (!strcmp(argv[i], "--help"))
        {
            char *p=argv[0]; p=p + 2;
            printf("  %s walkie talkienn", p);
            printf("--help      List of options.n");
            printf("--version   Version of application.n");
            printf("--addr      Remote abonent IP address string.n");
            printf("--port      Remote abonent port number.n");
            printf("--lport     Local port number.n");
            printf("--gen       Generator frequency.n");
            exit(0);
        }

        if (!strcmp(argv[i], "--version"))
        {
            printf("0.1n");
            exit(0);
        }

        if (!strcmp(argv[i], "--addr"))
        {
            strncpy(v->remote_addr, argv[i+1], 16);
            v->remote_addr[16]=0;
            printf("remote addr: %sn", v->remote_addr);
        }

        if (!strcmp(argv[i], "--port"))
        {
            v->remote_port=atoi(argv[i+1]);
            printf("remote port: %in", v->remote_port);
        }

        if (!strcmp(argv[i], "--lport"))
        {
            v->local_port=atoi(argv[i+1]);
            printf("local port : %in", v->local_port);
        }

        if (!strcmp(argv[i], "--gen"))
        {
            v -> dtmf_cfg.frequencies[0] = atoi(argv[i+1]);
                printf("gen freq : %in", v -> dtmf_cfg.frequencies[0]);
        }
    }
}

/*----------------------------------------------------------*/
int main(int argc, char *argv[])
{
    /* ะฃัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะฝะฐัั‚ั€ะพะนะบะธ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ. */
    app_vars vars={5004, 7010, "127.0.0.1", {0}};

    /* ะฃัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะฝะฐัั‚ั€ะพะนะบะธ ะฝะฐัั‚ั€ะพะนะบะธ ะฟั€ะพะณั€ะฐะผะผั‹ ะฒ
     * ัะพะพั‚ะฒะตั‚ัั‚ะฒะธะธ ั ะฐั€ะณัƒะผะตะฝั‚ะฐะผะธ ะบะพะผะฐะฝะดะฝะพะน ัั‚ั€ะพะบะธ. */
    scan_args(argc, argv, &vars);

    ms_init();

    /* ะกะพะทะดะฐะตะผ ัะบะทะตะผะฟะปัั€ั‹ ั„ะธะปัŒั‚ั€ะพะฒ ะฟะตั€ะตะดะฐัŽั‰ะตะณะพ ั‚ั€ะฐะบั‚ะฐ. */
    MSSndCard *snd_card =
        ms_snd_card_manager_get_default_card(ms_snd_card_manager_get());
    MSFilter *snd_card_read = ms_snd_card_create_reader(snd_card);
    MSFilter *dtmfgen = ms_filter_new(MS_DTMF_GEN_ID);
    MSFilter *rtpsend = ms_filter_new(MS_RTP_SEND_ID);

    /* ะกะพะทะดะฐะตะผ ั„ะธะปัŒั‚ั€ ะบะพะดะตั€ะฐ. */
    MSFilter *encoder = ms_filter_create_encoder("PCMU");

    /* ะ ะตะณะธัั‚ั€ะธั€ัƒะตะผ ั‚ะธะฟั‹ ะฝะฐะณั€ัƒะทะบะธ. */
    register_payloads();

    /* ะกะพะทะดะฐะตะผ ะดัƒะฟะปะตะบัะฝัƒัŽ RTP-ัะตััะธัŽ. */
    RtpSession* rtp_session= create_duplex_rtp_session(vars);
    ms_filter_call_method(rtpsend, MS_RTP_SEND_SET_SESSION, rtp_session);

    /* ะกะพะตะดะธะฝัะตะผ ั„ะธะปัŒั‚ั€ั‹ ะฟะตั€ะตะดะฐั‚ั‡ะธะบะฐ. */
    ms_filter_link(snd_card_read, 0, dtmfgen, 0);
    ms_filter_link(dtmfgen, 0, encoder, 0);
    ms_filter_link(encoder, 0, rtpsend, 0);

    /* ะกะพะทะดะฐะตะผ ั„ะธะปัŒั‚ั€ั‹ ะฟั€ะธะตะผะฝะพะณะพ ั‚ั€ะฐะบั‚ะฐ. */
    MSFilter *rtprecv = ms_filter_new(MS_RTP_RECV_ID);
    ms_filter_call_method(rtprecv, MS_RTP_RECV_SET_SESSION, rtp_session);

    /* ะกะพะทะดะฐะตะผ ั„ะธะปัŒั‚ั€ ะดะตะบะพะดะตั€ะฐ, */
    MSFilter *decoder=ms_filter_create_decoder("PCMU");

    /* ะกะพะทะดะฐะตะผ ั„ะธะปัŒั‚ั€ ะทะฒัƒะบะพะฒะพะน ะบะฐั€ั‚ั‹. */
    MSFilter *snd_card_write = ms_snd_card_create_writer(snd_card);

    /* ะกะพะตะดะธะฝัะตะผ ั„ะธะปัŒั‚ั€ั‹ ะฟั€ะธั‘ะผะฝะพะณะพ ั‚ั€ะฐะบั‚ะฐ. */
    ms_filter_link(rtprecv, 0, decoder, 0);
    ms_filter_link(decoder, 0,  snd_card_write, 0);

    /* ะกะพะทะดะฐะตะผ ะธัั‚ะพั‡ะฝะธะบ ั‚ะฐะบั‚ะพะฒ - ั‚ะธะบะตั€. */
    MSTicker *ticker = ms_ticker_new();

    /* ะŸะพะดะบะปัŽั‡ะฐะตะผ ะธัั‚ะพั‡ะฝะธะบ ั‚ะฐะบั‚ะพะฒ. */
    ms_ticker_attach(ticker, snd_card_read);
    ms_ticker_attach(ticker, rtprecv);

    /* ะ•ัะปะธ ะฝะฐัั‚ั€ะพะนะบะฐ ั‡ะฐัั‚ะพั‚ั‹ ะณะตะฝะตั€ะฐั‚ะพั€ะฐ ะพั‚ะปะธั‡ะฝะฐ ะพั‚ ะฝัƒะปั, ั‚ะพ ะทะฐะฟัƒัะบะฐะตะผ ะณะตะฝะตั€ะฐั‚ะพั€. */   
    if (vars.dtmf_cfg.frequencies[0])
    {
        /* ะะฐัั‚ั€ะฐะธะฒะฐะตะผ ัั‚ั€ัƒะบั‚ัƒั€ัƒ, ัƒะฟั€ะฐะฒะปััŽั‰ัƒัŽ ะฒั‹ั…ะพะดะฝั‹ะผ ัะธะณะฝะฐะปะพะผ ะณะตะฝะตั€ะฐั‚ะพั€ะฐ. */
        vars.dtmf_cfg.duration = 10000;
        vars.dtmf_cfg.amplitude = 1.0;
    }

    /* ะžั€ะณะฐะฝะธะทัƒะตะผ ั†ะธะบะป ะฟะตั€ะตะทะฐะฟัƒัะบะฐ ะณะตะฝะตั€ะฐั‚ะพั€ะฐ. */
    while(TRUE)
    {
        if(vars.dtmf_cfg.frequencies[0])
        {
            /* ะ’ะบะปัŽั‡ะฐะตะผ ะทะฒัƒะบะพะฒะพะน ะณะตะฝะตั€ะฐั‚ะพั€. */
            ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY_CUSTOM,
                    (void*)&vars.dtmf_cfg);
        }
        /* ะฃะบะปะฐะดั‹ะฒะฐะตะผ ั‚ั€ะตะด ะฒ ัะฟัั‡ะบัƒ ะฝะฐ 20ะผั, ั‡ั‚ะพะฑั‹ ะดั€ัƒะณะธะต ั‚ั€ะตะดั‹
         * ะฟั€ะธะปะพะถะตะฝะธั ะฟะพะปัƒั‡ะธะปะธ ะฒั€ะตะผั ะฝะฐ ั€ะฐะฑะพั‚ัƒ. */
        ms_usleep(20000);
    }
}

แž…แžผแžšแž™แžพแž„แž…แž„แž€แŸ’แžšแž„แŸ” แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžขแžถแž…แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž›แžพแž€แžปแŸ†แž–แŸ’แž™แžผแž‘แŸแžšแž–แžธแžšแŸ” แžฌแž˜แžฝแž™แžŠแžผแž…แžŠแŸ‚แž›แžแŸ’แž‰แžปแŸ†แž“แžนแž„แž’แŸ’แžœแžพแžฅแžกแžผแžœแž“แŸแŸ‡แŸ” แž™แžพแž„แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžš TShark แž‡แžถแž˜แžฝแž™แž“แžนแž„แžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹แžŠแžผแž…แžแžถแž„แž€แŸ’แžšแŸ„แž˜:

$ sudo tshark -i lo -f "udp dst port 7010" -P -V -O RTP -o rtp.heuristic_rtp:TRUE -x

แž”แŸ’แžšแžŸแžทแž“แž”แžพแžœแžถแž›แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž“แŸ…แž€แŸ’แž“แžปแž„แž€แžปแž„แžŸแžผแž›แž”แž„แŸ’แž แžถแž‰แžแŸ‚แžŸแžถแžšแžขแŸ†แž–แžธแž€แžถแžšแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž“แŸƒแž€แžถแžšแž…แžถแž”แŸ‹แž™แž€ แž“แŸ„แŸ‡แž“แŸแŸ‡แž‚แžบแž‡แžถแžŸแž‰แŸ’แž‰แžถแž›แŸ’แžข - แžœแžถแž˜แžถแž“แž“แŸแž™แžแžถแž…แŸ’แžšแž€แžšแž”แžŸแŸ‹แž™แžพแž„แž‘แŸ†แž“แž„แž‡แžถแž˜แžทแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž€แžถแž“แŸ‹แž€แžถแž”แŸ‹แžŠแŸ„แž™แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž•แŸ’แžŸแŸแž„แž‘แŸ€แžแž‘แŸแŸ” แž“แŸ…แž€แŸ’แž“แžปแž„แžŸแŸ’แžแžถแž“แžธแž™แž˜แžฝแž™แž•แŸ’แžŸแŸแž„แž‘แŸ€แž แž™แžพแž„แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž˜แžฝแž™แžŠแŸ‚แž›แž“แžนแž„แž€แŸ’แž›แŸ‚แž„แž’แŸ’แžœแžพ "แž–แžธแž…แž˜แŸ’แž„แžถแž™" intercom แžŠแŸ„แž™แž”แž‰แŸ’แž‡แžถแž€แŸ‹แž›แŸแžแž…แŸ’แžšแž€แž“แŸแŸ‡แŸ–

$ ./mstest8 --port 9010 --lport 7010

แžŠแžผแž…แžŠแŸ‚แž›แžขแžถแž…แž˜แžพแž›แžƒแžพแž‰แž–แžธแžขแžแŸ’แžแž”แž‘แž€แž˜แŸ’แž˜แžœแžทแž’แžธ แžขแžถแžŸแž™แžŠแŸ’แž‹แžถแž“ IP แž›แŸ†แž“แžถแŸ†แžŠแžพแž˜แž‚แžบ 127.0.0.1 (local loopback)แŸ”

แž“แŸ…แž€แŸ’แž“แžปแž„แžŸแŸ’แžแžถแž“แžธแž™แž˜แžฝแž™แž•แŸ’แžŸแŸแž„แž‘แŸ€แž แž™แžพแž„แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‘แžธแž–แžธแžšแž“แŸƒแž€แž˜แŸ’แž˜แžœแžทแž’แžธ แžŠแŸ‚แž›แž€แŸ’แž›แŸ‚แž„แž’แŸ’แžœแžพแžงแž”แž€แžšแžŽแŸแž˜แžผแž›แžŠแŸ’แž‹แžถแž“แŸ” แž™แžพแž„แž”แŸ’แžšแžพแžขแŸ†แžŽแŸ‡แžขแŸ†แžŽแžถแž„แž”แž“แŸ’แžแŸ‚แž˜แžŠแŸ‚แž›แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž—แŸ’แž›แžพแž„แžแŸแžŸแŸ’แžแžŠแŸ‚แž›แž—แŸ’แž‡แžถแž”แŸ‹แž˜แž€แž‡แžถแž˜แžฝแž™แžŠแŸ†แžŽแžพแžšแž€แžถแžšแŸ–

$ ./mstest8  --port 7010 --lport 9010 --gen 440

แž“แŸ…แž–แŸแž›แž“แŸแŸ‡ แž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“แžŠแŸ‚แž›แž”แžถแž“แž”แž‰แŸ’แž‡แžผแž“แž‘แŸ…แž€แžถแž“แŸ‹แžงแž”แž€แžšแžŽแŸ "แž–แžธแž…แž˜แŸ’แž„แžถแž™" แž‚แžฝแžšแžแŸ‚แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž”แž‰แŸ’แž…แŸแž‰แž–แž“แŸ’แž›แžบแž“แŸ…แž€แŸ’แž“แžปแž„แž€แžปแž„แžŸแžผแž›แž‡แžถแž˜แžฝแž™ TShark แž แžพแž™แžŸแž˜แŸ’แž›แŸแž„แž”แž“แŸ’แžแž“แžนแž„แžแŸ’แžšแžผแžœแž”แžถแž“แžฎแž–แžธแžงแž”แž€แžšแžŽแŸแž”แŸ†แž–แž„แžŸแž˜แŸ’แž›แŸแž„แž€แžปแŸ†แž–แŸ’แž™แžผแž‘แŸแžšแŸ”

แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แžœแžธแŸ—แž”แžถแž“แž€แžพแžแžกแžพแž„แžŠแžผแž…แžŠแŸ‚แž›แž”แžถแž“แžŸแžšแžŸแŸแžš แž“แŸ„แŸ‡แž™แžพแž„แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž…แŸ’แž”แžถแž”แŸ‹แž…แž˜แŸ’แž›แž„แž‘แžธแž–แžธแžšแž“แŸƒแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžกแžพแž„แžœแžทแž‰ แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžŠแŸ„แž™แž‚แŸ’แž˜แžถแž“แž‚แž“แŸ’แž›แžนแŸ‡ แž“แžทแž„แžขแžถแž‚แžปแž™แž˜แŸ‰แž„แŸ‹ โ€œโ€”gen 440โ€ แŸ” แžฅแžกแžผแžœแž“แŸแŸ‡แžขแŸ’แž“แž€แž“แžนแž„แžŠแžพแžšแžแžฝแž‡แžถแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž—แŸ’แž›แžพแž„แŸ” แž”แž“แŸ’แž‘แžถแž”แŸ‹แž–แžธแž“แŸแŸ‡ แžขแŸ’แž“แž€แžขแžถแž…แž”แž„แŸ’แž€แžพแžแžŸแŸ†แžกแŸแž„แžšแŸ†แžแžถแž“แž‘แŸ…แž€แŸ’แž“แžปแž„แž˜แžธแž€แŸ’แžšแžผแž แŸ’แžœแžผแž“ แžขแŸ’แž“แž€แž‚แžฝแžšแžแŸ‚แžฎแžŸแŸ†แžกแŸแž„แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž‚แŸ’แž“แžถแž“แŸ…แž€แŸ’แž“แžปแž„แžขแžผแž”แŸ‰แžถแž›แŸแžš แžฌแž€แžถแžŸแŸ” แž€แžถแžšโ€‹แžšแŸ†แž‡แžพแž”แžšแŸ†แž‡แžฝแž›โ€‹แžŠแŸ„แž™โ€‹แžŸแŸ†แžกแŸแž„โ€‹แžŠแŸ„แž™โ€‹แžแŸ’แž›แžฝแž“แžฏแž„โ€‹แžขแžถแž…โ€‹แž“แžนแž„โ€‹แž€แžพแžโ€‹แžกแžพแž„โ€‹แž•แž„โ€‹แžŠแŸ‚แžš แžŠแŸ„แž™โ€‹แž”แž“แŸ’แžแž™โ€‹แž€แž˜แŸ’แžšแžทแžโ€‹แžŸแŸ†แžกแŸแž„โ€‹แžขแžผแž”แŸ‰แžถแž›แŸแžš แž แžพแž™โ€‹แžฅแž‘แŸ’แž’แžทแž–แž›โ€‹แž“แžนแž„โ€‹แž”แžถแžแŸ‹แŸ”

แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แž“แž€แžŠแŸ†แžŽแžพแžšแž€แžถแžšแžœแžถแž“แŸ…แž›แžพแž€แžปแŸ†แž–แŸ’แž™แžผแž‘แŸแžšแž–แžธแžš แž แžพแž™แž˜แžทแž“แž…แŸ’แžšแžกแŸ†แžขแŸ†แž–แžธแžขแžถแžŸแž™แžŠแŸ’แž‹แžถแž“ IP แž“แŸ„แŸ‡แž›แž‘แŸ’แž’แž•แž›แžŠแžผแž…แž‚แŸ’แž“แžถแž€แŸ†แž–แžปแž„แžšแž„แŸ‹แž…แžถแŸ†แžขแŸ’แž“แž€ - แž€แžถแžšแž‘แŸ†แž“แžถแž€แŸ‹แž‘แŸ†แž“แž„แžแžถแž˜แžŸแŸ†แžกแŸแž„แžŒแžธแž‡แžธแžแž›แž–แžธแžšแž•แŸ’แž›แžผแžœแŸ”

แž“แŸ…แž€แŸ’แž“แžปแž„แžขแžแŸ’แžแž”แž‘แž”แž“แŸ’แž‘แžถแž”แŸ‹ แž™แžพแž„แž“แžนแž„แžšแŸ€แž“แž–แžธแžšแž”แŸ€แž”แžŸแžšแžŸแŸแžšแžแž˜แŸ’แžšแž„แž•แŸ’แž‘แžถแž›แŸ‹แžแŸ’แž›แžฝแž“แžšแž”แžŸแŸ‹แž™แžพแž„ - แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‡แŸ†แž“แžฝแž™ แžŠแŸ„แž™แžŸแžถแžšแž‡แŸ†แž“แžถแž‰แž“แŸแŸ‡ แžขแŸ’แž“แž€แž“แžนแž„แžขแžถแž…แž”แŸ’แžšแžพ media streamer แž˜แžทแž“แžแŸ’แžšแžนแž˜แžแŸ‚แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžขแžผแžŒแžธแž™แŸ‰แžผ แž“แžทแž„แžœแžธแžŠแŸแžขแžผแž”แŸ‰แžปแžŽแŸ’แžŽแŸ„แŸ‡แž‘แŸ แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžแŸ‚แž˜แž‘แžถแŸ†แž„แž“แŸ…แž€แŸ’แž“แžปแž„แžแŸ†แž”แž“แŸ‹แž‡แžถแž€แŸ‹แž›แžถแž€แŸ‹แž˜แžฝแž™แž…แŸ†แž“แžฝแž“แž•แŸ’แžŸแŸแž„แž‘แŸ€แžแž•แž„แžŠแŸ‚แžšแŸ”

แž”แŸ’แžšแž—แž–: www.habr.com

แž‘แžทแž‰แž€แžถแžšแž”แž„แŸ’แž แŸ„แŸ‡แžŠแŸ‚แž›แžขแžถแž…แž‘แžปแž€แž…แžทแžแŸ’แžแž”แžถแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แŸแž แž‘แŸ†แž–แŸแžšแžŠแŸ‚แž›แž˜แžถแž“แž€แžถแžšแž€แžถแžšแž–แžถแžš DDoS, แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ VPS VDS ๐Ÿ”ฅ แž‘แžทแž‰แžŸแŸแžœแžถแž”แž„แŸ’แž แŸ„แŸ‡แž‚แŸแž แž‘แŸ†แž–แŸแžšแžŠแŸ‚แž›แžขแžถแž…แž‘แžปแž€แž…แžทแžแŸ’แžแž”แžถแž“แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž€แžถแžšแž–แžถแžš DDoS แž“แžทแž„แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ VPS VDS | ProHoster