เจฒเฉเจ เจธเจฎเฉฑเจเจฐเฉ เจฎเฉเจฐเฉ เจคเฉเจ เจฒเจ เจเจ เจนเฉ .
เจกเฉเจชเจฒเฉเจเจธ เจเฉฐเจเจฐเจเจพเจฎ

เจชเจฟเจเจฒเฉ เจตเจฟเฉฑเจ เจเฉฑเจ เจกเฉเจชเจฒเฉเจเจธ เจเฉฐเจเจฐเจเจพเจฎ เจฆเจพ เจเจฒเจพเจจ เจเฉเจคเจพ เจเจฟเจ เจธเฉ, เจ เจคเฉ เจเจธ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจเจธเจจเฉเฉฐ เจฌเจฃเจพเจตเจพเจเจเฉเฅค
เจเจน เจเจฟเฉฑเจคเจฐ เจธเจฟเจฐเจฒเฉเจ เจเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจฆเจฟเจเจพเจเจ เจเจฟเจ เจนเฉเฅค เจนเฉเจ เจฒเฉ เจซเจฟเจฒเจเจฐ เจเฉเจจ เจเฉเจฐเจพเจเจธเจฎเจฟเจ เจฎเจพเจฐเจ เจฌเจฃเจพเจเจเจฆเฉ เจนเฉ, เจเฉ เจเจฟ เจธเจพเจเจเจก เจเจพเจฐเจก เจจเจพเจฒ เจธเจผเฉเจฐเฉ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจเจน เจฎเจพเจเจเฉเจฐเฉเจซเฉเจจ เจคเฉเจ เจธเจฟเจเจจเจฒ เจจเจฎเฉเจจเฉ เจเจเจเจชเฉเฉฑเจ เจเจฐเจฆเจพ เจนเฉเฅค เจกเจฟเจซเฉเจฒเจ เจฐเฉเจช เจตเจฟเฉฑเจ, เจเจน เจชเฉเจฐเจคเฉ เจธเจเจฟเฉฐเจ 8000 เจจเจฎเฉเจจเจฟเจเจ เจฆเฉ เจฆเจฐ เจจเจพเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจฎเฉเจกเฉเจ เจธเจเฉเจฐเฉเจฎเจฐ เจฆเฉ เจเจกเฉเจ เจซเจฟเจฒเจเจฐเจพเจ เจฆเฉเจเจฐเจพ เจตเจฐเจคเจฟเจ เจเจพเจฃ เจตเจพเจฒเจพ เจกเฉเจเจพ เจฐเฉเจเจผเฉเจฒเจฟเจเจธเจผเจจ 16 เจฌเจฟเฉฑเจ เจนเฉ (เจเจน เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจจเจนเฉเจ เจนเฉ; เจซเจฟเจฒเจเจฐ เจเฉ เจเฉฑเจ เจฐเฉเจเจผเฉเจฒเจฟเจเจธเจผเจจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเจจ เจเฉเจเจฐ เจฒเฉเฉ เจนเฉเจตเฉ เจคเจพเจ เจฒเจฟเจเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ)เฅค เจกเฉเจเจพ เจจเฉเฉฐ 160 เจจเจฎเฉเจจเจฟเจเจ เจฆเฉ เจฌเจฒเจพเจเจพเจ เจตเจฟเฉฑเจ เจธเจฎเฉเจนเจฌเฉฑเจง เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจเจฟเจธ เจจเจพเจฒ เจนเจฐเฉเจ เจฌเจฒเจพเจ 320 เจฌเจพเจเจ เจฆเจพ เจเจเจพเจฐ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉเฅค เจ เฉฑเจเฉ, เจ เจธเฉเจ เจกเฉเจเจพ เจจเฉเฉฐ เจเจจเจฐเฉเจเจฐ เจเจจเจชเฉเจ เจตเจฟเฉฑเจ เจซเฉเจก เจเจฐเจฆเฉ เจนเจพเจ, เจเฉ เจเจฟ เจ เจฏเฉเจ เจนเฉเจฃ 'เจคเฉ เจกเฉเจเจพ เจฒเจ "เจชเจพเจฐเจฆเจฐเจธเจผเฉ" เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจฎเฉเจ เจเจธเจจเฉเฉฐ เจเจธ เจฒเจ เจเฉเฉเจฟเจ เจนเฉ เจคเจพเจ เจเฉ เจเฉเจเจฐ เจคเฉเจธเฉเจ เจกเฉเจฌเฉฑเจเจฟเฉฐเจ เจเจฐเจฆเฉ เจธเจฎเฉเจ เจฎเจพเจเจเฉเจฐเฉเจซเฉเจจ เจตเจฟเฉฑเจ เจฌเฉเจฒเจฃ เจคเฉเจ เจฅเฉฑเจ เจเจพเจเจฆเฉ เจนเฉ, เจคเจพเจ เจคเฉเจธเฉเจ เจฎเจพเจฐเจ เจฐเจพเจนเฉเจ เจเฉฑเจ เจเฉเจจ "เจธเจผเฉเจ" เจเจฐเจจ เจฒเจ เจเจจเจฐเฉเจเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค
เจเจจเจฐเฉเจเจฐ เจคเฉเจ เจฌเจพเจ เจฆ, เจธเจฟเจเจจเจฒ เจเจจเจเฉเจกเจฐ เจจเฉเฉฐ เจเจพเจเจฆเจพ เจนเฉ, เจเฉ ยต-law (G.711 เจธเจเฉเจเจกเจฐเจก) เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ เจธเจพเจกเฉ 16-เจฌเจฟเฉฑเจ เจธเฉเจเจชเจฒเจพเจ เจจเฉเฉฐ 8-เจฌเจฟเฉฑเจ เจตเจพเจฒเฉ เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฆเจพ เจนเฉเฅค เจเจจเจเฉเจกเจฐ เจฆเฉ เจเจเจเจชเฉเฉฑเจ 'เจคเฉ, เจธเจพเจกเฉ เจเฉเจฒ เจนเฉเจฃ เจ เฉฑเจงเฉ เจเจเจพเจฐ เจฆเจพ เจกเฉเจเจพ เจฌเจฒเจพเจ เจนเฉเฅค เจเจฎ เจคเฉเจฐ 'เจคเฉ, เจ เจธเฉเจ เจฌเจฟเจจเจพเจ เจเฉฐเจชเจฐเฉเจธเจผเจจ เจฆเฉ เจกเฉเจเจพ เจเฉเจฐเจพเจเจธเจฎเจฟเจ เจเจฐ เจธเจเจฆเฉ เจนเจพเจ เจเฉเจเจฐ เจธเจพเจจเฉเฉฐ เจฌเฉเจเจกเจตเจฟเจกเจฅ เจจเฉเฉฐ เจฌเจเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเฉฑเจ เจเจจเจเฉเจกเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉฑเจฅเฉ เจฒเจพเจญเจฆเจพเจเจ เจนเฉ, เจเจฟเจเจเจเจฟ เจตเจพเจเจฐเจธเจผเจพเจฐเจ เจธเจฟเจฐเจซเจผ เจเฉฑเจ RTP เจธเจเฉเจฐเฉเจฎ เจคเฉเจ เจเจกเฉเจ เจเจฒเจพ เจธเจเจฆเจพ เจนเฉ เจเฉเจเจฐ เจเจธเจจเฉเฉฐ ยต-law เจเจพเจ ฮฑ-law เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจธเฉฐเจเฉเจเจฟเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค
เจเจจเจเฉเจกเจฐ เจคเฉเจ เจฌเจพเจ เจฆ, เจนเจฒเจเฉ เจกเฉเจเจพ เจฌเจฒเจพเจ rtpsend เจซเจฟเจฒเจเจฐ เจจเฉเฉฐ เจญเฉเจเฉ เจเจพเจเจฆเฉ เจนเจจ, เจเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเฉฑเจ RTP เจชเฉเจเฉเจ เจตเจฟเฉฑเจ เจชเจพ เจฆเฉเจตเฉเจเจพ, เจฒเฉเฉเฉเจเจฆเฉ เจซเจฒเฉเจ เจธเฉเฉฑเจ เจเจฐเฉเจเจพ, เจ เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเฉฑเจ UDP เจชเฉเจเฉเจ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ เจจเฉเฉฑเจเจตเจฐเจ เจเฉฑเจคเฉ เจชเฉเจฐเจธเจพเจฐเจฃ เจฒเจ เจฎเฉเจกเฉเจ เจธเจเฉเจฐเฉเจฎเจฐ เจจเฉเฉฐ เจฆเฉเจตเฉเจเจพเฅค
เจเฉฑเจชเจฐเจฒเฉ เจซเจฟเจฒเจเจฐ เจเฉเจจ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจตเจพเจฒเจพ เจฎเจพเจฐเจ เจฌเจฃเจพเจเจเจฆเฉ เจนเฉเฅค เจจเฉเฉฑเจเจตเจฐเจ เจคเฉเจ เจฎเฉเจกเฉเจ เจธเจเฉเจฐเฉเจฎเจฐ เจฆเฉเจเจฐเจพ เจชเฉเจฐเจพเจชเจค เจเฉเจคเฉ เจเจ RTP เจชเฉเจเฉเจ rtprecv เจซเจฟเจฒเจเจฐ เจจเฉเฉฐ เจซเฉเจก เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจ, เจเจฟเจธ เจฆเฉ เจเจเจเจชเฉเฉฑเจ 'เจคเฉ เจเจน เจกเฉเจเจพ เจฌเจฒเจพเจเจพเจ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ เจฆเจฟเจเจพเจ เจฆเจฟเฉฐเจฆเฉ เจนเจจ, เจนเจฐเฉเจ เจเฉฑเจ เจชเฉเจฐเจพเจชเจค เจเฉเจคเฉ เจชเฉเจเฉเจ เจจเจพเจฒ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจเฉฑเจ เจฌเจฒเจพเจ เจตเจฟเฉฑเจ เจธเจฟเจฐเจซเจผ เจชเฉเจฒเฉเจก เจกเฉเจเจพ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจเฉ เจเจฟ เจชเจฟเจเจฒเฉ เจฒเฉเจ เจฆเฉ เจเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจนเจฐเฉ เจฐเฉฐเจ เจตเจฟเฉฑเจ เจฆเจฟเจเจพเจเจ เจเจฟเจ เจธเฉเฅค
เจซเจฟเจฐ เจฌเจฒเจพเจเจพเจ เจจเฉเฉฐ เจกเฉเจเฉเจกเจฐ เจซเจฟเจฒเจเจฐ เจตเจฟเฉฑเจ เจซเฉเจก เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจเฉ เจเจนเจจเจพเจ เจตเจฟเฉฑเจ เจฎเฉเจเฉเจฆ เจธเจฟเฉฐเจเจฒ-เจฌเจพเจเจ เจธเฉเจเจชเจฒเจพเจ เจจเฉเฉฐ เจฒเฉเจจเฉเจ เจฐ 16-เจฌเจฟเฉฑเจ เจกเฉเจเจพ เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฆเจพ เจนเฉเฅค เจเจนเจจเจพเจ เจจเฉเฉฐ เจซเจฟเจฐ เจฎเฉเจกเฉเจ เจธเจเฉเจฐเฉเจฎเจฐ เจฆเฉ เจซเจฟเจฒเจเจฐเจพเจ เจฆเฉเจเจฐเจพ เจชเฉเจฐเฉเจธเฉเจธ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจธเจพเจกเฉ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ, เจ เจธเฉเจ เจเจนเจจเจพเจ เจจเฉเฉฐ เจคเฉเจนเจพเจกเฉ เจนเฉเฉฑเจกเจธเฉเฉฑเจ เจฆเฉ เจธเจชเฉเจเจฐเจพเจ 'เจคเฉ เจชเจฒเฉเจฌเฉเจ เจฒเจ เจธเจพเจเจเจก เจเจพเจฐเจก เจตเจฟเฉฑเจ เจซเฉเจก เจเจฐเจฆเฉ เจนเจพเจเฅค
เจนเฉเจฃ เจเจ เจธเจพเจซเจเจตเฉเจ เจฐ เจฒเจพเจเฉเจเจฐเจจ เจตเฉฑเจฒ เจตเจงเฉเจเฅค เจ เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, เจ เจธเฉเจ เจชเจนเจฟเจฒเจพเจ เจตเฉฑเจ เจเฉเจคเฉเจเจ เจฐเจฟเจธเฉเจตเจฐ เจ เจคเฉ เจเฉเจฐเจพเจเจธเจฎเฉเจเจฐ เจซเจพเจเจฒเจพเจ เจจเฉเฉฐ เจเฉเฉเจพเจเจเฉเฅค เจชเจนเจฟเจฒเจพเจ, เจ เจธเฉเจ เจซเจฟเจเจธเจก เจชเฉเจฐเจ เจ เจคเฉ เจเจกเจฐเฉเฉฑเจธ เจธเฉเจเจฟเฉฐเจเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจธเฉ, เจชเจฐ เจนเฉเจฃ เจธเจพเจจเฉเฉฐ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจจเฉเฉฐ เจเจนเจจเจพเจ เจธเฉเจเจฟเฉฐเจเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉเจฃ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉ เจเฉ เจ เจธเฉเจ เจธเจเจพเจฐเจเจ เฉฑเจช 'เจคเฉ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจฆเฉ เจนเจพเจเฅค เจ เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, เจ เจธเฉเจ เจเจฎเจพเจเจก เจฒเจพเจเจจ เจเจฐเจเฉเจฎเฉเจเจเจพเจ เจจเฉเฉฐ เจชเฉเจฐเฉเจธเฉเจธ เจเจฐเจจ เจฒเจ เจเจพเจฐเจเจธเจผเฉเจฒเจคเจพ เจเฉเฉเจพเจเจเฉเฅค เจเจธ เจคเฉเจ เจฌเจพเจ เจฆ, เจ เจธเฉเจ เจเจธ เจเฉฐเจเจฐเจเจพเจฎ เจกเจฟเจตเจพเจเจธ เจฆเจพ IP เจเจกเจฐเฉเฉฑเจธ เจ เจคเฉ เจชเฉเจฐเจ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉเจตเจพเจเจเฉ เจเจฟเจธ เจจเจพเจฒ เจ เจธเฉเจ เจธเฉฐเจเจพเจฐ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเจพเจเฅค
เจชเจนเจฟเจฒเจพเจ, เจเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจตเจฟเฉฑเจ เจเฉฑเจ เจขเจพเจเจเจพ เจเฉเฉเฉเจ เจเฉ เจเจธเจฆเฉเจเจ เจธเฉเจเจฟเฉฐเจเจพเจ เจจเฉเฉฐ เจธเจเฉเจฐ เจเจฐเฉเจเจพ:
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]);
}
}
}เจชเจพเจฐเจธ เจเจฐเจจ เจคเฉเจ เจฌเจพเจ เจฆ, เจเจฎเจพเจเจก เจฒเจพเจเจจ เจเจฐเจเฉเจฎเฉเจเจเจพเจ เจจเฉเฉฐ เจตเจพเจฐเจธ เจธเจเฉเจฐเจเจเจฐ เจฆเฉ เจเฉเจคเจฐเจพเจ เจตเจฟเฉฑเจ เจฐเฉฑเจเจฟเจ เจเจพเจตเฉเจเจพเฅค เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฆเจพ เจฎเฉเฉฑเจ เจซเฉฐเจเจธเจผเจจ เจเฉเจฐเจพเจเจธเจฎเจฟเจ เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเจฐเฉเจเจพ เจ เจคเฉ เจซเจฟเจฒเจเจฐเจพเจ เจคเฉเจ เจฎเจพเจฐเจ เจชเฉเจฐเจพเจชเจค เจเจฐเฉเจเจพเฅค เจเจฟเฉฑเจเจฐ เจจเฉเฉฐ เจเฉเฉเจจ เจคเฉเจ เจฌเจพเจ เจฆ, เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจจเฉเฉฐ เจเฉฑเจ เจ เจจเฉฐเจค เจฒเฉเจช เจตเจฟเฉฑเจ เจเฉเจฐเจพเจเจธเจซเจฐ เจเฉเจคเจพ เจเจพเจตเฉเจเจพ, เจเฉเจเจฐ เจเจจเจฐเฉเจเจฐ เจซเฉเจฐเฉเจเฉเจเจเจธเฉ เจจเฉเฉฐ เจเฉฑเจ เจเฉเจฐ-เจเจผเฉเจฐเฉ เจฎเฉเฉฑเจฒ 'เจคเฉ เจธเฉเฉฑเจ เจเฉเจคเจพ เจเจฟเจ เจธเฉ, เจคเจพเจ เจเฉเจธเจ เจเจจเจฐเฉเจเจฐ เจจเฉเฉฐ เจฎเฉเฉ เจเจพเจฒเฉ เจเจฐเฉเจเจพ เจคเจพเจ เจเฉ เจเจน เจฒเจเจพเจคเจพเจฐ เจเฉฑเจฒเฉเฅค
เจเจน เจฐเฉเจธเจเจพเจฐเจ เจเจจเจฐเฉเจเจฐ เจฒเจ เจเจธเจฆเฉ เจกเจฟเจเจผเจพเจเจจ เจฆเฉ เจเจพเจฐเจจ เจเจผเจฐเฉเจฐเฉ เจนเฉเจฃเจเฉ; เจเจฟเจธเฉ เจเจพเจฐเจจ เจเจฐเจเฉ, เจเจน 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เจเฉเจเจฐ เจเฉฐเจธเฉเจฒ เจฆเจพ เจธเจเจพเจฐเจเจ เฉฑเจช เจซเฉเจฒเจก เจธเจฟเจฐเจซเจผ เจเฉเจชเจเจฐ เจฆเฉ เจธเจผเฉเจฐเฉเจเจค เจฌเจพเจฐเฉ เจเฉฑเจ เจธเฉเจจเฉเจนเจพ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจเจฐเจฆเจพ เจนเฉ, เจคเจพเจ เจเจน เจเฉฑเจ เจเฉฐเจเจพ เจธเฉฐเจเฉเจค เจนเฉ - เจเจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉ เจเจฟ เจธเจพเจกเจพ เจชเฉเจฐเจ เจธเฉฐเจญเจพเจตเจค เจคเฉเจฐ 'เจคเฉ เจฆเฉเจเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจฆเฉเจเจฐเจพ เจเจพเจฒเฉ เจนเฉเฅค เจเจฟเจธเฉ เจนเฉเจฐ เจเจฐเจฎเฉเจจเจฒ เจตเจฟเฉฑเจ, เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเจพ เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ เจฒเจพเจเจ เจเจฐเฉ เจเฉ เจเจธ เจชเฉเจฐเจ เจจเฉฐเจฌเจฐ เจจเฉเฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจเฉ เจเฉฑเจ "เจฐเจฟเจฎเฉเจ" เจเฉฐเจเจฐเจเจพเจฎ เจกเจฟเจตเจพเจเจธ เจฆเฉ เจจเจเจฒ เจเจฐเฉเจเจพ:
$ ./mstest8 --port 9010 --lport 7010เจเจฟเจตเฉเจ เจเจฟ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจเฉเจเจธเจ เจคเฉเจ เจฆเฉเจเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ, เจตเจฐเจคเจฟเจ เจเจพเจฃ เจตเจพเจฒเจพ เจกเจฟเจซเจพเจฒเจ IP เจชเจคเจพ 127.0.0.1 (เจธเจฅเจพเจจเจ เจฒเฉเจชเจฌเฉเจ) เจนเฉเฅค
เจเฉฑเจ เจนเฉเจฐ เจเจฐเจฎเฉเจจเจฒ เจตเจฟเฉฑเจ, เจ เจธเฉเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเจพ เจฆเฉเจเจพ เจเจฆเจพเจนเจฐเจฃ เจฒเจพเจเจ เจเจฐเจฆเฉ เจนเจพเจ, เจเฉ เจเฉฑเจ เจธเจฅเจพเจจเจ เจกเจฟเจตเจพเจเจธ เจฆเฉ เจจเจเจฒ เจเจฐเจฆเจพ เจนเฉเฅค เจ เจธเฉเจ เจเฉฑเจ เจตเจพเจงเฉ เจเจฐเจเฉเจฎเฉเจเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ เจเฉ เจฌเจฟเจฒเจ-เจเจจ เจเฉเจธเจ เจเจจเจฐเฉเจเจฐ เจจเฉเฉฐ เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉ:
$ ./mstest8 --port 7010 --lport 9010 --gen 440เจเจธ เจฌเจฟเฉฐเจฆเฉ 'เจคเฉ, "เจฐเจฟเจฎเฉเจ" เจกเจฟเจตเจพเจเจธ เจตเฉฑเจฒ เจญเฉเจเฉ เจเจ เจชเฉเจเฉเจ TShark เจเฉฐเจธเฉเจฒ เจตเจฟเฉฑเจ เจซเจฒเฉเจธเจผ เจนเฉเจฃเฉ เจเจพเจนเฉเจฆเฉ เจนเจจ, เจ เจคเฉ เจเฉฐเจชเจฟเจเจเจฐ เจธเจชเฉเจเจฐ เจคเฉเจ เจเฉฑเจ เจจเจฟเจฐเฉฐเจคเจฐ เจเฉเจจ เจธเจฟเจเจจเจฒ เจธเฉเจฃเจพเจ เจฆเฉเจตเฉเจเจพเฅค
เจเฉเจเจฐ เจธเจญ เจเฉเจ เจฏเฉเจเจจเจพ เจ เจจเฉเจธเจพเจฐ เจนเฉเจเจ, เจคเจพเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเฉ เจฆเฉเจเฉ เจเฉฐเจธเจเฉเจเจธ เจจเฉเฉฐ เจฎเฉเฉ เจเจพเจฒเฉ เจเจฐเฉ, เจชเจฐ "--gen 440" เจเฉเฉฐเจเฉ เจ เจคเฉ เจเจฐเจเฉเจฎเฉเจเจ เจคเฉเจ เจฌเจฟเจจเจพเจเฅค เจนเฉเจฃ เจคเฉเจธเฉเจ เจเจจเจฐเฉเจเจฐ เจตเจเฉเจ เจเฉฐเจฎ เจเจฐเฉเจเฉเฅค เจเจธ เจคเฉเจ เจฌเจพเจ เจฆ, เจคเฉเจธเฉเจ เจฎเจพเจเจเฉเจฐเฉเจซเจผเฉเจจ เจตเจฟเฉฑเจ เจเฉเจ เจธเจผเฉเจฐ เจเจฐ เจธเจเจฆเฉ เจนเฉ; เจคเฉเจนเจพเจจเฉเฉฐ เจธเจชเฉเจเจฐ เจเจพเจ เจนเฉเฉฑเจกเจซเจผเฉเจจ เจตเจฟเฉฑเจ เจเฉฑเจ เจ เจจเฉเจธเจพเจฐเฉ เจเจตเจพเจเจผ เจธเฉเจฃเจจเฉ เจเจพเจนเฉเจฆเฉ เจนเฉเฅค เจคเฉเจธเฉเจ เจงเฉเจจเฉ เจธเจตเฉ-เจเจคเฉเจเจจเจพ เจฆเจพ เจ เจจเฉเจญเจต เจตเฉ เจเจฐ เจธเจเจฆเฉ เจนเฉ; เจธเจชเฉเจเจฐ เจฆเฉ เจเจตเจพเจเจผ เจจเฉเฉฐ เจเฉฑเจ เจเจฐเจจ เจจเจพเจฒ เจชเฉเจฐเจญเจพเจต เจเจคเจฎ เจนเฉ เจเจพเจตเฉเจเจพเฅค
เจเฉเจเจฐ เจคเฉเจธเฉเจ เจเจธเจจเฉเฉฐ เจฆเฉ เจเฉฐเจชเจฟเจเจเจฐเจพเจ 'เจคเฉ เจเจฒเจพเจเจ เจนเฉ เจ เจคเฉ IP เจชเจคเจฟเจเจ เจจเฉเฉฐ เจเจฐเจพเจฌ เจจเจนเฉเจ เจเฉเจคเจพ เจนเฉ, เจคเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจเจนเฉ เจจเจคเฉเจเจพ เจฎเจฟเจฒเฉเจเจพ - เจฆเฉ-เจชเฉฑเจเฉ, เจกเจฟเจเฉเจเจฒ-เจเฉเจฃเจตเฉฑเจคเจพ เจตเจพเจฒเฉ เจตเฉเจเจธ เจธเฉฐเจเจพเจฐเฅค
เจ เจเจฒเฉ เจฒเฉเจ เจตเจฟเฉฑเจ, เจ เจธเฉเจ เจธเจฟเฉฑเจเจพเจเจเฉ เจเจฟ เจเจชเจฃเฉ เจซเจฟเจฒเจเจฐ - เจชเจฒเฉฑเจเจเจจ เจเจฟเจตเฉเจ เจฒเจฟเจเจฃเฉ เจนเจจเฅค เจเจน เจนเฉเจจเจฐ เจคเฉเจนเจพเจจเฉเฉฐ เจฎเฉเจกเฉเจ เจธเจเฉเจฐเฉเจฎเจฐ เจจเฉเฉฐ เจธเจฟเจฐเจซเจผ เจเจกเฉเจ เจ เจคเฉ เจตเฉเจกเฉเจ เจฒเจ เจนเฉ เจจเจนเฉเจ, เจธเจเฉเจ เจเจฟเจธเฉ เจนเฉเจฐ เจเจพเจธ เจเฉเจคเจฐ เจตเจฟเฉฑเจ เจตเฉ เจตเจฐเจคเจฃ เจฆเฉ เจเจเจฟเจ เจฆเฉเจตเฉเจเจพเฅค
เจธเจฐเฉเจค: www.habr.com
