แกแขแแขแแแก แแแกแแแ แแฆแแแฃแแแ แฉแแแ
แแแแแชแแแแ แแแแแแแแแแแแแก แแแฅแแแแแแ
- แแแแแชแแแแ แแแแแ dblk_t
- แจแแขแงแแแแแแแ mblk_t
- mblk_t แจแแขแงแแแแแแแแแแแ แแฃแจแแแแแก แคแฃแแฅแชแแแแ
- แ แแแ queue_t
- แ แแแแแแแ แแฃแจแแแแแก แคแฃแแฅแชแแแแ queue_t
- แคแแแขแ แแแแก แแแแแแจแแ แแแ
- แแแแแชแแแแ แแแแฃแจแแแแแแก แแ แแคแแแแก แกแแแแแแแก แฌแแ แขแแแ
- แขแแแแ แแก แกแแฅแแแแแแแ แแฃแแแกแแแจแ
- แแฃแคแแ แแแแขแแ แ (MSBufferizer)
- MSBufferizer-แแแ แแฃแจแแแแแก แคแฃแแฅแชแแแแ
แฒแแแแก
แแแแแชแแแแ แแแแแแแแแแแแแก แแแฅแแแแแแ
แแแแแชแแแแ แแแแแแแแแแแแ แแแแแ แกแขแ แแแแ แจแ แฎแแ แชแแแแแแแ แกแขแ แฃแฅแขแฃแ แแก แแแแ แแฆแฌแแ แแแ แ แแแแแแก แแแแแงแแแแแแ แ แแแ_แข. แจแแขแงแแแแแแแแแแก แกแขแ แแฅแแแแแ, แ แแแแ แแชแแ mblk_t, แ แแแแแแช แแแแแกแแแแแ แแ แจแแแชแแแก แกแแแแแแแก แแแแแชแแแแแก, แแ แแแแ แแฎแแแแ แแแฃแแแแก แฌแแแ, แแแแแแแแ แจแแขแงแแแแแแแแกแแแ แแ แแแแแชแแแแ แแแแแแแ. แแแ แแ แแแแกแ, แแแแแ แแแแกแแแฃแแ แแแแ แฎแแแแแกแแแ แแฆแแแแจแแ, แ แแ แแกแแแ แแ แแก แแแแ แแแแแ แขแแแแก แแแแแแแแแก แแแฃแแแกแแแแก, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแฌแงแแ แจแแขแงแแแแแแแแแแก แชแแแแฎแ แแแแ แแแแแแจแแ แแแฃแแ แกแแ. แแกแแแ แกแแแ แแแแ แแแแแแแฃแ แจแแขแงแแแแแแแแแแก แฏแแฃแคแก แฉแแแ แแฃแฌแแแแแ แขแแแก. แแแ แแแแ, แ แแแแก แแแแแกแแแแ แ แแแแแแแขแ แจแแแซแแแแ แแงแแก แแ แแ แจแแขแงแแแแแแแ mblk_t, แแ แจแแกแแซแแแ แแแกแแฏแแก แฎแแแแซแฆแแแแแแ mblk_t. แแแแแแฃแ แแแกแแฏแก แจแแแซแแแแ แฐแฅแแแแแก แกแแแฃแแแ แ แแแแแขแแก แแแแแชแแแแ แแแแแ. แ แแขแแ แแ แแก แกแแญแแ แ แขแฃแแแแแ แชแแขแ แแแแแแแแแแแ แแแแแแฎแแแแแ.
แ แแแแ แช แแแแแ แแฆแแแแจแแ, แจแแขแงแแแแแแแ แแแแแกแแแแแ แแ แจแแแชแแแก แแแแแชแแแแ แแแแแก; แกแแแแแแแ แแ, แแก แจแแแชแแแก แแฎแแแแ แแแฉแแแแแแแแก แแแฎแกแแแ แแแแก แแ แแแ, แกแแแแช แแแแแ แแแแฎแแแ. แแ แแแฌแแแจแ, แแแแแ แกแขแ แแแแ แแก แแฃแจแแแแแก แกแแแ แแ แกแฃแ แแแ แแแแแแแแแแแก แแแ แแก แกแแฌแงแแแก แแฃแแขแคแแแแจแ "Monsters, Inc.", แกแแแแช แแแ แแแ (แแแแแชแแแแแแก แแแฃแแแแ - แแแแฎแแแ) แแแแฃแ แ แกแแฉแฅแแ แแ แแแซแ แแแแแ แแแแ แแแแแแแแ แแแแก แแแกแฌแแ แแ, แฎแแแ แแแแแ แแแแฎแแแ. แแแ แฉแแก แฃแแแซแ แแแ.
แแฎแแ, แแแ แแ แฅแแแก แแแกแฌแแ แแ แฅแแแแแแแ แแแแแ แแแแแแแแแแแแแ, แแแขแแแฃแ แแ แแแแแแฎแแแแ แแแแแชแแแแ แแแแแชแแแแก แแแฅแแแแแแแก แฉแแแแแแแแแ แแ แแแฃแแแแ แแแแแ แกแขแ แแแแ แจแ.
แแแแแชแแแแ แแแแแ 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_แฌแแแ, แ_แจแแแแแแ, แ แแแแแแแช แแฃแชแแแแแแแแ แแ แแแแแ แแแแแแจแแ แแแฃแแ แกแแแก แแ แแแแแแแแแกแแแแก (แ แแแแแแช แแ แแก แ แแแ แ แแแ_แข).
แจแแแแแ แแแแแก แแแฉแแแแแแแแ b_cont, แ แแแแแแช แแแแแแงแแแแแ แแฎแแแแ แแแจแแ, แ แแแแกแแช แจแแขแงแแแแแแแ แแ แแก tuple-แแก แแแฌแแแ. แขแฃแแแแก แแแแ แแแแแแแแแกแแแแก แแก แแแฉแแแแแแแแ แแฃแแ แ แฉแแแ.
แจแแแแแ แฉแแแ แแฎแแแแแ แแแฉแแแแแแแแก แแแแแชแแแแ แแแแแแ b_datap, แ แแกแแแแกแแช แแ แกแแแแแก แจแแขแงแแแแแแแ. แแแก แแแกแแแแก แแแฉแแแแแแแแแ แแแแแแก แแแแแชแแแแ แแฃแคแแ แแก แจแแแแแ. แแแแ b_rptr แแแแกแแแฆแแ แแแก แแแแแแก, แกแแแแแแแช แฌแแแแแแฎแแแ แแฃแคแแ แแก แแแแแชแแแแแ. แแแแ b_wptr แแแฃแแแแแแก แแแแแแก, แกแแแแแแแช แจแแกแ แฃแแแแแ แแฃแคแแ แจแ แฉแแฌแแ แ.
แแแแแ แฉแแแ แแแแแแ แแ แแก แกแแ แแแกแฃแแ แฎแแกแแแแแกแ แแ แแ แแฎแแแ แแแแแชแแแแ แแแแแชแแแแก แแแฅแแแแแแแก แแฃแจแแแแแก.
แฅแแแแแ แแแชแแแฃแแแ แแ แแ แจแแขแงแแแแแแแ แกแแฎแแแแ m1 แแ แแแแแชแแแแ แแแแแ d1.
แฅแแแแแ แแแงแแแแแแ แคแแแฃแ แ แแแแฉแแแแแแก แกแแแ แจแแขแงแแแแแแแแก แฌแงแแแแก m1, m1_1, m1_2.
แจแแขแงแแแแแแแแแแก แคแฃแแฅแชแแแแ 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 โ แจแแขแงแแแแแแแ, แ แแแแแกแแช แแแแแแขแแแ แแแแแชแแแแ แกแฎแแ แแแแแ;
แแแแแชแแแแแ โ แแแฉแแแแแแแแ แแแแแแ, แ แแแแแก แแกแแ แแแแแแขแแแ แจแแขแงแแแแแแแแก;
แแแแ - แแแแแชแแแแ แแแแ;
pad โ แแ แแจแ, แ แแแแแก แแแฎแแแแแแแช แแแแแงแแคแแแ แแแฎแกแแแ แแแแก แแแแ แฃแแแ แแงแแก แแแกแฌแแ แแแฃแแ 4-แแแแขแแแแ แกแแแฆแแ แแก แแแกแฌแแ แแ (แจแแคแฃแแแ แแแฎแแแแ แแฃแแแแแ).
แแฃ แแ แกแแแฃแแ แจแแขแงแแแแแแแแแแก แแแแแชแแแแ แแฃแคแแ แจแ แกแแแแแ แแกแ แแแแแแแ, แแแจแแ แแฎแแแ แแแแแชแแแแแ แฉแแกแแฃแแ แแฅแแแแ แฃแแแ แแฅ แแ แกแแแฃแแ แแแแแชแแแแแแก แฃแแแ. แแฃ แจแแขแงแแแแแแแแก แแแแแชแแแแ แแฃแคแแ แจแ แแแแแแแ แแแแแกแฃแคแแแ แแแแแแแ แแแแ แ แแแแ, แจแแแแแ แแฅแแแแแ แแฎแแแ แจแแขแงแแแแแแแ แแฃแคแแ แแก แกแแแแแ แแกแ แแแแแ แแ แแแแแชแแแแแ แแแแแ แแแแ แแแก แแฃแคแแ แจแ. แแก แแ แแก แแฎแแแ แจแแขแงแแแแแแแ, แ แแแแแแช แแแแแแจแแ แแแฃแแแ แแ แแแแแแแแแ แแแแแขแแ แแก แแแแแงแแแแแแ b_cont. แแ แจแแแแฎแแแแแจแ, แแแกแแฏแ แแฅแชแแแ แขแแขแแ.
แแฃ แแฅแแแ แแญแแ แแแแแ แแแแแชแแแแ แกแฎแแ แแแแแแก แแแแแขแแแ tuple-แจแ, แแแจแแ แฃแแแ แแแแแแงแแแแ แคแฃแแฅแชแแ:
void msgappend(mblk_t *mp, const char *data, int size, bool_t pad);
แแก แแแแแแก แแแแ แจแแขแงแแแแแแแแก แขแฃแแจแ (แแแก แแฅแแก b_cont แแฅแแแแ null) แแ แแแแแแซแแฎแแแก แคแฃแแฅแชแแแก แแ แจแแขแงแแแแแแแแกแแแแก appendb ().
แแฅแแแ แจแแแแซแแแแ แแแแแแ แแแแแชแแแแแแก แแแแ แจแแขแงแแแแแแแแจแ แแ แขแแแจแ แคแฃแแฅแชแแแก แแแแแงแแแแแแ:
int msgdsize(const mblk_t *mp);
แแก แแแแแแแ แฃแแแแก แงแแแแ แจแแขแงแแแแแแแแก tuple-แจแ แแ แแแแแ แฃแแแแก แแแแแชแแแแ แแแแแแ แ แแแแแแแแแก แแ แจแแขแงแแแแแแแแแแก แแแแแชแแแแ แแฃแคแแ แแแจแ. แแแแแแฃแแ แจแแขแงแแแแแแแแกแแแแก, แแแแแชแแแแแแก แ แแแแแแแแ แแแแแแแแแแแ แจแแแแแแแแแ แแ:
mp->b_wptr - mp->b_rptr
แแ แ แขแแแแก แแแกแแแแแจแแ แแแแแ แแแแแแงแแแแ แคแฃแแฅแชแแ:
mblk_t *concatb(mblk_t *mp, mblk_t *newm);
แแแ แแแแแ แแแก แขแแแก แแฎแแแ แขแฃแแแแก แแฃแแแแแ mp แแ แแแ แฃแแแแก แแแฉแแแแแแแแก แแแฆแแแฃแแ แขแแแแก แแแแ แจแแขแงแแแแแแแแแ.
แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ, แขแฃแแแ แจแแแซแแแแ แแแแแแฅแชแแก แแ แ แจแแขแงแแแแแแแแ แแแแแชแแแแ แแ แแ แแแแแแ; แแก แแแแแแแ แคแฃแแฅแชแแแ:
void msgpullup(mblk_t *mp,int len);
แแฃ แแ แแฃแแแแขแ len แแ แแก -1, แแแจแแ แแแแแงแแคแแแ แแฃแคแแ แแก แแแแ แแแแแกแแแฆแแ แแแ แแแขแแแแขแฃแ แแ. แแฃ len แแ แแก แแแแแแแแ แ แแชแฎแแ, แจแแแฅแแแแแ แแ แแแแแก แแฃแคแแ แ แแ แแแกแจแ แแแแแแแ แแแแ แจแแขแงแแแแแแแแแแก แแแแแชแแแแแ. แแฃ แแฃแคแแ แ แแแแแฌแฃแ แแแ, แแแแแ แแแ แจแแฉแแ แแแแ. แขแฃแแแแก แแแ แแแแ แจแแขแงแแแแแแแ แแแแฆแแแก แแฎแแแ แแแแแก แแฃแคแแ แก แแแแแแแ แแแฃแแ แแแแแชแแแแแแ. แแแ แฉแแแแแ แจแแขแงแแแแแแแแแ แฌแแแจแแแแ แแ แแแฎแกแแแ แแแ แแแแ แฃแแแแแ แแ แแแแจแ.
แกแขแ แฃแฅแขแฃแ แแก แฌแแจแแแกแแก 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);
แแฃ แแฎแแแ แแแแแชแแแแแ แแ แฏแแแแ แจแแขแงแแแแแแแแก แแแแแชแแแแ แแฃแคแแ แแก แแแแแกแฃแคแแ แกแแแ แชแแจแ, แแแจแแ แจแแขแงแแแแแแแแก แแแแแแ แแแฃแแแ แชแแแแ แจแแฅแแแแแ แจแแขแงแแแแแแแ แกแแญแแ แ แแแแแก แแฃแคแแ แแ (แแแแแขแแแฃแแ แจแแขแงแแแแแแแแก แแแฉแแแแแแแแ แแแแแแแแฃแแแ แแแ แแแ แจแแขแงแแแแแแแแจแ) แแ แแแกแแฏแ แแฅแชแแแ แขแแขแแ.
แแแแแชแแแแ แแแฌแแแแก แแแแแขแแแ 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);
แจแแขแงแแแแแแแ แแฎแแแ แแแแแแ แแแฃแแ แแฅแแแแ 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_stopper แแแ แแคแแ *mblk_t, แแก แแแฃแแแแแแก แ แแแจแ แแแ แแแ แแแแแแแขแแ (แแแกแแฏแแ). แกแขแ แฃแฅแขแฃแ แแก แแแแ แ แแแแ แแ แแก แจแแขแงแแแแแแแแแแก แแ แแชแฎแแแแ แ แแแจแ.
แฅแแแแแ แแแงแแแแแแ แกแฃแ แแแ แแแแฉแแแแแแก แ แแแก แกแแฎแแแแ q1, แ แแแแแแช แจแแแชแแแก 4 แจแแขแงแแแแแแแแก m1, m2, m3, m4.
แจแแแแแ แกแฃแ แแแแ แแแฉแแแแแแแ แ แแแ แกแแฎแแแแ q1, แ แแแแแแช แจแแแชแแแก 4 แจแแขแงแแแแแแแแก m1,m2,m3,m4. แจแแขแงแแแแแแแ m2 แแ แแก แขแฃแแแแก แแแแ, แ แแแแแแช แจแแแชแแแก แแแแแ แแ แจแแขแงแแแแแแแแก m2_1 แแ m2_2.
แ แแแแแแแ แแฃแจแแแแแก แคแฃแแฅแชแแแแ queue_t
แ แแแแก แแแแชแแแแแแแชแแ:
void qinit(queue_t *q);
แกแแแแแ _q_stopper (แจแแแแแแแจแ แฉแแแ แแแก "แกแขแแแแ แก" แแแแแ แฅแแแแ) แแแแชแแแแแแแแฃแแแ แคแฃแแฅแชแแแ 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;
แคแแแขแ แแก แฅแแแซแแกแแแแแแ แแแแแแ แแแแ แแฃแแแแแ.
แแ แ แแแแแก แแแแแแจแแ แแแ แจแแขแงแแแแแแแแแแก แ แแแแ แแฆแฌแแ แแแแ แกแขแ แฃแฅแขแฃแ แแ _MSQueue, แ แแแแแแช แจแแแชแแแก แจแแขแงแแแแแแแแแแก แ แแแก แแ แแแแแแแแแแก แแ แแ แ แกแแแแแแแก แฌแแ แขแแแแกแแแ, แ แแแแแกแแช แแก แแแแแจแแ แแแก:
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;
แแแก แจแแแแแ แ แแช แฉแแแ แแแแแแแแจแแ แแ แคแแแขแ แแแ C แแ แแแ แแแแจแ แฉแแแแ แแแแแแก แจแแกแแแแแแกแแ (แแแแ แแ แแ แแแแแแแแจแแ แแ แขแแแแ แ), แแแแ แจแแแฅแแแแแ แแแแแ แแฃแแ แแ แแคแแแ, แ แแแแแก แแแแแซแแแ แกแขแ แฃแฅแขแฃแ แแก แแแแแแแแแแแ. MSFilter, แแ แแแแแแแ แแแฃแแแแแก แแแแแแแแแแแ MSQueue.
แขแแแแ แแก แกแแฅแแแแแแแ แแฃแแแกแแแจแ
แ แแชแ แแแแฎแแ แแ, แ แแ แขแแแแ แ แแ แแก แขแแแแแแแก แฌแงแแ แแก แคแแแขแ แ, แแก แแ แแงแ แกแ แฃแแ แกแแแแ แแแ. แขแแแแ แ แแ แแก แแแแแฅแขแ, แ แแแแแแช แแกแ แฃแแแแก แคแฃแแฅแชแแแแก แกแแแแแ แแ แแชแแกแ () แแแแ แแกแฅแแแแก (แแ แแคแแแแก) แงแแแแ แคแแแขแ แ, แ แแแแแกแแช แแแ แฃแแแแจแแ แแแแ. แ แแแแกแแช แฉแแแ แแแแแแจแแ แแแ แขแแแแ แก แแ แแคแแแฃแ แคแแแขแ แก C แแ แแแ แแแแจแ, แขแแแแ แก แแแฉแแแแแแ แแ แแคแแแก, แ แแแแแกแแช แแก แแแแแ แแแแ แแแแแแแขแ แแแแแก, แกแแแแ แแ แแแแแ แแแแ. แแแแแแจแแ แแแแก แจแแแแแ, แขแแแแ แ แแฌแงแแแก แแแก แแแแแแแ แแแแแแแแแ แแ แแคแแแแก แจแแแแฌแแแแแก, แแแแแแก แคแแแขแ แแแแก แฉแแแแแแแแแแก, แ แแแแแแช แแแแชแแแก แแแก. แแแแกแแแแแก, แ แแ แแ แแ แแ แแแแแ แคแแแขแ แ แแ แฏแแ แแ "แแแแแแแแแก", แแก แแฆแแแจแแแแก แแฆแแแฉแแแแ แคแแแขแ แแแก แแแแจแ แฉแแแ แแแแแแก แแแแแแกแแแแ. แฉแแแก. แซแแแแ แฎแแ แชแแแแแแแ แแแฃแแแแแก แชแฎแ แแแแแแก แแแแแงแแแแแแ, แ แแแแแแแช แแแแแแฃแ แคแแแขแ แก แแฅแแก.
แแ แแคแแแแก แจแแกแแแแแ แขแฃแ แแก แแ แแก, แขแแแแ แ แแแแฌแแแแก, แแ แแก แแฃ แแ แ แคแแแขแ แแแก แจแแ แแก แแแแแแฃแ แแ แแ, แ แแแแแแช แแแฅแแแแแแก แ แแแแ แช แแแแแชแแแแ แแแแแแแแก แฌแงแแ แ. แแฃ แแ แชแแ แแ แแ แแ แแก, แแแจแแ แแ แแคแแแ แแ แแกแฌแแ แแ แแแแแแแ แแ แขแแแแ แ แแจแแแแ.
แแฃ แแ แแคแแแ แแฆแแแฉแแแแแ "แกแฌแแ แ", แแแแแแฃแแ แแแแแแแ แคแแแขแ แแกแแแแก, แคแฃแแฅแชแแ แแแแแแซแแฎแแแ แแแแชแแแแแแแชแแแกแแแแก แฌแแแแกแฌแแ แ แแ แแชแแกแ (). แ แแแแ แช แแ แแแแแแแ แแแแแแขแ แจแแแแแแ แแแแฃแจแแแแแแก แชแแแแแกแแแแก (แแแแฃแแแกแฎแแแแแ แงแแแแ 10 แแแแแฌแแแจแ), แขแแแแ แ แแซแแฎแแแก แคแฃแแฅแชแแแก แแ แแชแแกแ () แงแแแแ แแแ แ แแแแแแแ แฌแงแแ แแก แคแแแขแ แแแแกแแแแก แแ แจแแแแแ แกแแแจแ แแแ แฉแแแแแ แคแแแขแ แแแแกแแแแก. แแฃ แคแแแขแ แก แแฅแแก แจแแงแแแแแก แแแฃแแแแ, แแแจแแ แแแฃแจแแแ แคแฃแแฅแชแแ แแ แแชแแกแ () แแแแ แแแแ แแแแแ, แกแแแแ แจแแงแแแแแก แแแฃแแแแแก แ แแแแแ แชแแ แแแแแ. แแแแก แจแแแแแ แแก แแแแแแแก แกแแแก แจแแแแแ แคแแแขแ แแ แแ โแแแแแฎแแแแกโ แกแแแแ แจแแงแแแแแก แแแฃแแแแ แแ แแฅแแแแ แจแแขแงแแแแแแแแแแกแแแ. แขแแแแ แ แแแแแแแก แคแแแขแ แแแแ แคแแแขแ แแ, แกแแแแ แกแแ แแ แแแกแ แฃแแแแแ. แแก แแกแ แฃแแแแก แชแแแแแก แแแแฃแจแแแแแแก.
แแฎแแ แฉแแแ แแแแฃแแ แฃแแแแแแ tuples-แก แแ แแแกแแฃแแ แแแ แแแแแ, แแฃ แ แแขแแ แแแแแแขแ แแกแแแ แกแฃแแแแฅแขแ แแแแแแกแขแ แแแแ แก. แแแแแแแ, แคแแแขแ แแก แจแแแแแ แแแฅแแแแ แแแแแ แแแแแก แแแแ แแแแฎแแแแแแ แแแแแชแแแแแแก แ แแแแแแแแ แแ แแแแฎแแแแ แแ แแ แแ แแก แจแแงแแแแแกแแก แแแฆแแแฃแแ แแแแแชแแแแ แแฃแคแแ แแแแก แแแแแก แฏแแ แแแ. แแแแแแแแแ, แฉแแแ แแฌแแ แ แคแแแขแ แก, แ แแแแแแช แแกแ แฃแแแแก แคแฃแ แแแก แกแฌแ แแค แขแ แแแกแคแแ แแแชแแแก, แ แแแแแกแแช แแแแกแแแฆแแ แแแแ แจแแฃแซแแแ แแฎแแแแ แแแแแชแแแแ แแแแแแแแก แแแแฃแจแแแแแ, แ แแแแแแ แแแแ แแ แแก แแ แ แกแแแซแแแแ แแก. แแงแแก 512 แ แแแแแแแแ. แแฃ แแแแแชแแแแแ แแแแแ แแ แแแฃแแแ แกแแขแแแแคแแแ แแ แฎแแ, แแแจแแ แแแแแแฃแแ แจแแขแงแแแแแแแแก แแฃแคแแ แ แจแแงแแแแแกแแก แแแแแแขแแแก แกแแแแแแแก 160 แแแแฃแจแก. แแแชแแฃแ แแ แแ แจแแแแ แแแแ แแแแแชแแแแแ แจแแงแแแแแแแ, แกแแแแ แแแแแชแแแแแแก แกแแญแแ แ แ แแแแแแแแ แแ แแฅแแแแ. แแแแ แแ แแ แจแแแแฎแแแแแจแ, แจแแฏแแฎแแแ แแแฎแแแแ แขแแแแ แแแ, แ แแแแแแช แฌแแ แฃแแแขแแแแแ แจแแแชแแแแ แคแแแขแ แแก แแแแแฎแแแแแก แแแแแ, แกแแแแ แจแแงแแแแแก แแแฃแแ แชแแ แแแแแ. แแแ แ, แฉแแแ แแฆแแแแจแแแ แแก แฌแแกแ, แ แแแแ แช แคแแแขแ แแก แแแกแแแ แแ แแแชแแแ. แแ แแ แแแชแแแแก แแแฎแแแแแ, แคแแแขแ แแก process() แคแฃแแฅแชแแแ แฃแแแ แแแแฆแแก แงแแแแ แแแแแชแแแ แจแแงแแแแแก แ แแแแแแแแ.
แแแ แแ แแแแกแ, แจแแงแแแแแแแ แจแแฃแซแแแแแแ แแฅแแแแ แแฎแแแแ 512 แแแแฃแจแแก แแฆแแแ, แแแแแแแแ แจแแแแซแแแแ แแฎแแแแ แแแแแแแ แแแแแแแแก แแฆแแแ, แ.แ. แคแแแขแ แก แแแฃแฌแแแก 640 แแแแฃแจแแก แแฆแแแ แแ แแแแแแ 512-แแก แแแแแงแแแแแ, แแแแแ แฉแแแ แแแแแชแแแแแแก แแฎแแแ แแแฌแแแแก แแแแ แแแแแแแแ. แแแ แแแแ, แฉแแแแแ แคแแแขแ แแ, แแแแแกแ แซแแ แแแแแ แกแแแฃแจแแแก แแแ แแ, แฃแแแ แฃแแ แฃแแแแแงแแก แแแแฎแแแ แ แแแฅแแแแแแแแ แจแแงแแแแแก แแแแแชแแแแแแก แจแฃแแแแแฃแ แจแแกแแแแฎแแ. แแแแแ แกแขแ แแแแ แแก แแแแแแแแแ แแแแ แแ แแ แแแแแแ แแ แแแแแแแก แแแแแฌแงแแแขแ แจแแแแฃแจแแแแก แกแแแชแแแแฃแ แ แแแแแฅแขแ - MSBufferizer (แแฃแคแแ แแ แ), แ แแแแแแช แแ แแ แแแแแแแก แแแแแ แแแก แขแฃแแแแแแก แแแแแงแแแแแแ.
แแฃแคแแ แแแแขแแ แ (MSBufferizer)
แแก แแ แแก แแแแแฅแขแ, แ แแแแแแช แแแแแ แแแแแก แจแแงแแแแแก แแแแแชแแแแแก แคแแแขแ แแก แจแแแแแ แแ แแแแฌแงแแแก แแแก แแแกแแแฃแจแแแแแแแ แแแแแแแแแก, แ แแแแ แช แแ แแแคแแ แแแชแแแก แ แแแแแแแแ แกแแแแแ แแกแ แแฅแแแแ แคแแแขแ แแก แแแแแ แแแแแก แแแกแแจแแแแแ. แกแแแแ แแฃแคแแ แ แแแ แแแแแก แแแแแชแแแแแก, แคแแแขแ แ แแแฃแจแแแแแก แฃแแแฅแแแแ แ แแแแแจแ, แแ แแชแแกแแ แแก แแแแฃแจแแแแแแก แกแแแซแแแแ แแก แแแแแงแแแแแแก แแแ แแจแ. แแแแ แแ แ แแแแ แช แแ แแฃแคแแ แแแแ แฌแแแแแฎแแแก แคแฃแแฅแชแแ แแแแแ แฃแแแแก แแฃแแแก แแแ แแ แกแฎแแ แแแแจแแแแแแแแก, แคแแแขแ แแก process() แคแฃแแฅแชแแ แแฌแงแแแก แแฃแคแแ แแแแ แแแแแชแแแแแแก แแแฆแแแแก แแ แแแแฃแจแแแแแแก แกแแญแแ แ แแแแแก แแแฌแแแแแจแ, แกแแแแ แแก แแแแแฌแฃแ แแแ.
แแแแแชแแแแแ, แ แแแแแแแช แฏแแ แแแแแ แแ แแ แแก แกแแญแแ แ, แ แฉแแแ แแฃแคแแ แจแ, แ แแแแ แช แแแ แแแแ แแแแแแแขแ tuple, แ แแแแแกแแช แแแ แแ แแแแก แจแแงแแแแแก แแแแแชแแแแแแก แจแแแแแแแ แแแแแแแ.
แกแขแ แฃแฅแขแฃแ แ, แ แแแแแแช แแฆแฌแแ แก แแฃแคแแ แก:
struct _MSBufferizer{
queue_t q; /* ะัะตัะตะดั ัะพะพะฑัะตะฝะธะน. */
int size; /* ะกัะผะผะฐัะฝัะน ัะฐะทะผะตั ะดะฐะฝะฝัั
ะฝะฐั
ะพะดััะธั
ัั ะฒ ะฑััะตัะธะทะฐัะพัะต ะฒ ะดะฐะฝะฝัะน ะผะพะผะตะฝั. */
};
typedef struct _MSBufferizer MSBufferizer;
MSBufferizer-แแแ แแฃแจแแแแแก แคแฃแแฅแชแแแแ
แแฎแแแ แแฃแคแแ แฃแแ แแแกแขแแแชแแแก แจแแฅแแแ:
MSBufferizer * ms_bufferizer_new(void);
แแแฎแกแแแ แแแ แแแแแงแแคแแแแ, แแแแชแแแแแแแแฃแแแ ms_bufferizer_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_bufferizer_put().
แฌแแแแแฎแแ แแฃแคแแ แแแแ:
int ms_bufferizer_read(MSBufferizer *obj, uint8_t *data, int datalen);
แแฃ แแฃแคแแ แจแ แแแแ แแแแแ แแแแแชแแแแแแก แแแแ แแแแฎแแแแแแแ แแแแแแแแ (แแแขแแแแแ), แจแแแแแ แคแฃแแฅแชแแ แแแ แฃแแแแก แแฃแแก, แแแแแชแแแแแ แแ แแแแแ แแแแ แแแแแชแแแแแจแ. แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ, แจแแกแ แฃแแแแฃแแแ แแแแแชแแแแ แแแแแแแแแแ แฃแแ แแแแแ แแแ แแฃแคแแ แจแ แแแแแแ แ แขแแแแแแแแ. แแแแแ แแแแก แจแแแแแ, tuple แฌแแแจแแแแ แแ แแแฎแกแแแ แแแ แแแแแกแฃแคแแแแแ. แแแแแ แแแ แกแ แฃแแแแแ แแแแแชแแแแ แแแแขแแแแก แแแแแ แแแแก แแแแแแขแจแ. แแฃ แกแแแ แชแ แแแแแฌแฃแ แแแ แแแแแชแแแแ แแแแแแก แจแฃแแจแ, แแแจแแ แแ แจแแขแงแแแแแแแแจแ แแแแแชแแแแ แแแแแ แจแแแชแแ แแแแ แแแ แฉแแแแ แแแฃแแแแแ แแแฃแ แแแฌแแแแแแ. แจแแแแแ แฏแแ แแ แแแ แแแแแกแแก, แแแแแ แแแ แแแแ แซแแแแแแ แแ แฌแแ แขแแแแแแ.
แแแแแชแแแแ แแ แ แแแแแแแแแก แฌแแแแแฎแแ, แ แแแแแแช แแแแแแแ แฎแแแแแกแแฌแแแแแแ แแฃแคแแ แจแ:
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 แคแแแขแ แจแ, แ แแแแแแช แแฌแแกแ แแแแแก แแแแฃแจแแแจแ แแแแขแแแก แฅแกแแแแก แจแแแแแแแแแ แฐแแกแขแแก แแ แซแแแแแแแแ:
แจแแแแแ แกแขแแขแแแจแ แแแแแแฎแแแแแ แขแแแแ แแก แแแขแแแ แแแแก แจแแคแแกแแแแก แกแแแแแฎแก แแ แ แแแแ แแแแฃแแแแแแแแ แแแแแญแแ แแแแฃแ แแแแแแแแแ แแแขแแแ แแแแก แแแแแ แกแขแ แแแแ แจแ.
แฌแงแแ แ: www.habr.com