Mediastreamer2 VoIP เชเชจเซเชœเชฟเชจเชจเซ€ เชถเซ‹เชงเช–เซ‹เชณ. เชญเชพเช— 11

เชฒเซ‡เช–เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เชฎเชพเชฐเชพ เชชเชฐเชฅเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡ เชเซ‡เชจ เชšเซ‡เชจเชฒ.

Mediastreamer2 VoIP เชเชจเซเชœเชฟเชจเชจเซ€ เชถเซ‹เชงเช–เซ‹เชณ. เชญเชพเช— 11

เชกเซ‡เชŸเชพ เชฎเซ‚เชตเชฎเซ‡เชจเซเชŸ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎ

  • เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• dblk_t
  • เชธเช‚เชฆเซ‡เชถ mblk_t
  • เชธเช‚เชฆเซ‡เชถเชพเช“ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เช•เชพเชฐเซเชฏเซ‹ mblk_t
  • เช•เชคเชพเชฐ เช•เชคเชพเชฐ_เชŸเซ€
  • queues queue_t เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพเช‚ เช•เชพเชฐเซเชฏเซ‹
  • เช•เชจเซ‡เช•เซเชŸเชฟเช‚เช— เชซเชฟเชฒเซเชŸเชฐเซเชธ
  • เชกเซ‡เชŸเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช— เช—เซเชฐเชพเชซเชจเซ‹ เชธเชฟเช—เซเชจเชฒ เชชเซ‹เชˆเชจเซเชŸ
  • เชŸเชฟเช•เชฐเชจเซ€ เชชเชกเชฆเชพ เชชเชพเช›เชณเชจเซ€ เชชเซเชฐเชตเซƒเชคเซเชคเชฟเช“
  • เชฌเชซเชฐเชพเช‡เชเชฐ (MSBufferizer)
  • MSBufferizer เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เช•เชพเชฐเซเชฏเซ‹

เช›เซ‡เชฒเซเชฒเชพเชฎเชพเช‚ เชฒเซ‡เช– เช…เชฎเซ‡ เช…เชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชซเชฟเชฒเซเชŸเชฐ เชตเชฟเช•เชธเชพเชตเซเชฏเซเช‚ เช›เซ‡. เช† เชฒเซ‡เช– เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐ เชซเชฟเชฒเซเชŸเชฐเซเชธ เชตเชšเซเชšเซ‡ เชกเซ‡เชŸเชพเชจเซ‡ เช–เชธเซ‡เชกเชตเชพเชจเซ€ เช†เช‚เชคเชฐเชฟเช• เชชเชฆเซเชงเชคเชฟ เชชเชฐ เชงเซเชฏเชพเชจ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เช•เชฐเชถเซ‡. เช† เชคเชฎเชจเซ‡ เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚ เช“เช›เชพ เชชเซเชฐเชฏเชคเซเชจเซ‹ เชธเชพเชฅเซ‡ เช…เชคเซเชฏเชพเชงเซเชจเชฟเช• เชซเชฟเชฒเซเชŸเชฐเซเชธ เชฒเช–เชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเชถเซ‡.

เชกเซ‡เชŸเชพ เชฎเซ‚เชตเชฎเซ‡เชจเซเชŸ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎ

เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฎเซ‚เชตเชฎเซ‡เชจเซเชŸ เชธเซเชŸเซเชฐเช•เซเชšเชฐ เชฆเซเชตเชพเชฐเชพ เชตเชฐเซเชฃเชตเซ‡เชฒ เช•เชคเชพเชฐเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เชคเชพเชฐ_เชŸเซ€. เชœเซ‡เชตเชพ เชธเช‚เชฆเซ‡เชถเชพเช“เชจเซ€ เชธเซเชŸเซเชฐเซ€เช‚เช—เซเชธ mblk_t, เชœเซ‡ เชชเซ‹เชคเซ‡ เชธเชฟเช—เซเชจเชฒ เชกเซ‡เชŸเชพ เชงเชฐเชพเชตเชคเซเช‚ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชซเช•เซเชค เชชเชพเช›เชฒเชพ, เช†เช—เชฒเชพ เชธเช‚เชฆเซ‡เชถ เช…เชจเซ‡ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชจเซ€ เชฒเชฟเช‚เช•เซเชธ เชงเชฐเชพเชตเซ‡ เช›เซ‡. เชตเชงเซเชฎเชพเช‚, เชนเซเช‚ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชญเชพเชฐเชชเซ‚เชฐเซเชตเช• เชœเชฃเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช•เซ‡ เชธเชฎเชพเชจ เชชเซเชฐเช•เชพเชฐเชจเชพ เชธเช‚เชฆเซ‡เชถเชพเชจเซ€ เชฒเชฟเช‚เช• เชฎเชพเชŸเซ‡ เชเช• เช•เซเชทเซ‡เชคเซเชฐ เชชเชฃ เช›เซ‡, เชœเซ‡ เชคเชฎเชจเซ‡ เชธเช‚เชฆเซ‡เชถเชพเช“เชจเซ€ เชเช•เชฒ เชฒเชฟเช‚เช• เช•เชฐเซ‡เชฒเซ€ เชธเซ‚เชšเชฟ เช—เซ‹เช เชตเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เช…เชฎเซ‡ เช†เชตเซ€ เชฏเชพเชฆเซ€ เชฆเซเชตเชพเชฐเชพ เชธเช‚เชฏเซเช•เซเชค เชธเช‚เชฆเซ‡เชถเชพเช“เชจเชพ เชธเชฎเซ‚เชนเชจเซ‡ เชŸเชชเชฒ เช•เชนเซ€เชถเซเช‚. เช†เชฎ, เช•เชคเชพเชฐเชจเซเช‚ เช•เซ‹เชˆเชชเชฃ เชคเชคเซเชต เชเช• เชธเช‚เชฆเซ‡เชถ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ mblk_t, เช…เชจเซ‡ เช•เชฆเชพเชš เชธเช‚เชฆเซ‡เชถ เชŸเชชเชฒเชจเชพ เชตเชกเชพ mblk_t. เชฆเชฐเซ‡เช• เชŸเซเชฏเซเชชเชฒ เชฎเซ‡เชธเซ‡เชœเชจเซ‹ เชชเซ‹เชคเชพเชจเซ‹ เชตเซ‹เชฐเซเชก เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เช…เชฎเซ‡ เชฅเซ‹เชกเซ€ เชตเชพเชฐ เชชเช›เซ€ เชšเชฐเซเชšเชพ เช•เชฐเซ€เชถเซเช‚ เช•เซ‡ เชถเชพ เชฎเชพเชŸเซ‡ เชŸเซเชฏเซเชชเชฒเซเชธเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เช‰เชชเชฐ เชธเซ‚เชšเชตเซเชฏเชพ เชฎเซเชœเชฌ, เชธเช‚เชฆเซ‡เชถ เชชเซ‹เชคเซ‡ เชกเซ‡เชŸเชพเชจเซ‹ เชฌเซเชฒเซ‹เช• เชงเชฐเชพเชตเชคเซ‹ เชจเชฅเซ€; เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡, เชคเซ‡ เชซเช•เซเชค เชฎเซ‡เชฎเชฐเซ€ เชตเชฟเชธเซเชคเชพเชฐ เชฎเชพเชŸเซ‡ เชจเชฟเชฐเซเชฆเซ‡เชถเช• เชงเชฐเชพเชตเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เชฌเซเชฒเซ‹เช• เชธเช‚เช—เซเชฐเชนเชฟเชค เช›เซ‡. เช† เชญเชพเช—เชฎเชพเช‚, เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐเชจเชพ เช•เชพเชฐเซเชฏเชจเซเช‚ เชเช•เช‚เชฆเชฐ เชšเชฟเชคเซเชฐ เช•เชพเชฐเซเชŸเซ‚เชจ โ€œเชฎเซ‹เชจเซเชธเซเชŸเชฐเซเชธ, เช‡เชจเซเช•.โ€เชฎเชพเช‚เชจเชพ เชฆเชฐเชตเชพเชœเชพเชจเชพ เชตเซ‡เชฐเชนเชพเช‰เชธเชจเซ€ เชฏเชพเชฆ เช…เชชเชพเชตเซ‡ เช›เซ‡, เชœเซเชฏเชพเช‚ เชฆเชฐเชตเชพเชœเชพ (เชกเซ‡เชŸเชพเชจเซ€ เชฒเชฟเช‚เช•เซเชธ - เชฐเซ‚เชฎ) เช“เชตเชฐเชนเซ‡เชก เช•เชจเซเชตเซ‡เชฏเชฐเซเชธ เชธเชพเชฅเซ‡ เชชเชพเช—เชฒ เช—เชคเชฟเช เชซเชฐเซ‡ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ เชฐเซ‚เชฎ เชชเซ‹เชคเซ‡ เชœ เช—เชคเชฟเชนเซ€เชจ เชฐเชนเซ‡เชตเซเช‚.

เชนเชตเซ‡, เชจเซ€เชšเซ‡เชฅเซ€ เช‰เชชเชฐ เชธเซเชงเซ€ เชชเชฆเชพเชจเซเช•เซเชฐเชฎ เชธเชพเชฅเซ‡ เช†เช—เชณ เชตเชงเซ€เชจเซ‡, เชšเชพเชฒเซ‹ เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชถเชจ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเชจเซ€ เชธเซ‚เชšเชฟเชฌเชฆเซเชง เชธเช‚เชธเซเชฅเชพเช“เชจเซ‡ เชตเชฟเช—เชคเชตเชพเชฐ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเชˆเช.

เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• dblk_t

เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชฎเชพเช‚ เชนเซ‡เชกเชฐ เช…เชจเซ‡ เชกเซ‡เชŸเชพ เชฌเชซเชฐเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. เชนเซ‡เชกเชฐ เชจเซ€เชšเซ‡เชจเซ€ เชฐเชšเชจเชพ เชฆเซเชตเชพเชฐเชพ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡,

typedef struct datab
{
unsigned char *db_base; // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะฝะฐั‡ะฐะปะพ ะฑัƒั„ะตั€ ะดะฐะฝะฝั‹ั….
unsigned char *db_lim;  // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะบะพะฝะตั† ะฑัƒั„ะตั€ ะดะฐะฝะฝั‹ั….
void (*db_freefn)(void*); // ะคัƒะฝะบั†ะธั ะพัะฒะพะฑะพะถะดะตะฝะธั ะฟะฐะผัั‚ะธ ะฟั€ะธ ัƒะดะฐะปะตะฝะธะธ ะฑะปะพะบะฐ.
int db_ref; // ะกั‡ะตั‚ั‡ะธะบ ััั‹ะปะพะบ.
} dblk_t;

เชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเชพ เชซเซ€เชฒเซเชกเชฎเชพเช‚ เชฌเชซเชฐเชจเซ€ เชถเชฐเซ‚เช†เชค, เชฌเชซเชฐเชจเชพ เช…เช‚เชค เช…เชจเซ‡ เชกเซ‡เชŸเชพ เชฌเชซเชฐเชจเซ‡ เชกเชฟเชฒเซ€เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชซเช‚เช•เซเชถเชจเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. เชนเซ‡เชกเชฐเชฎเชพเช‚ เช›เซ‡เชฒเซเชฒเซเช‚ เช˜เชŸเช• db_ref โ€” เชฐเซ‡เชซเชฐเชจเซเชธ เช•เชพเช‰เชจเซเชŸเชฐ, เชœเซ‹ เชคเซ‡ เชถเซ‚เชจเซเชฏ เชธเซเชงเซ€ เชชเชนเซ‹เช‚เชšเซ‡, เชคเซ‹ เช† เชฌเซเชฒเซ‹เช• เชฎเซ‡เชฎเชฐเซ€เชฎเชพเช‚เชฅเซ€ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพ เชฎเชพเชŸเซ‡ เชธเชฟเช—เซเชจเชฒ เชคเชฐเซ€เช•เซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เชœเซ‹ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• เชซเช‚เช•เซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹ datab_alloc() , เชชเช›เซ€ เชนเซ‡เชกเชฐ เชชเช›เซ€ เชคเชฐเชค เชœ เชกเซ‡เชŸเชพ เชฌเชซเชฐ เชฎเซ‡เชฎเชฐเซ€เชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช…เชจเซเชฏ เชคเชฎเชพเชฎ เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚, เชฌเชซเชฐ เช•เซเชฏเชพเช‚เช• เช…เชฒเช—เชฅเซ€ เชธเซเชฅเชฟเชค เชฅเชˆ เชถเช•เซ‡ เช›เซ‡. เชกเซ‡เชŸเชพ เชฌเชซเชฐเชฎเชพเช‚ เชธเชฟเช—เซเชจเชฒ เชธเซ‡เชฎเซเชชเชฒ เช…เชฅเชตเชพ เช…เชจเซเชฏ เชกเซ‡เชŸเชพ เชนเชถเซ‡ เชœเซ‡เชจเซ‡ เช…เชฎเซ‡ เชซเชฟเชฒเซเชŸเชฐ เชตเชกเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช.

เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชจเซ‹ เชจเชตเซ‹ เชฆเชพเช–เชฒเซ‹ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

dblk_t *datab_alloc(int size);

เช‡เชจเชชเซเชŸ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ เชคเชฐเซ€เช•เซ‡, เชคเซ‡ เชกเซ‡เชŸเชพเชจเซเช‚ เช•เชฆ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡ เชฌเซเชฒเซ‹เช• เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชถเซ‡. เชซเชพเชณเชตเซ‡เชฒ เชฎเซ‡เชฎเชฐเซ€เชจเซ€ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชนเซ‡เชกเชฐ - เชธเซเชŸเซเชฐเช•เซเชšเชฐ - เชฎเซ‚เช•เชตเชพ เชฎเชพเชŸเซ‡ เชตเชงเซ เชฎเซ‡เชฎเชฐเซ€ เชซเชพเชณเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชกเซ‡เชŸเชพเชฌ. เชชเชฐเช‚เชคเซ เช…เชจเซเชฏ เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เช† เชนเช‚เชฎเซ‡เชถเชพ เชฅเชคเซเช‚ เชจเชฅเซ€; เช•เซ‡เชŸเชฒเชพเช• เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚, เชกเซ‡เชŸเชพ เชฌเชซเชฐ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• เชนเซ‡เชกเชฐเชฅเซ€ เช…เชฒเช— เชธเซเชฅเชฟเชค เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เชฎเชพเชณเช–เซเช‚ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡, เช•เซเชทเซ‡เชคเซเชฐเซ‹ เช—เซ‹เช เชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡เชฅเซ€ เชคเซ‡เชจเซเช‚ เช•เซเชทเซ‡เชคเซเชฐ db_base เชกเซ‡เชŸเชพ เชตเชฟเชธเซเชคเชพเชฐเชจเซ€ เชถเชฐเซ‚เช†เชค เชคเชฐเชซ เชจเชฟเชฐเซเชฆเซ‡เชถ เช•เชฐเซ‡ เช›เซ‡, เช…เชจเซ‡ db_lim เชคเซ‡เชจเชพ เช…เช‚เชค เชธเซเชงเซ€. เชฒเชฟเช‚เช• เช—เชฃเชคเชฐเซ€ db_ref เชเช• เชชเชฐ เชธเซ‡เชŸ เช›เซ‡. เชกเซ‡เชŸเชพ เช•เซเชฒเชฟเชฏเชฐ เชซเช‚เช•เซเชถเชจ เชชเซ‹เช‡เชจเซเชŸเชฐ เชถเซ‚เชจเซเชฏ เชชเชฐ เชธเซ‡เชŸ เช›เซ‡.

เชธเช‚เชฆเซ‡เชถ mblk_t

เชœเชฃเชพเชตเซเชฏเชพ เชฎเซเชœเชฌ, เช•เชคเชพเชฐ เชคเชคเซเชตเซ‹ เชชเซเชฐเช•เชพเชฐเชจเชพ เชนเซ‹เชฏ เช›เซ‡ mblk_t, เชคเซ‡ เชจเซ€เชšเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชฅเชฏเซ‡เชฒ เช›เซ‡:

typedef struct msgb
{
  struct msgb *b_prev;   // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะฟั€ะตะดั‹ะดัƒั‰ะธะน ัะปะตะผะตะฝั‚ ัะฟะธัะบะฐ.
  struct msgb *b_next;   // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ัะปะตะดัƒัŽั‰ะธะน ัะปะตะผะตะฝั‚ ัะฟะธัะบะฐ.
  struct msgb *b_cont;   // ะฃะบะฐะทะฐั‚ะตะปัŒ ะดะปั ะฟะพะดะบะปะตะนะบะธ ะบ ัะพะพะฑั‰ะตะฝะธัŽ ะดั€ัƒะณะธั… ัะพะพะฑั‰ะตะฝะธะน, ะดะปั ัะพะทะดะฐะฝะธั ะบะพั€ั‚ะตะถะฐ ัะพะพะฑั‰ะตะฝะธะน.
  struct datab *b_datap; // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ัั‚ั€ัƒะบั‚ัƒั€ัƒ ะฑะปะพะบะฐ ะดะฐะฝะฝั‹ั….
  unsigned char *b_rptr; // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะฝะฐั‡ะฐะปะพ ะพะฑะปะฐัั‚ะธ ะดะฐะฝะฝั‹ั… ะดะปั ั‡ั‚ะตะฝะธั ะดะฐะฝะฝั‹ั… ะฑัƒั„ะตั€ะฐ b_datap.
  unsigned char *b_wptr; // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะฝะฐั‡ะฐะปะพ ะพะฑะปะฐัั‚ะธ ะดะฐะฝะฝั‹ั… ะดะปั ะทะฐะฟะธัะธ ะดะฐะฝะฝั‹ั… ะฑัƒั„ะตั€ะฐ b_datap.
  uint32_t reserved1;    // ะ—ะฐั€ะตะทะตั€ะฒะธั€ะพะฒะฐะฝะฝะพะต ะฟะพะปะต1, ะผะตะดะธะฐัั‚ั€ะธะผะตั€ ะฟะพะผะตั‰ะฐะตั‚ ั‚ัƒะดะฐ ัะปัƒะถะตะฑะฝัƒัŽ ะธะฝั„ะพั€ะผะฐั†ะธัŽ. 
  uint32_t reserved2;    // ะ—ะฐั€ะตะทะตั€ะฒะธั€ะพะฒะฐะฝะฝะพะต ะฟะพะปะต2, ะผะตะดะธะฐัั‚ั€ะธะผะตั€ ะฟะพะผะตั‰ะฐะตั‚ ั‚ัƒะดะฐ ัะปัƒะถะตะฑะฝัƒัŽ ะธะฝั„ะพั€ะผะฐั†ะธัŽ.
  #if defined(ORTP_TIMESTAMP)
  struct timeval timestamp;
  #endif
  ortp_recv_addr_t recv_addr;
} mblk_t;

เชฎเชพเชณเช–เซเช‚ mblk_t เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชชเซ‹เช‡เชจเซเชŸเชฐ เชงเชฐเชพเชตเซ‡ เช›เซ‡ b_prev, b_เช†เช—เชฒเซเช‚, เชœเซ‡ เชฌเชฎเชฃเซ€ เชฒเชฟเช‚เช• เช•เชฐเซ‡เชฒเซ€ เชธเซ‚เชšเชฟเชจเซ‡ เช—เซ‹เช เชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ (เชœเซ‡ เชเช• เช•เชคเชพเชฐ เช›เซ‡ เช•เชคเชพเชฐ_เชŸเซ€).

เชชเช›เซ€ เชจเชฟเชฐเซเชฆเซ‡เชถเช• เช†เชตเซ‡ เช›เซ‡ b_cont, เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชคเซเชฏเชพเชฐเซ‡ เชœ เชฅเชพเชฏ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชธเช‚เชฆเซ‡เชถ เชŸเซเชฏเซเชชเชฒเชจเซ‹ เชญเชพเช— เชนเซ‹เชฏ. เชŸเซเชฏเซเชชเชฒเชฎเชพเช‚ เช›เซ‡เชฒเซเชฒเชพ เชธเช‚เชฆเซ‡เชถ เชฎเชพเชŸเซ‡, เช† เชจเชฟเชฐเซเชฆเซ‡เชถเช• เชจเชฒ เชฐเชนเซ‡ เช›เซ‡.

เช†เช—เชณ เช†เชชเชฃเซ‡ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• เชฎเชพเชŸเซ‡ เชจเชฟเชฐเซเชฆเซ‡เชถเช• เชœเซ‹เชˆเช เช›เซ€เช b_datap, เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชธเช‚เชฆเซ‡เชถ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡. เชคเซ‡ เชฌเซเชฒเซ‹เช• เชกเซ‡เชŸเชพ เชฌเชซเชฐเชจเซ€ เช…เช‚เชฆเชฐเชจเชพ เชตเชฟเชธเซเชคเชพเชฐเชจเชพ เชจเชฟเชฐเซเชฆเซ‡เชถเช•เซ‹ เชฆเซเชตเชพเชฐเชพ เช…เชจเซเชธเชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช•เซเชทเซ‡เชคเซเชฐ b_rptr เชธเซเชฅเชพเชจ เชธเซเชชเชทเซเชŸ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เชœเซเชฏเชพเช‚เชฅเซ€ เชฌเชซเชฐเชจเซ‹ เชกเซ‡เชŸเชพ เชตเชพเช‚เชšเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช•เซเชทเซ‡เชคเซเชฐ b_wptr เชธเซเชฅเชพเชจ เชธเซ‚เชšเชตเซ‡ เช›เซ‡ เช•เซ‡ เชœเซเชฏเชพเช‚เชฅเซ€ เชฌเชซเชฐ เชชเชฐ เชฒเช–เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชฌเชพเช•เซ€เชจเชพ เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชธเซ‡เชตเชพ เชชเซเชฐเช•เซƒเชคเชฟเชจเชพ เช›เซ‡ เช…เชจเซ‡ เชกเซ‡เชŸเชพ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเชจเชพ เชธเช‚เชšเชพเชฒเชจ เชธเชพเชฅเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เชจเชฅเซ€.

เชจเซ€เชšเซ‡ เชจเชพเชฎ เชธเชพเชฅเซ‡เชจเซ‹ เชเช• เชœ เชธเช‚เชฆเซ‡เชถ เช›เซ‡ m1 เช…เชจเซ‡ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• d1.
Mediastreamer2 VoIP เชเชจเซเชœเชฟเชจเชจเซ€ เชถเซ‹เชงเช–เซ‹เชณ. เชญเชพเช— 11
เชจเซ€เชšเซ‡เชจเซ‹ เช†เช‚เช•เชกเซ‹ เชคเซเชฐเชฃ เชธเช‚เชฆเซ‡เชถเชพเช“เชจเซ‹ เชŸเซเชชเชฒ เชฌเชคเชพเชตเซ‡ เช›เซ‡ m1, เชเชฎ 1_1, เชเชฎ 1_2.
Mediastreamer2 VoIP เชเชจเซเชœเชฟเชจเชจเซ€ เชถเซ‹เชงเช–เซ‹เชณ. เชญเชพเช— 11

เชฎเซ‡เชธเซ‡เชœเชฟเช‚เช— เช•เชพเชฐเซเชฏเซ‹ mblk_t

เชเช• เชจเชตเซ‹ เชธเช‚เชฆเซ‡เชถ mblk_t เช•เชพเชฐเซเชฏ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเซ‡เชฒ:

mblk_t *allocb(int size, int pri); 

เชคเซ‡เชฃเซ€ เชฎเซ‡เชฎเชฐเซ€เชฎเชพเช‚ เชเช• เชจเชตเซ‹ เชธเช‚เชฆเซ‡เชถ เชฎเซ‚เช•เซ‡ เช›เซ‡ mblk_t เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช•เชฆเชจเชพ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• เชธเชพเชฅเซ‡ เช•เชฆ, เชฌเซ€เชœเซ€ เชฆเชฒเซ€เชฒ - เชชเซเชฐเชฟ เชชเซเชธเซเชคเช•เชพเชฒเชฏเชจเชพ เช† เชธเช‚เชธเซเช•เชฐเชฃเชฎเชพเช‚ เชตเชชเชฐเชพเชฏเซ‡เชฒ เชจเชฅเซ€. เชคเซ‡ เชถเซ‚เชจเซเชฏ เชฐเชนเซ‡เชตเซเช‚ เชœเซ‹เชˆเช. เชซเช‚เช•เซเชถเชจเชจเชพ เช“เชชเชฐเซ‡เชถเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชจเชตเชพ เชฎเซ‡เชธเซ‡เชœเชจเซ€ เชฐเชšเชจเชพ เชฎเชพเชŸเซ‡ เชฎเซ‡เชฎเชฐเซ€ เชซเชพเชณเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชจเซ‡ เชซเช‚เช•เซเชถเชจเชจเซ‡ เชฌเซ‹เชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ mblk_init(), เชœเซ‡ เชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเชพ เชฌเชจเชพเชตเซ‡เชฒ เช‡เชจเซเชธเซเชŸเชจเซเชธเชจเชพ เชคเชฎเชพเชฎ เชซเซ€เชฒเซเชกเซเชธเชจเซ‡ เชฐเซ€เชธเซ‡เชŸ เช•เชฐเชถเซ‡ เช…เชจเซ‡ เชชเช›เซ€, เช‰เชชเชฐเซ‹เช•เซเชคเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ datab_alloc(), เชกเซ‡เชŸเชพ เชฌเชซเชฐ เชฌเชจเชพเชตเชถเซ‡. เชœเซ‡ เชชเช›เซ€ เชฌเช‚เชงเชพเชฐเชฃเชฎเชพเช‚เชจเชพ เช•เซเชทเซ‡เชคเซเชฐเซ‹ เช—เซ‹เช เชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡:

mp->b_datap=datab;
mp->b_rptr=mp->b_wptr=datab->db_base;
mp->b_next=mp->b_prev=mp->b_cont=NULL;

เช†เช‰เชŸเชชเซเชŸ เชชเชฐ เช…เชฎเชจเซ‡ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชซเซ€เชฒเซเชกเซเชธ เช…เชจเซ‡ เช–เชพเชฒเซ€ เชกเซ‡เชŸเชพ เชฌเชซเชฐ เชธเชพเชฅเซ‡ เชจเชตเซ‹ เชธเช‚เชฆเซ‡เชถ เชชเซเชฐเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡. เชธเช‚เชฆเซ‡เชถเชฎเชพเช‚ เชกเซ‡เชŸเชพ เช‰เชฎเซ‡เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• เชฌเชซเชฐเชฎเชพเช‚ เช•เซ‰เชชเชฟ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

memcpy(msg->b_rptr, data, size);

เชœเซเชฏเชพเช‚ เชฎเชพเชนเชฟเชคเซ€ เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชค เชฎเชพเชŸเซ‡ เชจเชฟเชฐเซเชฆเซ‡เชถเช• เช›เซ‡, เช…เชจเซ‡ เช•เชฆ - เชคเซ‡เชฎเชจเซเช‚ เช•เชฆ.
เชชเช›เซ€ เชคเชฎเชพเชฐเซ‡ เชจเชฟเชฐเซเชฆเซ‡เชถเช•เชจเซ‡ เชฒเช–เชตเชพเชจเชพ เชฌเชฟเช‚เชฆเซ เชชเชฐ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เชคเซ‡ เชฌเชซเชฐเชฎเชพเช‚ เชฎเซเช•เซเชค เชตเชฟเชธเซเชคเชพเชฐเชจเซ€ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชซเชฐเซ€เชฅเซ€ เชจเชฟเชฐเซเชฆเซ‡เชถ เช•เชฐเซ‡:

msg->b_wptr = msg->b_wptr + size

เชœเซ‹ เชคเชฎเชพเชฐเซ‡ เช•เซ‰เชชเชฟ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ, เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚เชจเชพ เชฌเชซเชฐเชฎเชพเช‚เชฅเซ€ เชธเช‚เชฆเซ‡เชถ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เชคเซ‹ เชชเช›เซ€ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹:

mblk_t *esballoc(uint8_t *buf, int size, int pri, void (*freefn)(void*)); 

เชซเช‚เช•เซเชถเชจ, เชฎเซ‡เชธเซ‡เชœ เช…เชจเซ‡ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชจเซเช‚ เชฎเชพเชณเช–เซเช‚ เชฌเชจเชพเชตเซเชฏเชพ เชชเช›เซ€, เชธเชฐเชจเชพเชฎเชพเช‚ เชชเชฐเชจเชพ เชกเซ‡เชŸเชพ เชชเชฐ เชคเซ‡เชจเชพ เชชเซ‹เช‡เชจเซเชŸเชฐเชจเซ‡ เช—เซ‹เช เชตเชถเซ‡. เชฌเชซ. เชคเซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชจเชพ เชนเซ‡เชกเชฐ เชซเซ€เชฒเซเชกเซเชธ เชชเช›เซ€ เชกเซ‡เชŸเชพ เชฌเชซเชฐ เชธเซเชฅเชฟเชค เชจเชฅเซ€, เชœเซ‡เชฎ เช•เซ‡ เชซเช‚เช•เซเชถเชจ เชธเชพเชฅเซ‡ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เชนเชคเซ‹. datab_alloc(). เชซเช‚เช•เซเชถเชจเชฎเชพเช‚ เชชเชธเชพเชฐ เช•เชฐเชพเชฏเซ‡เชฒ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡เชจเซ‹ เชฌเชซเชฐ เชคเซ‡ เชœเซเชฏเชพเช‚ เชนเชคเซ‹ เชคเซเชฏเชพเช‚ เชœ เชฐเชนเซ‡เชถเซ‡, เชชเชฐเช‚เชคเซ เชชเซ‹เช‡เชจเซเชŸเชฐเชจเซ€ เชฎเชฆเชฆเชฅเซ€ เชคเซ‡ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชจเชพ เชจเชตเชพ เชฌเชจเชพเชตเซ‡เชฒเชพ เชนเซ‡เชกเชฐ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เช…เชจเซ‡ เชคเซ‡ เชฎเซเชœเชฌ, เชธเช‚เชฆเซ‡เชถ เชธเชพเชฅเซ‡.

เชเช• เชธเช‚เชฆเซ‡เชถ เชฎเชพเชŸเซ‡ mblk_t เช•เซ‡เชŸเชฒเชพเช• เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เซเชธเชจเซ‡ เช•เซเชฐเชฎเชฟเช• เชฐเซ€เชคเซ‡ เชœเซ‹เชกเซ€ เชถเช•เชพเชฏ เช›เซ‡. เช† เช•เชพเชฐเซเชฏ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

mblk_t * appendb(mblk_t *mp, const char *data, int size, bool_t pad); 

mp โ€” เชเช• เชธเช‚เชฆเซ‡เชถ เชœเซ‡เชฎเชพเช‚ เช…เชจเซเชฏ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡;
เชฎเชพเชนเชฟเชคเซ€ โ€” เชฌเซเชฒเซ‹เช• เชชเชฐ เชจเชฟเชฐเซเชฆเซ‡เชถเช•, เชœเซ‡เชจเซ€ เชเช• เชจเช•เชฒ เชธเช‚เชฆเซ‡เชถเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡;
เช•เชฆ - เชกเซ‡เชŸเชพ เช•เชฆ;
เชชเซ‡เชก โ€” เชเช• เชงเซเชตเชœ เช•เซ‡ เชœเซ‡ เชซเชพเชณเชตเซ‡เชฒ เชฎเซ‡เชฎเชฐเซ€เชจเซเช‚ เช•เชฆ 4-เชฌเชพเชˆเชŸเชจเซ€ เชธเซ€เชฎเชพ เชธเชพเชฅเซ‡ เชธเช‚เชฐเซ‡เช–เชฟเชค เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช (เชชเซ‡เชกเชฟเช‚เช— เชถเซ‚เชจเซเชฏ เชธเชพเชฅเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡).

เชœเซ‹ เชนเชพเชฒเชจเชพ เชฎเซ‡เชธเซ‡เชœ เชกเซ‡เชŸเชพ เชฌเชซเชฐเชฎเชพเช‚ เชชเซ‚เชฐเชคเซ€ เชœเช—เซเชฏเชพ เชนเชถเซ‡, เชคเซ‹ เชจเชตเซ‹ เชกเซ‡เชŸเชพ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชฐเชนเซ‡เชฒเชพ เชกเซ‡เชŸเชพเชจเซ€ เชชเชพเช›เชณ เชชเซ‡เชธเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช•เชฐเชคเชพเช‚ เชฎเซ‡เชธเซ‡เชœ เชกเซ‡เชŸเชพ เชฌเชซเชฐเชฎเชพเช‚ เช“เช›เซ€ เช–เชพเชฒเซ€ เชœเช—เซเชฏเชพ เชนเซ‹เชฏ เชคเซ‹ เช•เชฆ, เชชเช›เซ€ เชชเชฐเซเชฏเชพเชชเซเชค เชฌเชซเชฐ เช•เชฆ เชธเชพเชฅเซ‡ เชจเชตเซ‹ เชธเช‚เชฆเซ‡เชถ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชกเซ‡เชŸเชพ เชคเซ‡เชจเชพ เชฌเชซเชฐ เชชเชฐ เช•เซ‰เชชเชฟ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช† เชเช• เชจเชตเซ‹ เชธเช‚เชฆเซ‡เชถ เช›เซ‡, เชœเซ‡ เชชเซ‹เช‡เชจเซเชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฎเซ‚เชณ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒ เช›เซ‡ b_cont. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชธเช‚เชฆเซ‡เชถ เชŸเซเชฏเซเชชเชฒเชฎเชพเช‚ เชซเซ‡เชฐเชตเชพเชฏ เช›เซ‡.

เชœเซ‹ เชคเชฎเชพเชฐเซ‡ เชŸเซเชฏเซเชชเชฒเชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซ‹ เชฌเซ€เชœเซ‹ เชฌเซเชฒเซ‹เช• เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

void msgappend(mblk_t *mp, const char *data, int size, bool_t pad);

เชคเซ‡เชฃเซ€เชจเซ‡ เชŸเซเชฏเซเชชเชฒเชฎเชพเช‚ เช›เซ‡เชฒเซเชฒเซ‹ เชธเช‚เชฆเซ‡เชถ เชฎเชณเชถเซ‡ (เชคเซ‡เชจเซ€ เชชเชพเชธเซ‡ b_cont เชจเชฒ เชนเชถเซ‡) เช…เชจเซ‡ เช† เชธเช‚เชฆเซ‡เชถ เชฎเชพเชŸเซ‡ เชซเช‚เช•เซเชถเชจเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเชถเซ‡ appendb().

เชคเชฎเซ‡ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเช‚เชฆเซ‡เชถ เช…เชฅเชตเชพ เชŸเชชเชฒเชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซเช‚ เช•เชฆ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹:

int msgdsize(const mblk_t *mp);

เชคเซ‡ เชŸเซเชฏเซเชชเชฒเชฎเชพเช‚เชจเชพ เชคเชฎเชพเชฎ เชธเช‚เชฆเซ‡เชถเชพเช“เชฎเชพเช‚เชฅเซ€ เชฒเซ‚เชช เช•เชฐเชถเซ‡ เช…เชจเซ‡ เชคเซ‡ เชธเช‚เชฆเซ‡เชถเชพเช“เชจเชพ เชกเซ‡เชŸเชพ เชฌเชซเชฐเชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซ€ เช•เซเชฒ เชฐเช•เชฎ เชชเชฐเชค เช•เชฐเชถเซ‡. เชฆเชฐเซ‡เช• เชธเช‚เชฆเซ‡เชถ เชฎเชพเชŸเซ‡, เชกเซ‡เชŸเชพเชจเซ€ เชฎเชพเชคเซเชฐเชพ เชจเซ€เชšเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡ เช—เชฃเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

 mp->b_wptr - mp->b_rptr

เชฌเซ‡ เชŸเซเชฏเซเชชเชฒเซเชธเชจเซ‡ เชœเซ‹เชกเชตเชพ เชฎเชพเชŸเซ‡, เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹:

mblk_t *concatb(mblk_t *mp, mblk_t *newm);

เชคเซ‡เชฃเซ€ เชŸเชชเชฒ เชœเซ‹เชกเซ‡ เช›เซ‡ newm เชŸเชชเชฒเชจเซ€ เชชเซ‚เช‚เช›เชกเซ€ เชธเซเชงเซ€ mp เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ€ เชŸเซเชฏเซเชชเชฒเชจเชพ เช›เซ‡เชฒเซเชฒเชพ เชธเช‚เชฆเซ‡เชถ เชชเชฐ เชเช• เชจเชฟเชฐเซเชฆเซ‡เชถเช• เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡.

เชœเซ‹ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ เชคเซ‹, เชŸเซเชฏเซเชชเชฒเชจเซ‡ เชกเซ‡เชŸเชพเชจเชพ เชเช• เชฌเซเชฒเซ‹เช• เชธเชพเชฅเซ‡ เชเช• เชธเช‚เชฆเซ‡เชถเชฎเชพเช‚ เชซเซ‡เชฐเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡; เช† เช•เชพเชฐเซเชฏ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

void msgpullup(mblk_t *mp,int len);

เชœเซ‹ เชฆเชฒเซ€เชฒ เชฒเซ‡เชจ -1 เช›เซ‡, เชคเซ‹ เชซเชพเชณเชตเซ‡เชฒ เชฌเชซเชฐเชจเซเช‚ เช•เชฆ เช†เชชเชฎเซ‡เชณเซ‡ เชจเช•เซเช•เซ€ เชฅเชพเชฏ เช›เซ‡. เชœเซ‹ เชฒเซ‡เชจ เชงเชจ เชธเช‚เช–เซเชฏเชพ เช›เซ‡, เช† เช•เชฆเชจเซเช‚ เชฌเชซเชฐ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชŸเชชเชฒ เชฎเซ‡เชธเซ‡เชœ เชกเซ‡เชŸเชพ เช•เซ‹เชชเซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชœเซ‹ เชฌเชซเชฐ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ, เชคเซ‹ เชจเช•เชฒ เช•เชฐเชตเชพเชจเซเช‚ เชฌเช‚เชง เชฅเชˆ เชœเชถเซ‡. เชŸเซเชฏเซเชชเชฒเชจเซ‹ เชชเชนเซ‡เชฒเซ‹ เชธเช‚เชฆเซ‡เชถ เช•เซ‹เชชเซ€ เช•เชฐเซ‡เชฒเชพ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เชจเชตเชพ เช•เชฆเชจเซเช‚ เชฌเชซเชฐ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชถเซ‡. เชฌเชพเช•เซ€เชจเชพ เชธเช‚เชฆเซ‡เชถเชพเช“ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชจเซ‡ เชฎเซ‡เชฎเชฐเซ€ เชขเช—เชฒเชพ เชชเชฐ เชชเชพเช›เซ€ เช†เชตเชถเซ‡.

เชฐเชšเชจเชพ เช•เชพเชขเซ€ เชจเชพเช–เชคเซ€ เชตเช–เชคเซ‡ mblk_t เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชจเซ€ เชธเช‚เชฆเชฐเซเชญ เช—เชฃเชคเชฐเซ€ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‹, เช•เซ‰เชฒ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชฎเชซเชค() เชคเซ‡ เชถเซ‚เชจเซเชฏ เชนเซ‹เชตเชพเชจเซเช‚ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚ เช›เซ‡, เชชเช›เซ€ เชกเซ‡เชŸเชพ เชฌเชซเชฐ เชฆเชพเช–เชฒเชพเชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ mblk_t, เชœเซ‡ เชคเซ‡เชจเซ‡ เชจเชฟเชฐเซเชฆเซ‡เชถ เช•เชฐเซ‡ เช›เซ‡.

เชจเชตเชพ เชธเช‚เชฆเซ‡เชถเชจเชพ เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชถเชฐเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช:

void mblk_init(mblk_t *mp);

เชธเช‚เชฆเซ‡เชถเชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซ‹ เชฌเซ€เชœเซ‹ เชญเชพเช— เช‰เชฎเซ‡เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช:

mblk_t * appendb(mblk_t *mp, const char *data, size_t size, bool_t pad);

เชœเซ‹ เชจเชตเซ‹ เชกเซ‡เชŸเชพ เชฎเซ‡เชธเซ‡เชœ เชกเซ‡เชŸเชพ เชฌเชซเชฐเชจเซ€ เช–เชพเชฒเซ€ เชœเช—เซเชฏเชพเชฎเชพเช‚ เชฌเช‚เชงเชฌเซ‡เชธเชคเซ‹ เชจเชฅเซ€, เชคเซ‹ เชœเชฐเซ‚เชฐเซ€ เช•เชฆเชจเชพ เชฌเชซเชฐ เชธเชพเชฅเซ‡ เช…เชฒเช—เชฅเซ€ เชฌเชจเชพเชตเซ‡เชฒเซ‹ เชธเช‚เชฆเซ‡เชถ เชธเช‚เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เช‰เชฎเซ‡เชฐเซ‡เชฒเชพ เชธเช‚เชฆเซ‡เชถ เชฎเชพเชŸเซ‡เชจเซ‹ เชจเชฟเชฐเซเชฆเซ‡เชถเช• เชชเซเชฐเชฅเชฎ เชธเช‚เชฆเซ‡เชถเชฎเชพเช‚ เชธเซ‡เชŸ เช•เชฐเซ‡เชฒ เช›เซ‡) เช…เชจเซ‡ เชธเช‚เชฆเซ‡เชถ เชŸเชชเชฒเชฎเชพเช‚ เชซเซ‡เชฐเชตเชพเชฏ เช›เซ‡.

เชŸเชชเชฒเชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซ‹ เชŸเซเช•เชกเซ‹ เช‰เชฎเซ‡เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡:

void msgappend(mblk_t *mp, const char *data, size_t size, bool_t pad); 

เชซเช‚เช•เซเชถเชจ เชเชชเซ‡เชจเซเชกเชฌเซ€() เชจเซ‡ เชฒเซ‚เชชเชฎเชพเช‚ เช•เซ‰เชฒ เช•เชฐเซ‡ เช›เซ‡.

เชฌเซ‡ เชŸเซเชฏเซเชชเชฒเชจเซ‡ เชเช•เชฎเชพเช‚ เชœเซ‹เชกเซ€เชจเซ‡:

mblk_t *concatb(mblk_t *mp, mblk_t *newm);

เชธเช‚เชฆเซ‡เชถ newm เชธเชพเชฅเซ‡ เชœเซ‹เชกเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ mp.

เชเช• เชธเช‚เชฆเซ‡เชถเชจเซ€ เชจเช•เชฒ เชฌเชจเชพเชตเชตเซ€:

mblk_t *copyb(const mblk_t *mp);

เชฌเชงเชพ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เซเชธ เชธเชพเชฅเซ‡ เชŸเซเชฏเซเชชเชฒเชจเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เชจเช•เชฒ:

mblk_t *copymsg(const mblk_t *mp);

เชŸเซเชฏเซเชชเชฒเชจเชพ เชคเชคเซเชตเซ‹ เชซเช‚เช•เซเชถเชจ เชฆเซเชตเชพเชฐเชพ เช•เซ‰เชชเชฟ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เซ‹เชชเซ€เชฌเซ€().

เชธเช‚เชฆเซ‡เชถเชจเซ€ เชธเชฐเชณ เชจเช•เชฒ เชฌเชจเชพเชตเซ‹ mblk_t. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชจเซ€ เชจเช•เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡เชจเซ‹ เชธเช‚เชฆเชฐเซเชญ เช•เชพเช‰เชจเซเชŸเชฐ เชตเชงเซ‡ เช›เซ‡ db_ref:

mblk_t *dupb(mblk_t *mp);

เชŸเซเชฏเซเชชเชฒเชจเซ€ เชนเชณเชตเชพ เชตเชœเชจเชจเซ€ เชจเช•เชฒ เชฌเชจเชพเชตเชตเซ€. เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เซเชธเชจเซ€ เชจเช•เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชจเชฅเซ€, เชซเช•เซเชค เชคเซ‡เชฎเชจเชพ เชธเช‚เชฆเชฐเซเชญ เช•เชพเช‰เชจเซเชŸเชฐเซเชธเชฎเชพเช‚ เชตเชงเชพเชฐเซ‹ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ db_ref:

mblk_t *dupmsg(mblk_t* m);

เชŸเซเชฏเซเชชเชฒเชจเชพ เชคเชฎเชพเชฎ เชธเช‚เชฆเซ‡เชถเชพเชจเซ‡ เชเช• เชธเช‚เชฆเซ‡เชถเชฎเชพเช‚ เช—เซเชฒเซเช‡เช‚เช— เช•เชฐเซ‹:

void msgpullup(mblk_t *mp,size_t len);

เชœเซ‹ เชฆเชฒเซ€เชฒ เชฒเซ‡เชจ -1 เช›เซ‡, เชคเซ‹ เชซเชพเชณเชตเซ‡เชฒ เชฌเชซเชฐเชจเซเช‚ เช•เชฆ เช†เชชเชฎเซ‡เชณเซ‡ เชจเช•เซเช•เซ€ เชฅเชพเชฏ เช›เซ‡.

เชธเช‚เชฆเซ‡เชถ เช•เชพเชขเซ€ เชจเชพเช–เซ€เชจเซ‡, เชŸเชชเชฒ:

void freemsg(mblk_t *mp);

เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชจเซ€ เชฐเซ‡เชซเชฐเชจเซเชธ เช•เชพเช‰เชจเซเชŸ เชเช•เชฅเซ€ เช˜เชŸเซ‡ เช›เซ‡. เชœเซ‹ เชคเซ‡ เชถเซ‚เชจเซเชฏ เชธเซเชงเซ€ เชชเชนเซ‹เช‚เชšเซ‡ เช›เซ‡, เชคเซ‹ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• เชชเชฃ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชธเช‚เชฆเซ‡เชถ เช…เชฅเชตเชพ เชŸเชชเชฒเชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซ€ เช•เซเชฒ เชฐเช•เชฎเชจเซ€ เช—เชฃเชคเชฐเซ€.

size_t msgdsize(const mblk_t *mp);

เช•เชคเชพเชฐเชจเซ€ เชชเซ‚เช‚เช›เชกเซ€เชฎเชพเช‚เชฅเซ€ เชธเช‚เชฆเซ‡เชถ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช:

mblk_t *ms_queue_peek_last (q);

เชเช• เชธเช‚เชฆเซ‡เชถเชจเชพ เช†เชฐเช•เซเชทเชฟเชค เช•เซเชทเซ‡เชคเซเชฐเซ‹เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€เชจเซ‡ เชฌเซ€เชœเชพ เชธเช‚เชฆเซ‡เชถเชฎเชพเช‚ เชจเช•เชฒ เช•เชฐเชตเซ€ (เชนเช•เซ€เช•เชคเชฎเชพเช‚, เช† เช•เซเชทเซ‡เชคเซเชฐเซ‹เชฎเชพเช‚ เชซเซเชฒเซ‡เช—เซเชธ เชนเซ‹เชฏ เช›เซ‡ เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡):

mblk_meta_copy(const mblk_t *source, mblk *dest);

เช•เชคเชพเชฐ เช•เชคเชพเชฐ_เชŸเซ€

เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐเชฎเชพเช‚ เชธเช‚เชฆเซ‡เชถ เช•เชคเชพเชฐ เชเช• เชชเชฐเชฟเชชเชคเซเชฐ เชฌเชฎเชฃเซ€ เชฒเชฟเช‚เช• เช•เชฐเซ‡เชฒเซ€ เชธเซ‚เชšเชฟ เชคเชฐเซ€เช•เซ‡ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชฆเชฐเซ‡เช• เชธเซ‚เชšเชฟ เช˜เชŸเช• เชธเชฟเช—เซเชจเชฒ เชจเชฎเซ‚เชจเชพเช“ เชธเชพเชฅเซ‡ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• เชฎเชพเชŸเซ‡ เชจเชฟเชฐเซเชฆเซ‡เชถเช• เชงเชฐเชพเชตเซ‡ เช›เซ‡. เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เชซเช•เซเชค เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช• เชคเชฐเชซเชจเชพ เชจเชฟเชฐเซเชฆเซ‡เชถเช•เซ‹ เชฌเชฆเชฒเชพเชฎเชพเช‚ เช–เชธเซ‡เชกเซ‡ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ เชกเซ‡เชŸเชพ เชชเซ‹เชคเซ‡ เช—เชคเชฟเชนเซ€เชจ เชฐเชนเซ‡ เช›เซ‡. เชคเซ‡. เชซเช•เซเชค เชคเซ‡เชฎเชจเซ€ เชฒเชฟเช‚เช•เซเชธ เช–เชธเซ‡เชกเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡.
เช•เชคเชพเชฐเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชคเซ€ เชฐเชšเชจเชพ เช•เชคเชพเชฐ_เชŸเซ€, เชจเซ€เชšเซ‡ เชฌเชคเชพเชตเซ‡เชฒ เช›เซ‡:

typedef struct _queue
{
   mblk_t _q_stopper; /* "ะฅะพะปะพัั‚ะพะน" ัะปะตะผะตะฝั‚ ะพั‡ะตั€ะตะดะธ, ะฝะต ัƒะบะฐะทั‹ะฒะฐะตั‚ ะฝะฐ ะดะฐะฝะฝั‹ะต, ะธัะฟะพะปัŒะทัƒะตั‚ัั ั‚ะพะปัŒะบะพ ะดะปั ัƒะฟั€ะฐะฒะปะตะฝะธั ะพั‡ะตั€ะตะดัŒัŽ. ะŸั€ะธ ะธะฝะธั†ะธะฐะปะธะทะฐั†ะธะธ ะพั‡ะตั€ะตะดะธ (qinit()) ะตะณะพ ัƒะบะฐะทะฐั‚ะตะปะธ ะฝะฐัั‚ั€ะฐะธะฒะฐัŽั‚ัั ั‚ะฐะบ, ั‡ั‚ะพะฑั‹ ะพะฝะธ ัƒะบะฐะทั‹ะฒะฐะปะธ ะฝะฐ ะฝะตะณะพ ัะฐะผะพะณะพ. */
   int q_mcount;        // ะšะพะปะธั‡ะตัั‚ะฒะพ ัะปะตะผะตะฝั‚ะพะฒ ะฒ ะพั‡ะตั€ะตะดะธ.
} queue_t;

เชฐเชšเชจเชพเชฎเชพเช‚ เชเช• เช•เซเชทเซ‡เชคเซเชฐ เช›เซ‡ - เชเช• เชจเชฟเชฐเซเชฆเซ‡เชถเช• _q_เชธเซเชŸเซ‹เชชเชฐ *mblk_t เชŸเชพเช‡เชช เช•เชฐเซ‹, เชคเซ‡ เช•เชคเชพเชฐเชฎเชพเช‚ เชชเซเชฐเชฅเชฎ เชคเชคเซเชต (เชธเช‚เชฆเซ‡เชถ) เชคเชฐเชซ เชจเชฟเชฐเซเชฆเซ‡เชถ เช•เชฐเซ‡ เช›เซ‡. เชฌเช‚เชงเชพเชฐเชฃเชจเซเช‚ เชฌเซ€เชœเซเช‚ เช•เซเชทเซ‡เชคเซเชฐ เช เช•เชคเชพเชฐเชฎเชพเช‚ เชธเช‚เชฆเซ‡เชถเชพเช“เชจเซเช‚ เช•เชพเช‰เชจเซเชŸเชฐ เช›เซ‡.
เชจเซ€เชšเซ‡เชจเซ€ เช†เช•เซƒเชคเชฟ q1 เชจเชพเชฎเชจเซ€ เช•เชคเชพเชฐ เชฌเชคเชพเชตเซ‡ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ 4 เชธเช‚เชฆเซ‡เชถเชพ m1, m2, m3, m4 เช›เซ‡.
Mediastreamer2 VoIP เชเชจเซเชœเชฟเชจเชจเซ€ เชถเซ‹เชงเช–เซ‹เชณ. เชญเชพเช— 11
เชจเซ€เชšเซ‡เชจเซ‹ เช†เช‚เช•เชกเซ‹ q1 เชจเชพเชฎเชจเซ€ เช•เชคเชพเชฐ เชฌเชคเชพเชตเซ‡ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ 4 เชธเช‚เชฆเซ‡เชถเชพ m1,m2,m3,m4 เช›เซ‡. เชธเช‚เชฆเซ‡เชถ m2 เช เชŸเชชเชฒเชจเซเช‚ เชนเซ‡เชก เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชตเชงเซ เชฌเซ‡ เชธเช‚เชฆเซ‡เชถเชพ m2_1 เช…เชจเซ‡ m2_2 เช›เซ‡.

Mediastreamer2 VoIP เชเชจเซเชœเชฟเชจเชจเซ€ เชถเซ‹เชงเช–เซ‹เชณ. เชญเชพเช— 11

queues queue_t เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพเช‚ เช•เชพเชฐเซเชฏเซ‹

เช•เชคเชพเชฐ เชชเซเชฐเชพเชฐเช‚เชญ:

void qinit(queue_t *q);

เช•เซเชทเซ‡เชคเซเชฐ _q_เชธเซเชŸเซ‹เชชเชฐ (เชคเซเชฏเชพเชฐเชฌเชพเชฆ เช†เชชเชฃเซ‡ เชคเซ‡เชจเซ‡ "เชธเซเชŸเซ‹เชชเชฐ" เช•เชนเซ€เชถเซเช‚) เชซเช‚เช•เซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ mblk_init(), เชคเซ‡เชจเชพ เชชเชพเช›เชฒเชพ เชคเชคเซเชต เช…เชจเซ‡ เช†เช—เชฒเชพ เชคเชคเซเชต เชชเซ‹เช‡เชจเซเชŸเชฐเชจเซ‡ เชชเซ‹เชˆเชจเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเชกเชœเชธเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช•เชคเชพเชฐ เชเชฒเชฟเชฎเซ‡เชจเซเชŸ เช•เชพเช‰เชจเซเชŸเชฐ เชถเซ‚เชจเซเชฏ เชชเชฐ เชฐเซ€เชธเซ‡เชŸ เช›เซ‡.

เชจเชตเซเช‚ เชคเชคเซเชต เช‰เชฎเซ‡เชฐเชตเซเช‚ (เชธเช‚เชฆเซ‡เชถเชพเช“):

void putq(queue_t *q, mblk_t *m);

เชจเชตเซเช‚ เชคเชคเซเชต m เชธเซ‚เชšเชฟเชจเชพ เช…เช‚เชคเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเชคเซเชต เชจเชฟเชฐเซเชฆเซ‡เชถเช•เซ‹เชจเซ‡ เชธเชฎเชพเชฏเซ‹เชœเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡เชฅเซ€ เชธเซเชŸเซ‹เชชเชฐ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เช†เช—เชณเชจเซเช‚ เชคเชคเซเชต เชฌเชจเซ€ เชœเชพเชฏ, เช…เชจเซ‡ เชคเซ‡ เชธเซเชŸเซ‹เชชเชฐ เชฎเชพเชŸเซ‡เชจเซเช‚ เชชเชพเช›เชฒเซเช‚ เชคเชคเซเชต เชฌเชจเซ€ เชœเชพเชฏ. เช•เชคเชพเชฐ เชเชฒเชฟเชฎเซ‡เชจเซเชŸ เช•เชพเช‰เชจเซเชŸเชฐ เชตเชงเซเชฏเซเช‚ เช›เซ‡.

เช•เชคเชพเชฐเชฎเชพเช‚เชฅเซ€ เชเช• เชคเชคเซเชต เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡:

mblk_t * getq(queue_t *q); 

เชธเซเชŸเซ‹เชชเชฐ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเซเชฏเชพ เชชเช›เซ€ เชœเซ‡ เชธเช‚เชฆเซ‡เชถ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชคเชคเซเชต เช•เชพเช‰เชจเซเชŸเชฐ เช˜เชŸเซ‡ เช›เซ‡. เชœเซ‹ เชธเซเชŸเซ‹เชชเชฐ เชธเชฟเชตเชพเชฏ เช•เชคเชพเชฐเชฎเชพเช‚ เช•เซ‹เชˆ เชคเชคเซเชตเซ‹ เชจ เชนเซ‹เชฏ, เชคเซ‹ 0 เชชเชฐเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เช•เชคเชพเชฐเชฎเชพเช‚ เชธเช‚เชฆเซ‡เชถ เชฆเชพเช–เชฒ เช•เชฐเชตเซ‹:

void insq(queue_t *q, mblk_t *emp, mblk_t *mp); 

เช˜เชŸเช• mp เชคเชคเซเชต เชชเชนเซ‡เชฒเชพเช‚ เชฆเชพเช–เชฒ เชชเชฏเชพเชฐเซเชตเชฐเชฃเซ€เชฏ. เชœเซ‹ เชชเชฏเชพเชฐเซเชตเชฐเชฃเซ€เชฏ=0, เชชเช›เซ€ เชธเช‚เชฆเซ‡เชถ เช•เชคเชพเชฐเชจเซ€ เชชเซ‚เช‚เช›เชกเซ€เชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เช•เชคเชพเชฐเชจเชพ เชตเชกเชพเชฎเชพเช‚เชฅเซ€ เชธเช‚เชฆเซ‡เชถ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช:

void remq(queue_t *q, mblk_t *mp); 

เชคเชคเซเชต เช•เชพเช‰เชจเซเชŸเชฐ เช˜เชŸเซเชฏเซเช‚ เช›เซ‡.

เช•เชคเชพเชฐเชฎเชพเช‚ เชชเซเชฐเชฅเชฎ เชคเชคเซเชต เชฎเชพเชŸเซ‡ เชจเชฟเชฐเซเชฆเซ‡เชถเช• เชตเชพเช‚เชšเชตเซเช‚:

mblk_t * peekq(queue_t *q); 

เช˜เชŸเช•เซ‹เชจเซ‡ เชชเซ‹เชคเชพเชจเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เชคเซ€ เชตเช–เชคเซ‡ เช•เชคเชพเชฐเชฎเชพเช‚เชฅเซ€ เชฌเชงเชพ เช˜เชŸเช•เซ‹เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเซเช‚:

void flushq(queue_t *q, int how);

เชฆเชฒเซ€เชฒ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชชเชฐเชพเชฏเซ‡เชฒ เชจเชฅเซ€. เช•เชคเชพเชฐ เชเชฒเชฟเชฎเซ‡เชจเซเชŸ เช•เชพเช‰เชจเซเชŸเชฐ เชถเซ‚เชจเซเชฏ เชชเชฐ เชธเซ‡เชŸ เช›เซ‡.

เช•เชคเชพเชฐเชจเชพ เช›เซ‡เชฒเซเชฒเชพ เชคเชคเซเชต เชชเชฐ เชจเชฟเชฐเซเชฆเซ‡เชถเช• เชตเชพเช‚เชšเชตเชพ เชฎเชพเชŸเซ‡ เชฎเซ‡เช•เซเชฐเซ‹:

mblk_t * qlast(queue_t *q);

เชธเช‚เชฆเซ‡เชถ เช•เชคเชพเชฐ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เช•เซ‰เชฒ เช•เชฐเซ‹ เชคเซเชฏเชพเชฐเซ‡ เชงเซเชฏเชพเชจ เชฐเชพเช–เซ‹ ms_queue_put(q, m) เชธเช‚เชฆเซ‡เชถเชจเชพ เชจเชฒ เชชเซ‹เช‡เชจเซเชŸเชฐ เชธเชพเชฅเซ‡, เชซเช‚เช•เซเชถเชจ เชฒเซ‚เชช เชฅเชพเชฏ เช›เซ‡. เชคเชฎเชพเชฐเซ‹ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชธเซเชฅเชฟเชฐ เชฅเชˆ เชœเชถเซ‡. เชธเชฎเชพเชจ เชฐเซ€เชคเซ‡ เชตเชฐเซเชคเซ‡ เช›เซ‡ ms_queue_next(q, m).

เช•เชจเซ‡เช•เซเชŸเชฟเช‚เช— เชซเชฟเชฒเซเชŸเชฐเซเชธ

เช‰เชชเชฐ เชตเชฐเซเชฃเชตเซ‡เชฒ เช•เชคเชพเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชเช• เชซเชฟเชฒเซเชŸเชฐเชฎเชพเช‚เชฅเซ€ เชฌเซ€เชœเชพ เชซเชฟเชฒเซเชŸเชฐเชฎเชพเช‚ เช…เชฅเชตเชพ เชเช•เชฅเซ€ เช…เชจเซ‡เช• เชซเชฟเชฒเซเชŸเชฐเซเชธเชฎเชพเช‚ เชธเช‚เชฆเซ‡เชถเชพ เชฎเซ‹เช•เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡. เชซเชฟเชฒเซเชŸเชฐเซเชธ เช…เชจเซ‡ เชคเซ‡เชฎเชจเชพ เชœเซ‹เชกเชพเชฃเซ‹ เชจเชฟเชฐเซเชฆเซ‡เชถเชฟเชค เช—เซเชฐเชพเชซ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชซเชฟเชฒเซเชŸเชฐเชจเชพ เช‡เชจเชชเซเชŸ เช…เชฅเชตเชพ เช†เช‰เชŸเชชเซเชŸเชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชถเชฌเซเชฆ "เชชเชฟเชจ" เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชซเชฟเชฒเซเชŸเชฐเซเชธ เชเช•เชฌเซ€เชœเชพ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒเชพ เช›เซ‡ เชคเซ‡ เช•เซเชฐเชฎเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐ "เชธเชฟเช—เซเชจเชฒ เชชเซ‹เชˆเชจเซเชŸ" เชจเชพ เช–เซเชฏเชพเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เชธเชฟเช—เซเชจเชฒ เชชเซ‹เช‡เชจเซเชŸ เชฎเชพเชณเช–เซเช‚ เช›เซ‡ _MSCPpoint, เชœเซ‡เชฎเชพเช‚ เชซเชฟเชฒเซเชŸเชฐ เชฎเชพเชŸเซ‡ เชเช• เชจเชฟเชฐเซเชฆเซ‡เชถเช• เช…เชจเซ‡ เชคเซ‡เชจเซ€ เชเช• เชชเชฟเชจเชจเซ€ เชธเช‚เช–เซเชฏเชพ เชนเซ‹เชฏ เช›เซ‡; เชคเซ‡ เชฎเซเชœเชฌ, เชคเซ‡ เชซเชฟเชฒเซเชŸเชฐเชจเชพ เช‡เชจเชชเซเชŸ เช…เชฅเชตเชพ เช†เช‰เชŸเชชเซเชŸเชฎเชพเช‚เชฅเซ€ เชเช•เชจเชพ เชœเซ‹เชกเชพเชฃเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡.

เชกเซ‡เชŸเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช— เช—เซเชฐเชพเชซเชจเซ‹ เชธเชฟเช—เซเชจเชฒ เชชเซ‹เชˆเชจเซเชŸ

typedef struct _MSCPoint{
struct _MSFilter *filter; // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ั„ะธะปัŒั‚ั€ ะผะตะดะธะฐัั‚ั€ะธะผะตั€ะฐ.
int pin;                        // ะะพะผะตั€ ะพะดะฝะพะณะพ ะธะท ะฒั…ะพะดะพะฒ ะธะปะธ ะฒั‹ั…ะพะดะพะฒ ั„ะธะปัŒั‚ั€ะฐ, ั‚.ะต. ะฟะธะฝ.
} MSCPoint;

เชซเชฟเชฒเซเชŸเชฐ เชชเชฟเชจ เชถเซ‚เชจเซเชฏเชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เชจเซ‡ เช•เซเชฐเชฎเชพเช‚เช•เชฟเชค เช›เซ‡.

เชธเช‚เชฆเซ‡เชถ เช•เชคเชพเชฐ เชฆเซเชตเชพเชฐเชพ เชฌเซ‡ เชชเชฟเชจเชจเซเช‚ เชœเซ‹เชกเชพเชฃ เชฌเช‚เชงเชพเชฐเชฃ เชฆเซเชตเชพเชฐเชพ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡ _MSเช•เชคเชพเชฐ, เชœเซ‡เชฎเชพเช‚ เชเช• เชธเช‚เชฆเซ‡เชถ เช•เชคเชพเชฐ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชœเซ‡ เชฌเซ‡ เชธเชฟเช—เซเชจเชฒ เชชเซ‹เชˆเชจเซเชŸเชจเซ‡ เชœเซ‹เชกเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชจเชฟเชฐเซเชฆเซ‡เชถเช•เซ‹ เชงเชฐเชพเชตเซ‡ เช›เซ‡:

typedef struct _MSQueue
{
queue_t q;
MSCPoint prev;
MSCPoint next;
}MSQueue;

เช…เชฎเซ‡ เช† เชฐเชšเชจเชพเชจเซ‡ เชธเชฟเช—เซเชจเชฒ เชฒเชฟเช‚เช• เช•เชนเซ€เชถเซเช‚. เชฆเชฐเซ‡เช• เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐ เชซเชฟเชฒเซเชŸเชฐเชฎเชพเช‚ เช‡เชจเชชเซเชŸ เชฒเชฟเช‚เช•เซเชธเชจเซเช‚ เชŸเซ‡เชฌเชฒ เช…เชจเซ‡ เช†เช‰เชŸเชชเซเชŸ เชฒเชฟเช‚เช•เซเชธเชจเซเช‚ เชŸเซ‡เชฌเชฒ เชนเซ‹เชฏ เช›เซ‡ (MSQueue). เชซเชฟเชฒเซเชŸเชฐ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซเช‚ เช•เชฆ เชธเซ‡เชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡; เช…เชฎเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชชเซเชฐเช•เชพเชฐเชจเชพ เชจเชฟเช•เชพเชธ เช•เชฐเซ‡เชฒ เชšเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช† เช•เชฐเซเชฏเซเช‚ เช›เซ‡. MSFilterDesc, เชœเซเชฏเชพเชฐเซ‡ เช…เชฎเซ‡ เช…เชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชซเชฟเชฒเซเชŸเชฐ เชตเชฟเช•เชธเชพเชตเซเชฏเซเช‚. เชจเซ€เชšเซ‡ เชเช• เชฎเชพเชณเช–เซเช‚ เช›เซ‡ เชœเซ‡ เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐเชฎเชพเช‚ เช•เซ‹เชˆเชชเชฃ เชซเชฟเชฒเซเชŸเชฐเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡, MSFilter:


struct _MSFilter{
    MSFilterDesc *desc;    /* ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะดะตัะบั€ะธะฟั‚ะพั€ ั„ะธะปัŒั‚ั€ะฐ. */
    /* ะ—ะฐั‰ะธั‰ะตะฝะฝั‹ะต ะฐั‚ั€ะธะฑัƒั‚ั‹, ะธั… ะฝะตะปัŒะทั ัะดะฒะธะณะฐั‚ัŒ ะธะปะธ ัƒะฑะธั€ะฐั‚ัŒ ะธะฝะฐั‡ะต ะฑัƒะดะตั‚ ะฝะฐั€ัƒัˆะตะฝะฐ ั€ะฐะฑะพั‚ะฐ ั ะฟะปะฐะณะธะฝะฐะผะธ. */
    ms_mutex_t lock;      /* ะกะตะผะฐั„ะพั€. */
    MSQueue **inputs;     /* ะขะฐะฑะปะธั†ะฐ ะฒั…ะพะดะฝั‹ั… ะปะธะฝะบะพะฒ. */
    MSQueue **outputs;    /* ะขะฐะฑะปะธั†ะฐ ะฒั‹ั…ะพะดะฝั‹ั… ะปะธะฝะบะพะฒ. */
    struct _MSFactory *factory; /* ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ั„ะฐะฑั€ะธะบัƒ, ะบะพั‚ะพั€ะฐั ัะพะทะดะฐะปะฐ ะดะฐะฝะฝั‹ะน ัะบะทะตะผะฟะปัั€ ั„ะธะปัŒั‚ั€ะฐ. */
    void *padding;              /* ะะต ะธัะฟะพะปัŒะทัƒะตั‚ัั, ะฑัƒะดะตั‚ ะทะฐะดะตะนัั‚ะฒะพะฒะฐะฝ ะตัะปะธ ะดะพะฑะฐะฒัั‚ัั ะทะฐั‰ะธั‰ะตะฝะฝั‹ะต ะฟะพะปั. */
    void *data;                 /* ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะฟั€ะพะธะทะฒะพะปัŒะฝัƒัŽ ัั‚ั€ัƒะบั‚ัƒั€ัƒ ะดะปั ั…ั€ะฐะฝะตะฝะธั ะดะฐะฝะฝั‹ั… ะฒะฝัƒั‚ั€ะตะฝะฝะตะณะพ ัะพัั‚ะพัะฝะธั ั„ะธะปัŒั‚ั€ะฐ ะธ ะฟั€ะพะผะตะถัƒั‚ะพั‡ะฝั‹ั… ะฒั‹ั‡ะธัะปะตะฝะธะน. */
    struct _MSTicker *ticker;   /* ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะพะฑัŠะตะบั‚ ั‚ะธะบะตั€ะฐ, ะบะพั‚ะพั€ั‹ะน ะฝะต ะดะพะปะถะตะฝ ะฑั‹ั‚ัŒ ะฝัƒะปะตะฒั‹ะผ ะบะพะณะดะฐ ะฒั‹ะทั‹ะฒะฐะตั‚ัั ั„ัƒะฝะบั†ะธั process(). */
    /*private attributes, they can be moved and changed at any time*/
    MSList *notify_callbacks; /* ะกะฟะธัะพะบ ะพะฑั€ะฐั‚ะฝั‹ั… ะฒั‹ะทะพะฒะพะฒ, ะธัะฟะพะปัŒะทัƒะตะผั‹ั… ะดะปั ะพะฑั€ะฐะฑะพั‚ะบะธ ัะพะฑั‹ั‚ะธะน ั„ะธะปัŒั‚ั€ะฐ. */
    uint32_t last_tick;       /* ะะพะผะตั€ ะฟะพัะปะตะดะฝะตะณะพ ั‚ะฐะบั‚ะฐ, ะบะพะณะดะฐ ะฒั‹ะฟะพะปะฝัะปัั ะฒั‹ะทะพะฒ process(). */ 
    MSFilterStats *stats;     /* ะกั‚ะฐั‚ะธัั‚ะธะบะฐ ั€ะฐะฑะพั‚ั‹ ั„ะธะปัŒั‚ั€ะฐ.*/
    int postponed_task; /*ะšะพะปะธั‡ะตัั‚ะฒะพ ะพั‚ะปะพะถะตะฝะฝั‹ั… ะทะฐะดะฐั‡. ะะตะบะพั‚ะพั€ั‹ะต ั„ะธะปัŒั‚ั€ั‹ ะผะพะณัƒั‚ ะพั‚ะบะปะฐะดั‹ะฒะฐั‚ัŒ ะพะฑั€ะฐะฑะพั‚ะบัƒ ะดะฐะฝะฝั‹ั… (ะฒั‹ะทะพะฒ process()) ะฝะฐ ะฝะตัะบะพะปัŒะบะพ ั‚ะฐะบั‚ะพะฒ.*/
    bool_t seen;  /* ะคะปะฐะณ, ะบะพั‚ะพั€ั‹ะน ะธัะฟะพะปัŒะทัƒะตั‚ ั‚ะธะบะตั€, ั‡ั‚ะพะฑั‹ ะฟะพะผะตั‡ะฐั‚ัŒ ั‡ั‚ะพ ัั‚ะพั‚ ัะบะทะตะผะฟะปัั€ ั„ะธะปัŒั‚ั€ะฐ ะพะฝ ัƒะถะต ะพะฑัะปัƒะถะธะป ะฝะฐ ะดะฐะฝะฝะพะผ ั‚ะฐะบั‚ะต.*/
};
typedef struct _MSFilter MSFilter;

เช…เชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชฏเซ‹เชœเชจเชพ เช…เชจเซเชธเชพเชฐ เชธเซ€ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฎเชพเช‚ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซเชฏเชพ เชชเช›เซ€ (เชชเชฐเช‚เชคเซ เชŸเชฟเช•เชฐเชจเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซเชฏเซเช‚ เชจเชฅเซ€), เช…เชฎเซ‡ เชคเซเชฏเชพเช‚เชฅเซ€ เชจเชฟเชฐเซเชฆเซ‡เชถเชฟเชค เช†เชฒเซ‡เช– เชฌเชจเชพเชตเซเชฏเซ‹, เชœเซ‡เชจเชพ เช—เชพเช‚เช เซ‹ เชฌเช‚เชงเชพเชฐเชฃเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เช›เซ‡. MSFilter, เช…เชจเซ‡ เชงเชพเชฐ เช เชฒเชฟเช‚เช•เซเชธเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เช›เซ‡ MSQueue.

เชŸเชฟเช•เชฐเชจเซ€ เชชเชกเชฆเชพ เชชเชพเช›เชณเชจเซ€ เชชเซเชฐเชตเซƒเชคเซเชคเชฟเช“

เชœเซเชฏเชพเชฐเซ‡ เชฎเซ‡เช‚ เชคเชฎเชจเซ‡ เช•เชนเซเชฏเซเช‚ เช•เซ‡ เชŸเซ€เช•เชฐ เช เชŸเชฟเช•เชจเชพ เชธเซเชคเซเชฐเซ‹เชค เชฎเชพเชŸเซ‡เชจเซเช‚ เชซเชฟเชฒเซเชŸเชฐ เช›เซ‡, เชคเซ‡ เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเชคเซเชฏ เชจ เชนเชคเซเช‚. เชŸเซ€เช•เชฐ เช เชเช• เชชเชฆเชพเชฐเซเชฅ เช›เซ‡ เชœเซ‡ เช˜เชกเชฟเชฏเชพเชณ เชชเชฐ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ() เชธเชฐเซเช•เชฟเชŸเชจเชพ เชคเชฎเชพเชฎ เชซเชฟเชฒเซเชŸเชฐเซเชธ (เช—เซเชฐเชพเชซ) เชœเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชคเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เช†เชชเชฃเซ‡ เชธเซ€ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฎเชพเช‚ เช—เซเชฐเชพเชซ เชซเชฟเชฒเซเชŸเชฐ เชธเชพเชฅเซ‡ เชŸเชฟเช•เชฐเชจเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซ€เช เช›เซ€เช, เชคเซเชฏเชพเชฐเซ‡ เช…เชฎเซ‡ เชŸเชฟเช•เชฐเชจเซ‡ เชคเซ‡ เช—เซเชฐเชพเชซ เชฌเชคเชพเชตเซ€เช เช›เซ€เช เชœเซ‡ เชคเซ‡ เชนเชตเซ‡เชฅเซ€ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชถเซ‡ เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เช†เชชเชฃเซ‡ เชคเซ‡เชจเซ‡ เชฌเช‚เชง เชจ เช•เชฐเซ€เช. เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชŸเซ€เช•เชฐ เชคเซ‡เชจเซ€ เชธเช‚เชญเชพเชณเชจเซ‡ เชธเซ‹เช‚เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เช—เซเชฐเชพเชซเชจเซ€ เชคเชชเชพเชธ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡เชฎเชพเช‚ เชถเชพเชฎเซ‡เชฒ เชนเซ‹เชฏ เชคเซ‡เชตเชพ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเซ€ เชธเซ‚เชšเชฟเชจเซเช‚ เชธเช‚เช•เชฒเชจ เช•เชฐเซ‡ เช›เซ‡. เชเช• เชœ เชซเชฟเชฒเซเชŸเชฐเชจเซ‡ เชฌเซ‡ เชตเชพเชฐ "เช—เชฃเชคเชฐเซ€" เชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเซ‡ เชถเซ‹เชงเชพเชฏเซ‡เชฒ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชšเซ‡เช•เชฌเซ‹เช•เซเชธ เชฎเซ‚เช•เซ€เชจเซ‡ เชšเชฟเชนเซเชจเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชœเซ‹เชˆ. เชฆเชฐเซ‡เช• เชซเชฟเชฒเซเชŸเชฐเชฎเชพเช‚ เชนเซ‹เชฏ เชคเซ‡เชตเชพ เชฒเชฟเช‚เช• เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชถเซ‹เชง เชนเชพเชฅ เชงเชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เช—เซเชฐเชพเชซเชจเชพ เชคเซ‡เชจเชพ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชชเซเชฐเชตเชพเชธ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชŸเซ€เช•เชฐ เชคเชชเชพเชธ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เชซเชฟเชฒเซเชŸเชฐเซเชธเชฎเชพเช‚ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซเช‚ เชเช• เช›เซ‡ เช•เซ‡ เชœเซ‡ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เซเชธเชจเชพ เชธเซเชคเซเชฐเซ‹เชค เชคเชฐเซ€เช•เซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡. เชœเซ‹ เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชจ เชนเซ‹เชฏ, เชคเซ‹ เช—เซเชฐเชพเชซ เช–เซ‹เชŸเซ‹ เชฎเชพเชจเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชŸเซ€เช•เชฐ เช•เซเชฐเซ‡เชถ เชฅเชพเชฏ เช›เซ‡.

เชœเซ‹ เช—เซเชฐเชพเชซ "เชธเชพเชšเซ‹" เชนเซ‹เชตเชพเชจเซเช‚ เชฌเชนเชพเชฐ เช†เชตเซ‡ เช›เซ‡, เชคเซ‹ เชฆเชฐเซ‡เช• เชฎเชณเซ‡เชฒเชพ เชซเชฟเชฒเซเชŸเชฐ เชฎเชพเชŸเซ‡, เชซเช‚เช•เซเชถเชจเชจเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เชฎเชพเชŸเซ‡ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชชเซ‚เชฐเซเชต เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ(). เชœเชฒเชฆเซ€ เชœ เช†เช—เชณเชจเชพ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช— เชšเช•เซเชฐ (เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡ เชฆเชฐ 10 เชฎเชฟเชฒเซ€เชธเซ‡เช•เชจเซเชกเซ‡) เชฎเชพเชŸเซ‡ เช•เซเชทเชฃ เช†เชตเซ‡ เช›เซ‡, เชŸเชฟเช•เชฐ เชซเช‚เช•เซเชถเชจเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซ‡ เช›เซ‡. เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ() เช…เช—เชพเช‰ เชฎเชณเซ‡เชฒเชพ เชคเชฎเชพเชฎ เชธเซเชคเซเชฐเซ‹เชค เชซเชฟเชฒเซเชŸเชฐเซเชธ เชฎเชพเชŸเซ‡ เช…เชจเซ‡ เชชเช›เซ€ เชฏเชพเชฆเซ€เชฎเชพเช‚เชจเชพ เชฌเชพเช•เซ€เชจเชพ เชซเชฟเชฒเซเชŸเชฐเซเชธ เชฎเชพเชŸเซ‡. เชœเซ‹ เชซเชฟเชฒเซเชŸเชฐเชฎเชพเช‚ เช‡เชจเชชเซเชŸ เชฒเชฟเช‚เช•เซเชธ เชนเซ‹เชฏ, เชคเซ‹ เชซเช‚เช•เซเชถเชจ เชšเชฒเชพเชตเซ‹ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ() เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เช‡เชจเชชเซเชŸ เชฒเชฟเช‚เช• เช•เชคเชพเชฐ เช–เชพเชฒเซ€ เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เชฅเชพเชฏ เช›เซ‡. เช† เชชเช›เซ€, เชคเซ‡ เชธเซ‚เชšเชฟเชฎเชพเช‚เชจเชพ เช†เช—เชฒเชพ เชซเชฟเชฒเซเชŸเชฐ เชชเชฐ เชœเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เช‡เชจเชชเซเชŸ เชฒเชฟเช‚เช•เซเชธ เชธเช‚เชฆเซ‡เชถเชพเช“เชฅเซ€ เชฎเซเช•เซเชค เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชคเซ‡เชจเซ‡ "เชธเซเช•เซเชฐเซ‹เชฒ" เช•เชฐเซ‡ เช›เซ‡. เชธเซ‚เชšเชฟ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชŸเซ€เช•เชฐ เชซเชฟเชฒเซเชŸเชฐเชฅเซ€ เชซเชฟเชฒเซเชŸเชฐ เชคเชฐเชซ เช†เช—เชณ เชตเชงเซ‡ เช›เซ‡. เช† เชšเช•เซเชฐเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ‡ เช›เซ‡.

เชนเชตเซ‡ เช…เชฎเซ‡ เชŸเซเชฏเซเชชเชฒเซเชธ เชชเชฐ เชชเชพเช›เชพ เช†เชตเซ€เชถเซเช‚ เช…เชจเซ‡ เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐเชฎเชพเช‚ เช†เชตเซ€ เชเชจเซเชŸเชฟเชŸเซ€ เช•เซ‡เชฎ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€เชถเซเช‚. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชซเชฟเชฒเซเชŸเชฐเชจเซ€ เช…เช‚เชฆเชฐ เช•เชพเชฐเซเชฏเชฐเชค เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎ เชฆเซเชตเชพเชฐเชพ เชœเชฐเซ‚เชฐเซ€ เชกเซ‡เชŸเชพเชจเซ€ เชฎเชพเชคเซเชฐเชพ เชเช•เชฐเซ‚เชช เชฅเชคเซ€ เชจเชฅเซ€ เช…เชจเซ‡ เชคเซ‡ เช‡เชจเชชเซเชŸ เชชเชฐ เชชเซเชฐเชพเชชเซเชค เชกเซ‡เชŸเชพ เชฌเชซเชฐเชจเชพ เช•เชฆเชจเชพ เช—เซเชฃเชพเช‚เช•เชฎเชพเช‚ เชจเชฅเซ€. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช…เชฎเซ‡ เชเช• เชซเชฟเชฒเซเชŸเชฐ เชฒเช–เซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช เชœเซ‡ เชเชกเชชเซ€ เชซเซ‹เชฐเชฟเชฏเชฐ เชŸเซเชฐเชพเชจเซเชธเชซเซ‹เชฐเซเชฎ เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพ เชฎเซเชœเชฌ เชซเช•เซเชค เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เซเชธ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เชœเซ‡เชจเซ€ เชธเชพเชˆเช เชฌเซ‡เชจเซ€ เชถเช•เซเชคเชฟ เช›เซ‡. เชคเซ‡เชจเซ‡ 512 เช—เชฃเชตเชพ เชฆเซ‹. เชœเซ‹ เชกเซ‡เชŸเชพ เชŸเซ‡เชฒเชฟเชซเซ‹เชจ เชšเซ‡เชจเชฒ เชฆเซเชตเชพเชฐเชพ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซ‹ เช‡เชจเชชเซเชŸ เชชเชฐเชจเชพ เชฆเชฐเซ‡เช• เชธเช‚เชฆเซ‡เชถเชจเซ‹ เชกเซ‡เชŸเชพ เชฌเชซเชฐ เช…เชฎเชจเซ‡ 160 เชธเชฟเช—เซเชจเชฒ เชจเชฎเซ‚เชจเชพเช“ เชฒเชพเชตเชถเซ‡. เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เชœเชฐเซ‚เชฐเซ€ เชฎเชพเชคเซเชฐเชพเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชจ เชนเซ‹เชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เช‡เชจเชชเซเชŸเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชเช•เชคเซเชฐเชฟเชค เชจ เช•เชฐเชตเชพเชจเซเช‚ เช†เช•เชฐเซเชทเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชŸเซ€เช•เชฐ เชธเชพเชฅเซ‡ เช…เชฅเชกเชพเชฎเชฃ เชฅเชถเซ‡, เชœเซ‡ เช‡เชจเชชเซเชŸ เชฒเชฟเช‚เช• เช–เชพเชฒเซ€ เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชซเชฟเชฒเซเชŸเชฐเชจเซ‡ เชธเซเช•เซเชฐเซ‹เชฒ เช•เชฐเชตเชพเชจเซ‹ เช…เชธเชซเชณ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชถเซ‡. เช…เช—เชพเช‰, เช…เชฎเซ‡ เช† เชจเชฟเชฏเชฎเชจเซ‡ เชซเชฟเชฒเซเชŸเชฐเชจเชพ เชคเซเชฐเซ€เชœเชพ เชธเชฟเชฆเซเชงเชพเช‚เชค เชคเชฐเซ€เช•เซ‡ เชจเชฟเชฏเซเช•เซเชค เช•เชฐเซเชฏเซ‹ เชนเชคเซ‹. เช† เชธเชฟเชฆเซเชงเชพเช‚เชค เช…เชจเซเชธเชพเชฐ, เชซเชฟเชฒเซเชŸเชฐเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ() เชซเช‚เช•เซเชถเชจเซ‡ เช‡เชจเชชเซเชŸ เช•เชคเชพเชฐเชฎเชพเช‚เชฅเซ€ เชคเชฎเชพเชฎ เชกเซ‡เชŸเชพ เชฒเซ‡เชตเซ‹ เชœเซ‹เชˆเช.

เชตเชงเซเชฎเชพเช‚, เช‡เชจเชชเซเชŸเชฎเชพเช‚เชฅเซ€ เชซเช•เซเชค 512 เชจเชฎเซ‚เชจเชพ เชฒเซ‡เชตเชพเชจเซเช‚ เชถเช•เซเชฏ เชฌเชจเชถเซ‡ เชจเชนเซ€เช‚, เช•เชพเชฐเชฃ เช•เซ‡ เชคเชฎเซ‡ เชซเช•เซเชค เชธเช‚เชชเซ‚เชฐเซเชฃ เชฌเซเชฒเซ‹เช•เซเชธ เชฒเชˆ เชถเช•เซ‹ เช›เซ‹, เชเชŸเชฒเซ‡ เช•เซ‡. เชซเชฟเชฒเซเชŸเชฐเซ‡ 640 เชจเชฎเซ‚เชจเชพเช“ เชฒเซ‡เชตเชพ เชชเชกเชถเซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚เชฅเซ€ 512เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡, เชฌเชพเช•เซ€เชจเซ‹ เชกเซ‡เชŸเชพเชจเซ‹ เชจเชตเซ‹ เชญเชพเช— เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ. เช†เชฎ, เช…เชฎเชพเชฐเชพ เชซเชฟเชฒเซเชŸเชฐเซ‡, เชคเซ‡เชจเชพ เชฎเซเช–เซเชฏ เช•เชพเชฐเซเชฏ เช‰เชชเชฐเชพเช‚เชค, เช‡เชจเชชเซเชŸ เชกเซ‡เชŸเชพเชจเชพ เชฎเชงเซเชฏเชตเชฐเซเชคเซ€ เชธเช‚เช—เซเชฐเชน เชฎเชพเชŸเซ‡ เชธเชนเชพเชฏเช• เช•เซเชฐเชฟเชฏเชพเช“ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเซ€ เช†เชตเชถเซเชฏเช• เช›เซ‡. เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐเชจเชพ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เช เช…เชจเซ‡ เช† เชธเชพเชฎเชพเชจเซเชฏ เชธเชฎเชธเซเชฏเชพเชจเชพ เช‰เช•เซ‡เชฒ เชฎเชพเชŸเซ‡ เชเช• เชตเชฟเชถเชฟเชทเซเชŸ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชตเชฟเช•เชธเชพเชตเซ€ เช›เซ‡ - MSBufferizer (เชฌเชซเชฐเชฐ), เชœเซ‡ เชŸเซเชฏเซเชชเชฒเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช† เชธเชฎเชธเซเชฏเชพเชจเซ‡ เชนเชฒ เช•เชฐเซ‡ เช›เซ‡.

เชฌเชซเชฐเชพเช‡เชเชฐ (MSBufferizer)

เช† เชเช• เช‘เชฌเซเชœเซ‡เช•เซเชŸ เช›เซ‡ เชœเซ‡ เชซเชฟเชฒเซเชŸเชฐเชจเซ€ เช…เช‚เชฆเชฐ เช‡เชจเชชเซเชŸ เชกเซ‡เชŸเชพ เชเช•เช เชพ เช•เชฐเชถเซ‡ เช…เชจเซ‡ เชซเชฟเชฒเซเชŸเชฐ เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเซ€ เชฎเชพเชนเชฟเชคเซ€เชจเซ€ เชฎเชพเชคเซเชฐเชพ เชนเซ‹เชฏ เชคเซ‡เชŸเชฒเซ€ เชœเชฒเซเชฆเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‡ เชธเชฌเชฎเชฟเชŸ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเชถเซ‡. เชœเซเชฏเชพเชฐเซ‡ เชฌเชซเชฐ เชกเซ‡เชŸเชพ เชเช•เช เซเช‚ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เชนเซ‹เชฏ, เชคเซเชฏเชพเชฐเซ‡ เชซเชฟเชฒเซเชŸเชฐ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเชจเซ€ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช— เชชเชพเชตเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ, เชจเชฟเชทเซเช•เซเชฐเชฟเชฏ เชฎเซ‹เชกเชฎเชพเช‚ เช•เชพเชฐเซเชฏ เช•เชฐเชถเซ‡. เชชเชฐเช‚เชคเซ เชœเชฒเชฆเซ€ เชœ เชฌเชซเชฐเชฐเชฎเชพเช‚เชฅเซ€ เชฐเซ€เชกเชฟเช‚เช— เชซเช‚เช•เซเชถเชจ เชถเซ‚เชจเซเชฏ เชธเชฟเชตเชพเชฏเชจเซเช‚ เชฎเซ‚เชฒเซเชฏ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡, เชซเชฟเชฒเซเชŸเชฐเชจเซเช‚ เชชเซเชฐเซ‹เชธเซ‡เชธ() เชซเช‚เช•เซเชถเชจ เชฌเชซเชฐเชฐ เชชเชพเชธเซ‡เชฅเซ€ เชœเชฐเซ‚เชฐเซ€ เช•เชฆเชจเชพ เชญเชพเช—เซ‹เชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฒเซ‡เชตเชพเชจเซเช‚ เช…เชจเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡, เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เชคเซ‡ เชธเชฎเชพเชชเซเชค เชจ เชฅเชพเชฏ.
เชกเซ‡เชŸเชพ เช•เซ‡ เชœเซ‡ เชนเชœเซ เชธเซเชงเซ€ เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€ เชคเซ‡ เชŸเซเชฏเซเชชเชฒเชจเชพ เชชเซเชฐเชฅเชฎ เชคเชคเซเชต เชคเชฐเซ€เช•เซ‡ เชฌเชซเชฐเชฎเชพเช‚ เชฐเชนเซ‡ เช›เซ‡, เชœเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช‡เชจเชชเซเชŸ เชกเซ‡เชŸเชพเชจเชพ เช…เชจเซเช—เชพเชฎเซ€ เชฌเซเชฒเซ‹เช•เซเชธ เชœเซ‹เชกเชพเชฏเซ‡เชฒเชพ เช›เซ‡.

เชฎเชพเชณเช–เซเช‚ เชœเซ‡ เชฌเชซเชฐเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡:

struct _MSBufferizer{
queue_t q; /* ะžั‡ะตั€ะตะดัŒ ัะพะพะฑั‰ะตะฝะธะน. */
int size; /* ะกัƒะผะผะฐั€ะฝั‹ะน ั€ะฐะทะผะตั€ ะดะฐะฝะฝั‹ั… ะฝะฐั…ะพะดัั‰ะธั…ัั ะฒ ะฑัƒั„ะตั€ะธะทะฐั‚ะพั€ะต ะฒ ะดะฐะฝะฝั‹ะน ะผะพะผะตะฝั‚. */
};
typedef struct _MSBufferizer MSBufferizer;

MSBufferizer เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เช•เชพเชฐเซเชฏเซ‹

เชจเชตเซ‹ เชฌเชซเชฐ เชฆเชพเช–เชฒเซ‹ เชฌเชจเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡:

MSBufferizer * ms_bufferizer_new(void);

เชฎเซ‡เชฎเชฐเซ€ เชซเชพเชณเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชฎเชพเช‚ เชชเซเชฐเชพเชฐเช‚เชญ เชฅเชพเชฏ เช›เซ‡ ms_buferizer_init() เช…เชจเซ‡ เชเช• เชจเชฟเชฐเซเชฆเซ‡เชถเช• เชชเชฐเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เช•เชพเชฐเซเชฏ:

void ms_bufferizer_init(MSBufferizer *obj); 

เช•เชคเชพเชฐ เชถเชฐเซ‚ เชฅเชˆ เชฐเชนเซ€ เช›เซ‡ q, เช•เซเชทเซ‡เชคเซเชฐ เช•เชฆ เชถเซ‚เชจเซเชฏ เชชเชฐ เชธเซ‡เชŸ เช›เซ‡.

เชธเช‚เชฆเซ‡เชถ เช‰เชฎเซ‡เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡:

void ms_bufferizer_put(MSBufferizer *obj, mblk_t *m); 

เชธเช‚เชฆเซ‡เชถ m เช•เชคเชพเชฐเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เซเชธเชจเซเช‚ เช—เชฃเชคเชฐเซ€ เช•เชฐเซ‡เชฒ เช•เชฆ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เชฆ.

เชฒเชฟเช‚เช• เชกเซ‡เชŸเชพ เช•เชคเชพเชฐเชฎเชพเช‚เชฅเซ€ เชคเชฎเชพเชฎ เชธเช‚เชฆเซ‡เชถเชพเช“ เชฌเชซเชฐ เชชเชฐ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช q:

void ms_bufferizer_put_from_queue(MSBufferizer *obj, MSQueue *q);   

เชฒเชฟเช‚เช• เชชเชฐเชฅเซ€ เชธเช‚เชฆเซ‡เชถเชพเช“ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช q เชฌเชซเชฐเชฎเชพเช‚ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ ms_buferizer_put().

เชฌเชซเชฐเชฎเชพเช‚เชฅเซ€ เชตเชพเช‚เชšเชจ:

int ms_bufferizer_read(MSBufferizer *obj, uint8_t *data, int datalen); 

เชœเซ‹ เชฌเชซเชฐเชฎเชพเช‚ เชธเช‚เชšเชฟเชค เชกเซ‡เชŸเชพเชจเซเช‚ เช•เชฆ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‡เชฒ เชกเซ‡เชŸเชพ เช•เชฐเชคเชพ เช“เช›เซเช‚ เชนเซ‹เชฏ (เชกเซ‡เชŸเชพเชฒเซ‡เชจ), เชชเช›เซ€ เชซเช‚เช•เซเชถเชจ เชถเซ‚เชจเซเชฏ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡, เชกเซ‡เชŸเชพ เชกเซ‡เชŸเชพ เชชเชฐ เช•เซ‰เชชเชฟ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ‹ เชจเชฅเซ€. เชจเชนเชฟเช‚เชคเชฐ, เชฌเชซเชฐเชฎเชพเช‚ เชธเซเชฅเชฟเชค เชŸเซเชฏเซเชชเชฒเซเชธเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพเชจเซ€ เช•เซเชฐเชฎเชฟเช• เชจเช•เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชจเช•เชฒ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชŸเซเชฏเซเชชเชฒ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฎเซ‡เชฎเชฐเซ€ เชฎเซเช•เซเชค เชฅเชพเชฏ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชกเซ‡เชŸเชพเชฒเซ‡เชจ เชฌเชพเช‡เชŸเซเชธ เช•เซ‰เชชเชฟ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เช•เซ‰เชชเชฟ เช•เชฐเชตเชพเชจเซเช‚ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡. เชœเซ‹ เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชจเซ€ เชฎเชงเซเชฏเชฎเชพเช‚ เชœเช—เซเชฏเชพ เชธเชฎเชพเชชเซเชค เชฅเชˆ เชœเชพเชฏ, เชคเซ‹ เช† เชธเช‚เชฆเซ‡เชถเชฎเชพเช‚, เชกเซ‡เชŸเชพ เชฌเซเชฒเซ‹เช•เชจเซ‡ เชฌเชพเช•เซ€เชจเชพ เชฌเชฟเชจเช•เซ‹เชชเซ€ เช•เชฐเซ‡เชฒเชพ เชญเชพเช—เชฎเชพเช‚ เช˜เชŸเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช†เช—เชฒเซ€ เชตเช–เชคเซ‡ เชคเชฎเซ‡ เช•เซ‰เชฒ เช•เชฐเชถเซ‹, เช† เชฌเชฟเช‚เชฆเซเชฅเซ€ เช•เซ‰เชชเชฟ เช•เชฐเชตเชพเชจเซเช‚ เชšเชพเชฒเซ เชฐเชนเซ‡เชถเซ‡.

เชนเชพเชฒเชฎเชพเช‚ เชฌเชซเชฐเชฎเชพเช‚ เช‰เชชเชฒเชฌเซเชง เชกเซ‡เชŸเชพเชจเซ€ เชฎเชพเชคเซเชฐเชพ เชตเชพเช‚เชšเชตเซ€:

int ms_bufferizer_get_avail(MSBufferizer *obj); 

เช•เซเชทเซ‡เชคเซเชฐ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡ เช•เชฆ เชฌเชซเชฐเชฐ

เชฌเชซเชฐเชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซ‹ เชญเชพเช— เช•เชพเชขเซ€ เชจเชพเช–เซ‹:

void ms_bufferizer_skip_bytes(MSBufferizer *obj, int bytes);

เชกเซ‡เชŸเชพเชจเชพ เชฌเชพเช‡เชŸเซเชธเชจเซ€ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชธเช‚เช–เซเชฏเชพ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช…เชจเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชธเซŒเชฅเซ€ เชœเซ‚เชจเซ‹ เชกเซ‡เชŸเชพ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡.

เชฌเชซเชฐเชฎเชพเช‚เชจเชพ เชฌเชงเชพ เชธเช‚เชฆเซ‡เชถเชพเช“ เช•เชพเชขเซ€ เชจเชพเช–เชตเซเช‚:

void ms_bufferizer_flush(MSBufferizer *obj); 

เชกเซ‡เชŸเชพ เช•เชพเช‰เชจเซเชŸเชฐ เชถเซ‚เชจเซเชฏ เชชเชฐ เชฐเซ€เชธเซ‡เชŸ เชฅเชฏเซ‡เชฒ เช›เซ‡.

เชฌเชซเชฐเชฎเชพเช‚เชจเชพ เชฌเชงเชพ เชธเช‚เชฆเซ‡เชถเชพเช“ เช•เชพเชขเซ€ เชจเชพเช–เชตเซเช‚:

void ms_bufferizer_uninit(MSBufferizer *obj); 

เช•เชพเช‰เชจเซเชŸเชฐ เชฐเซ€เชธเซ‡เชŸ เชฅเชฏเซ‡เชฒ เชจเชฅเซ€.

เชฌเชซเชฐเชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเซ€เชจเซ‡ เชฎเซ‡เชฎเชฐเซ€เชจเซ‡ เชฎเซเช•เซเชค เช•เชฐเชตเซ€:

void ms_bufferizer_destroy(MSBufferizer *obj);  

เชฌเชซเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เช•เซ‡เชŸเชฒเชพเช• เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเชพ เชธเซเชคเซเชฐเซ‹เชค เช•เซ‹เชกเชฎเชพเช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, MS_L16_ENC เชซเชฟเชฒเซเชŸเชฐเชฎเชพเช‚, เชœเซ‡ เชจเซ‡เชŸเชตเชฐเซเช• เช“เชฐเซเชกเชฐเชฅเซ€ เชนเซ‹เชธเซเชŸ เช“เชฐเซเชกเชฐเชฎเชพเช‚ เชจเชฎเซ‚เชจเชพเช“เชฎเชพเช‚ เชฌเชพเช‡เชŸเซเชธเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เช—เซ‹เช เชตเซ‡ เช›เซ‡: l16.c

เชนเชตเซ‡ เชชเช›เซ€เชจเชพ เชฒเซ‡เช–เชฎเชพเช‚, เช…เชฎเซ‡ เชŸเซ€เช•เชฐ เชชเชฐเชจเชพ เชญเชพเชฐเชจเซ‹ เช…เช‚เชฆเชพเชœ เช•เชพเชขเชตเชพเชจเชพ เชฎเซเชฆเซเชฆเชพ เช…เชจเซ‡ เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐเชฎเชพเช‚ เชตเชงเซ เชชเชกเชคเชพ เช•เชฎเซเชชเซเชฏเซเชŸเชฟเช‚เช— เชฒเซ‹เชกเชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเชพเชจเซ€ เชฐเซ€เชคเซ‹ เชœเซ‹เชˆเชถเซเช‚.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹