Mediastreamer2 VoIP เจ‡เฉฐเจœเจฃ เจฆเฉ€ เจชเฉœเจšเฉ‹เจฒ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆเฅค เจญเจพเจ— 11

เจฒเฉ‡เจ– เจธเจฎเฉฑเจ—เจฐเฉ€ เจฎเฉ‡เจฐเฉ‡ เจคเฉ‹เจ‚ เจฒเจˆ เจ—เจˆ เจนเฉˆ เจœเจผเฉˆเจจ เจšเฉˆเจจเจฒ.

Mediastreamer2 VoIP เจ‡เฉฐเจœเจฃ เจฆเฉ€ เจชเฉœเจšเฉ‹เจฒ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆเฅค เจญเจพเจ— 11

เจกเจพเจŸเจพ เจ…เฉฐเจฆเฉ‹เจฒเจจ เจตเจฟเจงเฉ€

  • เจกเจพเจŸเจพ เจฌเจฒเจพเจ• dblk_t
  • เจธเฉเจจเฉ‡เจนเจพ mblk_t
  • mblk_t เจธเฉเจจเฉ‡เจนเจฟเจ†เจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจซเฉฐเจ•เจธเจผเจจ
  • เจ•เจคเจพเจฐ เจ•เจคเจพเจฐ_t
  • queues queue_t เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจซเฉฐเจ•เจธเจผเจจ
  • เจ•เจจเฉˆเจ•เจŸ เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจซเจฟเจฒเจŸเจฐ
  • เจกเจพเจŸเจพ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจ—เฉเจฐเจพเจซ เจฆเจพ เจธเจฟเจ—เจจเจฒ เจชเฉเจ†เจ‡เฉฐเจŸ
  • เจชเจฐเจฆเฉ‡ เจชเจฟเฉฑเจ›เฉ‡ เจŸเจฟเจ•เจฐ เจฆเฉ€เจ†เจ‚ เจ—เจคเฉ€เจตเจฟเจงเฉ€เจ†เจ‚
  • เจฌเจซเจฐเจพเจˆเจœเจผเจฐ (MSBufferizer)
  • MSBufferizer เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจซเฉฐเจ•เจธเจผเจจ

เจชเจฟเจ›เจฒเฉ‡ เจตเจฟเฉฑเจš เจฒเฉ‡เจ– เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเจพ เจซเจฟเจฒเจŸเจฐ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจนเฉˆเฅค เจ‡เจน เจฒเฉ‡เจ– เจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎเจฐ เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจตเจฟเจšเจ•เจพเจฐ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฎเฉ‚เจต เจ•เจฐเจจ เจฒเจˆ เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจตเจฟเจงเฉ€ 'เจคเฉ‡ เจงเจฟเจ†เจจ เจ•เฉ‡เจ‚เจฆเจฐเจฟเจค เจ•เจฐเฉ‡เจ—เจพเฅค เจ‡เจน เจคเฉเจนเจพเจจเฉ‚เฉฐ เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš เจ˜เฉฑเจŸ เจฎเจฟเจนเจจเจค เจจเจพเจฒ เจตเจงเฉ€เจ† เจซเจฟเจฒเจŸเจฐ เจฒเจฟเจ–เจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค

เจกเจพเจŸเจพ เจ…เฉฐเจฆเฉ‹เจฒเจจ เจตเจฟเจงเฉ€

เจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎเจฐ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจฎเฉ‚เจตเจฎเฉˆเจ‚เจŸ เจจเฉ‚เฉฐ เจขเจพเจ‚เจšเฉ‡ เจฆเฉเจ†เจฐเจพ เจตเจฐเจฃเจฟเจค เจ•เจคเจพเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ•เจคเจพเจฐ_เจŸเฉ€. เจตเจฐเจ—เฉ‡ เจธเฉเจจเฉ‡เจนเจฟเจ†เจ‚ เจฆเฉ€เจ†เจ‚ เจธเจคเจฐเจพเจ‚ mblk_t, เจœเจฟเจธ เจตเจฟเฉฑเจš เจ†เจชเจฃเฉ‡ เจ†เจช เจตเจฟเฉฑเจš เจธเจฟเจ—เจจเจฒ เจกเฉ‡เจŸเจพ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจธเจฟเจฐเจซ เจชเจฟเจ›เจฒเฉ‡, เจ…เจ—เจฒเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฌเจฒเจพเจ• เจจเจพเจฒ เจฒเจฟเฉฐเจ• เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจฎเฉˆเจ‚ เจ–เจพเจธ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เจธ เจ—เฉฑเจฒ 'เจคเฉ‡ เจœเจผเฉ‹เจฐ เจฆเฉ‡เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจ‰เจธเฉ‡ เจ•เจฟเจธเจฎ เจฆเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ‡ เจฒเจฟเฉฐเจ• เจฒเจˆ เจ‡เฉฑเจ• เจ–เฉ‡เจคเจฐ เจตเฉ€ เจนเฉˆ, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเฉเจจเฉ‡เจนเจฟเจ†เจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ เจฒเจฟเฉฐเจ•เจก เจธเฉ‚เจšเฉ€ เจจเฉ‚เฉฐ เจธเฉฐเจ—เจ เจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจ…เจœเจฟเจนเฉ€ เจธเฉ‚เจšเฉ€ เจฆเฉเจ†เจฐเจพ เจธเฉฐเจฏเฉเจ•เจค เจธเฉฐเจฆเฉ‡เจธเจผเจพเจ‚ เจฆเฉ‡ เจธเจฎเฉ‚เจน เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจŸเฉ‚เจชเจฒ เจ•เจนเจพเจ‚เจ—เฉ‡เฅค เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚, เจ•เจคเจพเจฐ เจฆเจพ เจ•เฉ‹เจˆ เจตเฉ€ เจคเฉฑเจค เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ เจธเฉเจจเฉ‡เจนเจพ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ mblk_t, เจ…เจคเฉ‡ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ tuple เจฆเจพ เจธเจฟเจฐ 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, m1_1, m1_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 null) เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจ‡เจธ เจธเฉเจจเฉ‡เจนเฉ‡ เจฒเจˆ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเฉ‡เจ—เจพ addendb().

เจคเฉเจธเฉ€เจ‚ เจซเฉฐเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• เจธเฉฐเจฆเฉ‡เจธเจผ เจœเจพเจ‚ เจŸเฉ‚เจชเจฒ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจ†เจ•เจพเจฐ เจฆเจพ เจชเจคเจพ เจฒเจ—เจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

int msgdsize(const mblk_t *mp);

เจ‡เจน เจŸเฉ‚เจชเจฒ เจตเจฟเฉฑเจš เจธเจพเจฐเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผเจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉ‚เจช เจ•เจฐเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจธเฉฐเจฆเฉ‡เจธเจผเจพเจ‚ เจฆเฉ‡ เจกเฉ‡เจŸเจพ เจฌเจซเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจฆเฉ€ เจ•เฉเฉฑเจฒ เจฎเจพเจคเจฐเจพ เจตเจพเจชเจธ เจ•เจฐเฉ‡เจ—เจพเฅค เจนเจฐเฉ‡เจ• เจธเฉเจจเฉ‡เจนเฉ‡ เจฒเจˆ, เจกเฉ‡เจŸเจพ เจฆเฉ€ เจฎเจพเจคเจฐเจพ เจฆเฉ€ เจ—เจฃเจจเจพ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ:

 mp->b_wptr - mp->b_rptr

เจฆเฉ‹ เจŸเฉ‚เจชเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฒเจˆ, เจซเฉฐเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹:

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

เจ‰เจน เจŸเฉ‚เจชเจฒ เจœเฉ‹เฉœเจฆเฉ€ เจนเฉˆ newm tuple เจฆเฉ€ เจชเฉ‚เจ› เจจเฉ‚เฉฐ mp เจ…เจคเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจตเจพเจฒเฉ‡ เจŸเฉ‚เจชเจฒ เจฆเฉ‡ เจ†เจ–เจฐเฉ€ เจธเฉฐเจฆเฉ‡เจธเจผ เจฒเจˆ เจ‡เฉฑเจ• เจชเฉเจ†เจ‡เฉฐเจŸเจฐ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจœเฉ‡ เจœเจฐเฉ‚เจฐเฉ€ เจนเฉ‹เจตเฉ‡, เจคเจพเจ‚ เจ‡เฉฑเจ• เจŸเฉ‚เจชเจฒ เจจเฉ‚เฉฐ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจ‡เฉฑเจ• เจฌเจฒเจพเจ• เจจเจพเจฒ เจ‡เฉฑเจ• เจธเฉฐเจฆเฉ‡เจธเจผ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ; เจ‡เจน เจซเฉฐเจ•เจธเจผเจจ เจฆเฉเจ†เจฐเจพ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ:

void msgpullup(mblk_t *mp,int len);

เจœเฉ‡เจ•เจฐ เจฆเจฒเฉ€เจฒ len -1 เจนเฉˆ, เจซเจฟเจฐ เจจเจฟเจฐเจงเจพเจฐเจค เจฌเจซเจฐ เจฆเจพ เจ†เจ•เจพเจฐ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจœเฉ‡ len เจ‡เฉฑเจ• เจธเจ•เจพเจฐเจพเจคเจฎเจ• เจธเฉฐเจ–เจฟเจ† เจนเฉˆ, เจ‡เจธ เจ†เจ•เจพเจฐ เจฆเจพ เจ‡เฉฑเจ• เจฌเจซเจฐ เจฌเจฃเจพเจ‡เจ† เจœเจพเจตเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจŸเฉ‚เจชเจฒ เจธเฉเจจเฉ‡เจนเจพ เจกเฉ‡เจŸเจพ เจ‡เจธ เจตเจฟเฉฑเจš เจ•เจพเจชเฉ€ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค เจœเฉ‡เจ•เจฐ เจฌเจซเจฐ เจ–เจคเจฎ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจจเจ•เจฒ เจ•เจฐเจจเจพ เจ‰เฉฑเจฅเฉ‡ เจนเฉ€ เจฌเฉฐเจฆ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เจพเฅค เจŸเฉ‚เจชเจฒ เจฆเจพ เจชเจนเจฟเจฒเจพ เจธเฉเจจเฉ‡เจนเจพ เจ•เจพเจชเฉ€ เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจจเจตเฉ‡เจ‚ เจ†เจ•เจพเจฐ เจฆเจพ เจฌเจซเจฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‡เจ—เจพเฅค เจฌเจพเจ•เฉ€ เจฌเจšเฉ‡ เจธเฉเจจเฉ‡เจนเฉ‡ เจฎเจฟเจŸเจพ เจฆเจฟเฉฑเจคเฉ‡ เจœเจพเจฃเจ—เฉ‡ เจ…เจคเฉ‡ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจนเฉ€เจช เจตเจฟเฉฑเจš เจตเจพเจชเจธ เจ† เจœเจพเจตเฉ‡เจ—เฉ€เฅค

เจ‡เฉฑเจ• เจฌเจฃเจคเจฐ เจจเฉ‚เฉฐ เจฎเจฟเจŸเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ mblk_t เจกเจพเจŸเจพ เจฌเจฒเจพเจ• เจฆเฉ€ เจธเฉฐเจฆเจฐเจญ เจ—เจฟเจฃเจคเฉ€ เจจเฉ‚เฉฐ เจงเจฟเจ†เจจ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจœเฉ‡เจ•เจฐ, เจ•เจพเจฒ เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ freeb() เจ‡เจน เจœเจผเฉ€เจฐเฉ‹ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจซเจฟเจฐ เจกเฉ‡เจŸเจพ เจฌเจซเจฐ เจจเฉ‚เฉฐ เจ‰เจฆเจพเจนเจฐเจฃ เจฆเฉ‡ เจจเจพเจฒ เจฎเจฟเจŸเจพ เจฆเจฟเฉฑเจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ mblk_t, เจœเฉ‹ เจ‡เจธ เจตเฉฑเจฒ เจ‡เจธเจผเจพเจฐเจพ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ‡เฉฑเจ• เจจเจตเฉ‡เจ‚ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ‡ เจ–เฉ‡เจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจเจพ:

void mblk_init(mblk_t *mp);

เจธเฉฐเจฆเฉ‡เจธเจผ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจฆเจพ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจŸเฉเจ•เฉœเจพ เจœเฉ‹เฉœเจจเจพ:

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

เจœเฉ‡เจ•เจฐ เจจเจตเจพเจ‚ เจกเฉ‡เจŸเจพ เจฎเฉˆเจธเฉ‡เจœ เจกเฉ‡เจŸเจพ เจฌเจซเจฐ เจฆเฉ€ เจ–เจพเจฒเฉ€ เจฅเจพเจ‚ เจตเจฟเฉฑเจš เจซเจฟเฉฑเจŸ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจ†เจ•เจพเจฐ เจฆเฉ‡ เจ‡เฉฑเจ• เจฌเจซเจฐ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจธเฉเจจเฉ‡เจนเจพ เจธเฉฐเจฆเฉ‡เจธเจผ เจจเจพเจฒ เจœเฉเฉœเจฟเจ† เจนเฉ‹เจ‡เจ† เจนเฉˆ (เจœเฉ‹เฉœเฉ‡ เจ—เจ เจธเฉฐเจฆเฉ‡เจธเจผ เจฒเจˆ เจ‡เฉฑเจ• เจชเฉเจ†เจ‡เฉฐเจŸเจฐ เจชเจนเจฟเจฒเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจตเจฟเฉฑเจš เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ) เจ…เจคเฉ‡ เจธเฉเจจเฉ‡เจนเจพ เจ‡เฉฑเจ• tuple เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฆเจพ เจนเฉˆ.

เจ‡เฉฑเจ• เจŸเฉ‚เจชเจฒ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจ‡เฉฑเจ• เจŸเฉเจ•เฉœเฉ‡ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ:

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

เจซเฉฐเจ•เจธเจผเจจ เจ‡เฉฑเจ• เจฒเฉ‚เจช เจตเจฟเฉฑเจš appendb() เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจฆเฉ‹ เจŸเฉ‚เจชเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเจฟเฉฑเจš เจœเฉ‹เฉœเจจเจพ:

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);

เจŸเฉ‚เจชเจฒ เจฆเฉ‡ เจคเฉฑเจค เจซเฉฐเจ•เจธเจผเจจ เจฆเฉเจ†เจฐเจพ เจจเจ•เจฒ เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ copyb().

เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเฉ‡ เจฆเฉ€ เจ‡เฉฑเจ• เจ†เจธเจพเจจ เจ•เจพเจชเฉ€ เจฌเจฃเจพเจ“ 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);

เจœเฉ‡ เจฆเจฒเฉ€เจฒ 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 เจคเฉฑเจค เจฆเฉ‡ เจ…เฉฑเจ—เฉ‡ เจชเจพเจˆ เจ—เจˆ EMP. เจœเฉ‡ EMP=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.

เจชเจฐเจฆเฉ‡ เจชเจฟเฉฑเจ›เฉ‡ เจŸเจฟเจ•เจฐ เจฆเฉ€เจ†เจ‚ เจ—เจคเฉ€เจตเจฟเจงเฉ€เจ†เจ‚

เจœเจฆเฉ‹เจ‚ เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเฉฑเจธเจฟเจ† เจ•เจฟ เจŸเจฟเจ•เจฐ เจŸเจฟเฉฑเจ• เจฆเฉ‡ เจธเจฐเฉ‹เจค เจฒเจˆ เจ‡เฉฑเจ• เจซเจฟเจฒเจŸเจฐ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจชเฉ‚เจฐเฉ€ เจธเฉฑเจšเจพเจˆ เจจเจนเฉ€เจ‚ เจธเฉ€เฅค เจ‡เฉฑเจ• เจŸเจฟเจ•เจฐ เจ‡เฉฑเจ• เจตเจธเจคเฉ‚ เจนเฉˆ เจœเฉ‹ เจ˜เฉœเฉ€ 'เจคเฉ‡ เจซเฉฐเจ•เจธเจผเจจ เจšเจฒเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†() เจธเจฐเจ•เจŸ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจซเจฟเจฒเจŸเจฐ (เจ—เฉเจฐเจพเจซ) เจœเจฟเจธ เจจเจพเจฒ เจ‡เจน เจœเฉเฉœเจฟเจ† เจนเฉ‹เจ‡เจ† เจนเฉˆเฅค เจœเจฆเฉ‹เจ‚ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• C เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเจฟเจ•เจฐ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ—เฉเจฐเจพเจซ เจซเจฟเจฒเจŸเจฐ เจจเจพเจฒ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจŸเจฟเจ•เจฐ เจจเฉ‚เฉฐ เจ‰เจน เจ—เฉเจฐเจพเจซ เจฆเจฟเจ–เจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธเจจเฉ‚เฉฐ เจ‡เจน เจนเฉเจฃ เจคเฉ‹เจ‚ เจ‰เจฆเฉ‹เจ‚ เจคเฉฑเจ• เจ•เฉฐเจŸเจฐเฉ‹เจฒ เจ•เจฐเฉ‡เจ—เจพ เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจฌเฉฐเจฆ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจ•เจจเฉˆเจ•เจŸ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจŸเจฟเจ•เจฐ เจ†เจชเจฃเฉ€ เจฆเฉ‡เจ–เจญเจพเจฒ เจฒเจˆ เจธเฉŒเจ‚เจชเฉ‡ เจ—เจ เจ—เฉเจฐเจพเจซ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ, เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ‡เจน เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจ‡เฉฑเจ•เฉ‹ เจซเจฟเจฒเจŸเจฐ เจจเฉ‚เฉฐ เจฆเฉ‹ เจตเจพเจฐ "เจ—เจฃเจจเจพ" เจจเจพ เจ•เจฐเจจ เจฒเจˆ, เจ‡เจน เจ–เฉ‹เจœเฉ‡ เจ—เจ เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจšเฉˆเจ•เจฌเจพเจ•เจธ เจฐเฉฑเจ– เจ•เฉ‡ เจจเจฟเจธเจผเจพเจจเจฌเฉฑเจง เจ•เจฐเจฆเจพ เจนเฉˆ เจจเฉ‚เฉฐ เจตเฉ‡เจ–เจฟเจ†. เจ–เฉ‹เจœ เจ‰เจนเจจเจพเจ‚ เจฒเจฟเฉฐเจ• เจŸเฉ‡เจฌเจฒเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ เจœเฉ‹ เจนเจฐเฉ‡เจ• เจซเจฟเจฒเจŸเจฐ เจ•เฉ‹เจฒ เจนเจจเฅค

เจ—เฉเจฐเจพเจซ เจฆเฉ‡ เจ†เจชเจฃเฉ‡ เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจฆเฉŒเจฐเฉ‡ เจฆเฉŒเจฐเจพเจจ, เจŸเจฟเจ•เจฐ เจœเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เฉ€ เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ‡เฉฑเจ• เจ…เจœเจฟเจนเจพ เจนเฉˆ เจœเฉ‹ เจกเฉ‡เจŸเจพ เจฌเจฒเจพเจ•เจพเจ‚ เจฆเฉ‡ เจธเจฐเฉ‹เจค เจตเจœเฉ‹เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจ•เฉ‹เจˆ เจตเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจคเจพเจ‚ เจ—เฉเจฐเจพเจซ เจจเฉ‚เฉฐ เจ—เจฒเจค เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจŸเจฟเจ•เจฐ เจ•เจฐเฉˆเจธเจผ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจœเฉ‡เจ•เจฐ เจ—เฉเจฐเจพเจซ "เจธเจนเฉ€" เจจเจฟเจ•เจฒเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจนเจฐเฉ‡เจ• เจฒเฉฑเจญเฉ‡ เจ—เจ เจซเจฟเจฒเจŸเจฐ เจฒเจˆ, เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€เจ•เจฐเจฃ เจฒเจˆ เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจชเฉเจฐเฉ€เจชเฉเจฐเฉ‹เจธเฉˆเจธ(). เจœเจฟเจตเฉ‡เจ‚ เจนเฉ€ เจ…เจ—เจฒเฉ‡ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจšเฉฑเจ•เจฐ เจฒเจˆ เจชเจฒ เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆ (เจกเจฟเจซเฉŒเจฒเจŸ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจนเจฐ 10 เจฎเจฟเจฒเฉ€เจธเจ•เจฟเฉฐเจŸ), เจŸเจฟเจ•เจฐ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจฆเจพ เจนเฉˆ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†() เจธเจพเจฐเฉ‡ เจชเจนเจฟเจฒเจพเจ‚ เจฎเจฟเจฒเฉ‡ เจธเจฐเฉ‹เจค เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจฒเจˆ, เจ…เจคเฉ‡ เจซเจฟเจฐ เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš เจฌเจพเจ•เฉ€ เจฌเจšเฉ‡ เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจฒเจˆเฅค เจœเฉ‡เจ•เจฐ เจซเจฟเจฒเจŸเจฐ เจตเจฟเฉฑเจš เจ‡เจจเจชเฉเจŸ เจฒเจฟเฉฐเจ• เจนเจจ, เจคเจพเจ‚ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃเจพ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†() เจ‡เฉฐเจชเฉเฉฑเจŸ เจฒเจฟเฉฐเจ• เจ•เจคเจพเจฐเจพเจ‚ เจ–เจพเจฒเฉ€ เจนเฉ‹เจฃ เจคเฉฑเจ• เจฆเฉเจนเจฐเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‡เจน เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš เจ…เจ—เจฒเฉ‡ เจซเจฟเจฒเจŸเจฐ 'เจคเฉ‡ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ‰เจฆเฉ‹เจ‚ เจคเฉฑเจ• "เจธเจ•เฉเจฐเฉŒเจฒ" เจ•เจฐเจฆเจพ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจ‡เจจเจชเฉเจŸ เจฒเจฟเฉฐเจ• เจธเฉเจจเฉ‡เจนเจฟเจ†เจ‚ เจคเฉ‹เจ‚ เจฎเฉเจ•เจค เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ‡เฅค เจŸเจฟเจ•เจฐ เจธเฉ‚เจšเฉ€ เจฆเฉ‡ เจ–เจคเจฎ เจนเฉ‹เจฃ เจคเฉฑเจ• เจซเจฟเจฒเจŸเจฐ เจคเฉ‹เจ‚ เจซเจฟเจฒเจŸเจฐ เจคเฉฑเจ• เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจน เจšเฉฑเจ•เจฐ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจชเฉ‚เจฐเจพ เจ•เจฐเจฆเจพ เจนเฉˆ.

เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจŸเฉ‚เจชเจฒเจœเจผ 'เจคเฉ‡ เจตเจพเจชเจธ เจ†เจตเจพเจ‚เจ—เฉ‡ เจ…เจคเฉ‡ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เฉ‡ เจ•เจฟ เจ…เจœเจฟเจนเฉ€ เจ‡เจ•เจพเจˆ เจจเฉ‚เฉฐ เจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎเจฐ เจตเจฟเฉฑเจš เจ•เจฟเจ‰เจ‚ เจœเฉ‹เฉœเจฟเจ† เจ—เจฟเจ† เจธเฉ€เฅค เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจซเจฟเจฒเจŸเจฐ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ•เฉฐเจฎ เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจฆเฉเจ†เจฐเจพ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจฎเจพเจคเจฐเจพ เจฎเฉ‡เจฒ เจจเจนเฉ€เจ‚ เจ–เจพเจ‚เจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจจเจชเฉเจŸ 'เจคเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฌเจซเจฐเจพเจ‚ เจฆเฉ‡ เจ†เจ•เจพเจฐ เจฆเจพ เจ—เฉเจฃเจ• เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจซเจฟเจฒเจŸเจฐ เจฒเจฟเจ– เจฐเจนเฉ‡ เจนเจพเจ‚ เจœเฉ‹ เจ‡เฉฑเจ• เจคเฉ‡เจœเจผ เจซเฉเจฐเฉ€เจ…เจฐ เจŸเจฐเจพเจ‚เจธเจซเจพเจฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจชเจฐเจฟเจญเจพเจธเจผเจพ เจฆเฉเจ†เจฐเจพ เจธเจฟเจฐเจซ เจ‰เจนเจจเจพเจ‚ เจกเฉ‡เจŸเจพ เจฌเจฒเจพเจ•เจพเจ‚ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ เจœเจฟเจจเฉเจนเจพเจ‚ เจฆเจพ เจ†เจ•เจพเจฐ เจฆเฉ‹ เจฆเฉ€ เจธเจผเจ•เจคเฉ€ เจนเฉˆเฅค เจ‡เจธ เจจเฉ‚เฉฐ 512 เจ—เจฟเจฃเจจ เจฆเจฟเจ“. เจœเฉ‡เจ•เจฐ เจกเฉ‡เจŸเจพ เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจซเฉ‹เจจ เจšเฉˆเจจเจฒ เจฆเฉเจ†เจฐเจพ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจจเจชเฉเจŸ 'เจคเฉ‡ เจนเจฐเฉ‡เจ• เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเจพ เจกเฉ‡เจŸเจพ เจฌเจซเจฐ เจธเจพเจกเฉ‡ เจฒเจˆ 160 เจธเจฟเจ—เจจเจฒ เจจเจฎเฉ‚เจจเฉ‡ เจฒเจฟเจ†เจเจ—เจพเฅค เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจกเฉ‡เจŸเจพ เจฆเฉ€ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ เจฎเจพเจคเจฐเจพ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ€ เจ‰เจฆเฉ‹เจ‚ เจคเฉฑเจ• เจ‡เจจเจชเฉเจŸ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจ‡เจ•เฉฑเจ เจพ เจจเจพ เจ•เจฐเจจ เจฒเจˆ เจ‡เจน เจฒเฉเจญเจพเจ‰เจฃ เจตเจพเจฒเจพ เจนเฉˆเฅค เจชเจฐ เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจŸเจฟเจ•เจฐ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจŸเฉฑเจ•เจฐ เจนเฉ‹เจตเฉ‡เจ—เฉ€, เจœเฉ‹ เจ•เจฟ เจ‡เจจเจชเฉเจŸ เจฒเจฟเฉฐเจ• เจ–เจพเจฒเฉ€ เจนเฉ‹เจฃ เจคเฉฑเจ• เจซเจฟเจฒเจŸเจฐ เจจเฉ‚เฉฐ เจธเจ•เฉเจฐเฉ‹เจฒ เจ•เจฐเจจ เจฆเฉ€ เจ…เจธเจซเจฒ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ‡เจ—เจพเฅค เจชเจนเจฟเจฒเจพเจ‚, เจ…เจธเฉ€เจ‚ เจ‡เจธ เจจเจฟเจฏเจฎ เจจเฉ‚เฉฐ เจซเจฟเจฒเจŸเจฐ เจฆเฉ‡ เจคเฉ€เจœเฉ‡ เจธเจฟเจงเจพเจ‚เจค เจตเจœเฉ‹เจ‚ เจฎเจจเฉ‹เจจเฉ€เจค เจ•เฉ€เจคเจพ เจธเฉ€เฅค เจ‡เจธ เจธเจฟเจงเจพเจ‚เจค เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ, เจซเจฟเจฒเจŸเจฐ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†() เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจ‡เจจเจชเฉเจŸ เจ•เจคเจพเจฐเจพเจ‚ เจคเฉ‹เจ‚ เจธเจพเจฐเจพ เจกเจพเจŸเจพ เจฒเฉˆเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ‡เจจเจชเฉเจŸ เจคเฉ‹เจ‚ เจธเจฟเจฐเจซ 512 เจจเจฎเฉ‚เจจเฉ‡ เจฒเฉˆเจฃเจพ เจธเฉฐเจญเจต เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจธเจฟเจฐเจซ เจชเฉ‚เจฐเฉ‡ เจฌเจฒเจพเจ• เจนเฉ€ เจฒเฉˆ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจฏเจพเจจเฉ€. เจซเจฟเจฒเจŸเจฐ เจจเฉ‚เฉฐ 640 เจจเจฎเฉ‚เจจเฉ‡ เจฒเฉˆเจฃเฉ‡ เจชเฉˆเจฃเจ—เฉ‡ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ 512 เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเฉ€ เจชเจตเฉ‡เจ—เฉ€, เจฌเจพเจ•เฉ€ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจ‡เฉฑเจ• เจจเจตเฉ‡เจ‚ เจนเจฟเฉฑเจธเฉ‡ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚เฅค เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚, เจธเจพเจกเฉ‡ เจซเจฟเจฒเจŸเจฐ เจจเฉ‚เฉฐ, เจ‡เจธเจฆเฉ‡ เจฎเฉเฉฑเจ– เจ•เฉฐเจฎ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ‡เจจเจชเฉเจŸ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจตเจฟเจšเจ•เจพเจฐเจฒเฉ‡ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจฒเจˆ เจธเจนเจพเจ‡เจ• เจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจเฉ€เจ†เจ‚ เจšเจพเจนเฉ€เจฆเฉ€เจ†เจ‚ เจนเจจเฅค เจฎเฉ€เจกเฉ€เจ† เจธเจŸเฉเจฐเฉ€เจฎเจฐ เจฆเฉ‡ เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธ เจ†เจฎ เจธเจฎเฉฑเจธเจฟเจ† เจฆเฉ‡ เจนเฉฑเจฒ เจฒเจˆ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจ†เจฌเจœเฉˆเจ•เจŸ - MSBufferizer (เจฌเจซเจฐเจฐ) เจตเจฟเจ•เจธเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจŸเฉ‚เจชเจฒเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เจธ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจฌเจซเจฐเจพเจˆเจœเจผเจฐ (MSBufferizer)

เจ‡เจน เจ‡เฉฑเจ• เจ…เจœเจฟเจนเจพ เจ†เจฌเจœเฉˆเจ•เจŸ เจนเฉˆ เจœเฉ‹ เจซเจฟเจฒเจŸเจฐ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ‡เจจเจชเฉเจŸ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจซเจฟเจฒเจŸเจฐ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ€ เจฎเจพเจคเจฐเจพ เจ•เจพเจซเจผเฉ€ เจนเฉ‹เจฃ เจฆเฉ‡ เจจเจพเจฒ เจนเฉ€ เจ‡เจธเจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจฒเจˆ เจœเจฎเฉเจนเจพเจ‚ เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค เจœเจฆเฉ‹เจ‚ เจฌเจซเจฐ เจกเจพเจŸเจพ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจซเจฟเจฒเจŸเจฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฐ เจฆเฉ€ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจชเจพเจตเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ‡ เจฌเจฟเจจเจพเจ‚, เจจเจฟเจธเจผเจ•เจฟเจฐเจฟเจ† เจฎเฉ‹เจก เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เจฐเฉ‡เจ—เจพเฅค เจชเจฐ เจœเจฟเจตเฉ‡เจ‚ เจนเฉ€ เจฌเจซเจฐเจฐ เจคเฉ‹เจ‚ เจฐเฉ€เจกเจฟเฉฐเจ— เจซเฉฐเจ•เจธเจผเจจ เจœเจผเฉ€เจฐเฉ‹ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ เจ•เฉ‹เจˆ เจนเฉ‹เจฐ เจฎเฉเฉฑเจฒ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆ, เจซเจฟเจฒเจŸเจฐ เจฆเจพ process() เจซเฉฐเจ•เจธเจผเจจ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจ†เจ•เจพเจฐ เจฆเฉ‡ เจนเจฟเฉฑเจธเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจฌเจซเจฐเจฐ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจฒเฉˆเจฃเจพ เจ…เจคเฉ‡ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจ‡เจน เจ–เจคเจฎ เจจเจนเฉ€เจ‚ เจนเฉ‹ เจœเจพเจ‚เจฆเจพเฅค
เจ‰เจน เจกเฉ‡เจŸเจพ เจœเฉ‹ เจ…เจœเฉ‡ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจŸเฉ‚เจชเจฒ เจฆเฉ‡ เจชเจนเจฟเจฒเฉ‡ เจคเฉฑเจค เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฌเจซเจฐ เจตเจฟเฉฑเจš เจฐเจนเจฟเฉฐเจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจจเจพเจฒ เจ‡เจจเจชเฉเจŸ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจฌเจพเจ…เจฆ เจฆเฉ‡ เจฌเจฒเจพเจ• เจœเฉเฉœเฉ‡ เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค

เจฌเจฃเจคเจฐ เจœเฉ‹ เจฌเจซเจฐ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจฆเฉ€ เจนเฉˆ:

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); 

เจœเฉ‡เจ•เจฐ เจฌเจซเจฐ เจตเจฟเฉฑเจš เจ‡เจ•เฉฑเจคเจฐ เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฆเจพ เจ†เจ•เจพเจฐ เจฌเฉ‡เจจเจคเฉ€ เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพ เจคเฉ‹เจ‚ เจ˜เฉฑเจŸ เจนเฉˆ (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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹