Mediastreamer2 VoIP рдЗрдиреНрдЬрд┐рди рдЕрдиреНрд╡реЗрд╖рдг рдЧрд░реНрджреИред рднрд╛рдЧ рео

рд▓реЗрдЦрдХреЛ рд╕рд╛рдордЧреНрд░реА рдореЗрд░реЛ рдмрд╛рдЯ рд▓рд┐рдЗрдПрдХреЛ рд╣реЛ zen рдЪреНрдпрд╛рдирд▓.

Mediastreamer2 VoIP рдЗрдиреНрдЬрд┐рди рдЕрдиреНрд╡реЗрд╖рдг рдЧрд░реНрджреИред рднрд╛рдЧ рео

рдбрд╛рдЯрд╛ рдЖрдиреНрджреЛрд▓рди рд╕рдВрдпрдиреНрддреНрд░

  • рдбрд╛рдЯрд╛ рдмреНрд▓рдХ dblk_t
  • рд╕рдиреНрджреЗрд╢ mblk_t
  • рд╕рдиреНрджреЗрд╢рд╣рд░реВ mblk_t рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВ
  • рд▓рд╛рдЗрди queue_t
  • queues queue_t рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВ
  • рдЬрдбрд╛рди рдлрд┐рд▓реНрдЯрд░рд╣рд░реВ
  • рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдЩ рдЧреНрд░рд╛рдлрдХреЛ рд╕рд┐рдЧреНрдирд▓ рдмрд┐рдиреНрджреБ
  • рдЯрд┐рдХрд░рдХреЛ рдкрд░реНрджрд╛ рдкрдЫрд╛рдбрд┐рдХрд╛ рдЧрддрд┐рд╡рд┐рдзрд┐рд╣рд░реВ
  • рдмрдлрд░рд╛рдЗрдЬрд░ (MSBufferizer)
  • MSBufferizer рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдХрд╛рд░реНрдпрд╣рд░реВ

рд╡рд┐рдЧрддрдорд╛ рд▓реЗрдЦ рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдЖрдлреНрдиреИ рдлрд┐рд▓реНрдЯрд░ рд╡рд┐рдХрд╛рд╕ рдЧрд░реЗрдХрд╛ рдЫреМрдВред рдпрд╕ рд▓реЗрдЦрд▓реЗ рдорд┐рдбрд┐рдпрд╛ рд╕реНрдЯреНрд░рд┐рдорд░ рдлрд┐рд▓реНрдЯрд░рд╣рд░реВ рдмреАрдЪ рдбрд╛рдЯрд╛ рд╕рд╛рд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЖрдиреНрддрд░рд┐рдХ рд╕рдВрдпрдиреНрддреНрд░рдорд╛ рдлреЛрдХрд╕ рдЧрд░реНрдиреЗрдЫред рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рднрд╡рд┐рд╖реНрдпрдорд╛ рдХрдо рдкреНрд░рдпрд╛рд╕рдорд╛ рдкрд░рд┐рд╖реНрдХреГрдд рдлрд┐рд▓реНрдЯрд░рд╣рд░реВ рд▓реЗрдЦреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред

рдбрд╛рдЯрд╛ рдЖрдиреНрджреЛрд▓рди рд╕рдВрдпрдиреНрддреНрд░

рдорд┐рдбрд┐рдпрд╛ рд╕реНрдЯреНрд░рд┐рдорд░рдорд╛ рдбреЗрдЯрд╛ рдЖрдиреНрджреЛрд▓рди рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рд▓рд╛рдорд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЧрд░рд┐рдиреНрдЫ queue_tред рдЬрд╕реНрддреИ рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХреЛ рд╕реНрдЯреНрд░рд┐рдЩ 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_prev, b_next, рдЬреБрди рдПрдХ рджреЛрд╣реЛрд░реЛ рд▓рд┐рдЩреНрдХ рдЧрд░рд┐рдПрдХреЛ рд╕реВрдЪреА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ (рдЬреБрди рдПрдХ рд▓рд╛рдо рд╣реЛ queue_t).

рддреНрдпрд╕рдкрдЫрд┐ рд╕реВрдЪрдХ рдЖрдЙрдБрдЫ b_cont, рдЬреБрди рд╕рдиреНрджреЗрд╢ рдЯрдкрд▓рдХреЛ рдЕрдВрд╢ рд╣реБрдБрджрд╛ рдорд╛рддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдЯрдкрд▓рдорд╛ рдЕрдиреНрддрд┐рдо рд╕рдиреНрджреЗрд╢рдХреЛ рд▓рд╛рдЧрд┐, рдпреЛ рд╕реВрдЪрдХ рд╢реВрдиреНрдп рд░рд╣рдиреНрдЫред

рдЕрд░реНрдХреЛ рд╣рд╛рдореА рдбреЗрдЯрд╛ рдмреНрд▓рдХрдорд╛ рдПрдХ рд╕реВрдЪрдХ рджреЗрдЦреНрдЫреМрдВ b_datap, рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдиреНрджреЗрд╢ рдЕрд╡рд╕реНрдерд┐рдд рдЫред рдпреЛ рдмреНрд▓рдХ рдбрд╛рдЯрд╛ рдмрдлрд░ рднрд┐рддреНрд░ рдХреНрд╖реЗрддреНрд░ рд╕рдВрдХреЗрддрдХ рджреНрд╡рд╛рд░рд╛ рдкрдЫреНрдпрд╛рдЗрдПрдХреЛ рдЫред рдХреНрд╖реЗрддреНрд░ b_rptr рдмрдлрд░рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдкрдвреНрдиреЗ рд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджрдЫред рдХреНрд╖реЗрддреНрд░ b_wptr рдмрдлрд░рдорд╛ рд▓реЗрдЦрд┐рдиреЗ рд╕реНрдерд╛рдирд▓рд╛рдИ рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫред

рдмрд╛рдБрдХреА рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд╕реЗрд╡рд╛ рдкреНрд░рдХреГрддрд┐рдХрд╛ рдЫрдиреН рд░ рдбрд╛рдЯрд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рд╕рдВрдпрдиреНрддреНрд░рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫреИрдирдиреНред

рддрд▓ рдирд╛рдо рд╕рд╣рд┐рдд рдПрдХрд▓ рд╕рдиреНрджреЗрд╢ рдЫ m1 рд░ рдбрд╛рдЯрд╛ рдмреНрд▓рдХ d1.
Mediastreamer2 VoIP рдЗрдиреНрдЬрд┐рди рдЕрдиреНрд╡реЗрд╖рдг рдЧрд░реНрджреИред рднрд╛рдЧ рео
рдирд┐рдореНрди рдЪрд┐рддреНрд░рд▓реЗ рддреАрди рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХреЛ рдЯреБрдкрд▓ рджреЗрдЦрд╛рдЙрдБрдЫ m1, m1_1, m1_2.
Mediastreamer2 VoIP рдЗрдиреНрдЬрд┐рди рдЕрдиреНрд╡реЗрд╖рдг рдЧрд░реНрджреИред рднрд╛рдЧ рео

рд╕рдиреНрджреЗрд╢ рдХрд╛рд░реНрдпрд╣рд░реВ mblk_t

рдирдпрд╛рдБ рд╕рдиреНрджреЗрд╢ mblk_t рдкреНрд░рдХрд╛рд░реНрдп рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИрдПрдХреЛ:

mblk_t *allocb(int size, int pri); 

рдЙрд╕рд▓реЗ рдореЗрдореЛрд░реАрдорд╛ рдирдпрд╛рдБ рд╕рдиреНрджреЗрд╢ рд░рд╛рдЦреНрдЫ mblk_t рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдХрд╛рд░рдХреЛ рдбрд╛рдЯрд╛ рдмреНрд▓рдХрдХреЛ рд╕рд╛рде рдЖрдХрд╛рд░, рджреЛрд╕реНрд░реЛ рддрд░реНрдХ - pri рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рдпреЛ рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред рд╢реВрдиреНрдп рдиреИ рд░рд╣рдиреБрдкрд░реНрдЫ ред рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдХреНрд░рдордорд╛, рдореЗрдореЛрд░реАрд▓рд╛рдИ рдирдпрд╛рдБ рд╕рдиреНрджреЗрд╢рдХреЛ рд╕рдВрд░рдЪрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рдВрдЯрд┐рдд рдЧрд░рд┐рдиреЗрдЫ рд░ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдХрд▓ рдЧрд░рд┐рдиреЗрдЫ 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

рджреБрдИ tuples рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди, рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

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

рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ 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);

рдпрджрд┐ рддрд░реНрдХ рд▓реЗрди -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);

рд▓рд╛рдо queue_t

рдорд┐рдбрд┐рдпрд╛ рд╕реНрдЯреНрд░рд┐рдорд░рдорд╛ рд╕рдиреНрджреЗрд╢ рдХрддрд╛рд░ рдЧреЛрд▓рд╛рдХрд╛рд░ рджреЛрд╣реЛрд░реЛ рд▓рд┐рдЩреНрдХ рдЧрд░рд┐рдПрдХреЛ рд╕реВрдЪреАрдХреЛ рд░реВрдкрдорд╛ рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдЫред рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рддрддреНрд╡рд▓реЗ рд╕рдВрдХреЗрдд рдирдореВрдирд╛рд╣рд░реВрдХреЛ рд╕рд╛рде рдбрд╛рдЯрд╛ рдмреНрд▓рдХрдХреЛ рд▓рд╛рдЧрд┐ рд╕реВрдЪрдХ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдпреЛ рдмрд╛рд╣рд┐рд░ рдЬрд╛рдиреНрдЫ рдХрд┐ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдмреНрд▓рдХрдорд╛ рд╕рдВрдХреЗрддрдХрд╣рд░реВ рдмрд╛рд░реАрдорд╛ рд╕рд░реНрдЫрдиреН, рдЬрдмрдХрд┐ рдбреЗрдЯрд╛ рдЖрдлреИрдВ рдЧрддрд┐рд╣реАрди рд░рд╣рдиреНрдЫред рддреАред рддрд┐рдиреАрд╣рд░реВрдХрд╛ рд▓рд┐рдЩреНрдХрд╣рд░реВ рдорд╛рддреНрд░ рд╕рд╛рд░рд┐рдпреЛред
рд▓рд╛рдо рд╡рд░реНрдгрди рдЧрд░реНрдиреЗ рд╕рдВрд░рдЪрдирд╛ queue_t, рддрд▓ рджреЗрдЦрд╛рдЗрдПрдХреЛ рдЫ:

typedef struct _queue
{
   mblk_t _q_stopper; /* "╨е╨╛╨╗╨╛╤Б╤В╨╛╨╣" ╤Н╨╗╨╡╨╝╨╡╨╜╤В ╨╛╤З╨╡╤А╨╡╨┤╨╕, ╨╜╨╡ ╤Г╨║╨░╨╖╤Л╨▓╨░╨╡╤В ╨╜╨░ ╨┤╨░╨╜╨╜╤Л╨╡, ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╤В╤Б╤П ╤В╨╛╨╗╤М╨║╨╛ ╨┤╨╗╤П ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╤П ╨╛╤З╨╡╤А╨╡╨┤╤М╤О. ╨Я╤А╨╕ ╨╕╨╜╨╕╤Ж╨╕╨░╨╗╨╕╨╖╨░╤Ж╨╕╨╕ ╨╛╤З╨╡╤А╨╡╨┤╨╕ (qinit()) ╨╡╨│╨╛ ╤Г╨║╨░╨╖╨░╤В╨╡╨╗╨╕ ╨╜╨░╤Б╤В╤А╨░╨╕╨▓╨░╤О╤В╤Б╤П ╤В╨░╨║, ╤З╤В╨╛╨▒╤Л ╨╛╨╜╨╕ ╤Г╨║╨░╨╖╤Л╨▓╨░╨╗╨╕ ╨╜╨░ ╨╜╨╡╨│╨╛ ╤Б╨░╨╝╨╛╨│╨╛. */
   int q_mcount;        // ╨Ъ╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Н╨╗╨╡╨╝╨╡╨╜╤В╨╛╨▓ ╨▓ ╨╛╤З╨╡╤А╨╡╨┤╨╕.
} queue_t;

рд╕рдВрд░рдЪрдирд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ - рдПрдХ рд╕реВрдЪрдХ _q_stopper *mblk_t рдЯрд╛рдЗрдк рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдпрд╕рд▓реЗ рд▓рд╛рдордорд╛ рдкрд╣рд┐рд▓реЛ рддрддреНрд╡ (рд╕рдиреНрджреЗрд╢) рд▓рд╛рдИ рджреЗрдЦрд╛рдЙрдБрдЫред рд╕рдВрд░рдЪрдирд╛рдХреЛ рджреЛрд╕реНрд░реЛ рдХреНрд╖реЗрддреНрд░ рд▓рд╛рдордорд╛ рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХреЛ рдХрд╛рдЙрдиреНрдЯрд░ рд╣реЛред
рддрд▓рдХреЛ рдЪрд┐рддреНрд░рд▓реЗ m1, m4, m1, m2 3 рд╕рдиреНрджреЗрд╢рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХреЛ q4 рдирд╛рдордХреЛ рд▓рд╛рдЗрди рджреЗрдЦрд╛рдЙрдБрдЫред
Mediastreamer2 VoIP рдЗрдиреНрдЬрд┐рди рдЕрдиреНрд╡реЗрд╖рдг рдЧрд░реНрджреИред рднрд╛рдЧ рео
рдирд┐рдореНрди рдЪрд┐рддреНрд░рд▓реЗ m1,m4,m1,m2 3 рд╕рдиреНрджреЗрд╢рд╣рд░реВ рднрдПрдХреЛ q4 рдирд╛рдордХ рд▓рд╛рдо рджреЗрдЦрд╛рдЙрдБрдЫред рд╕рдиреНрджреЗрд╢ m2 рдПрдЙрдЯрд╛ рдЯрдкрд▓рдХреЛ рдЯрд╛рдЙрдХреЛ рд╣реЛ рдЬрд╕рдорд╛ рджреБрдИ рдердк рд╕рдиреНрджреЗрд╢рд╣рд░реВ m2_1 рд░ m2_2 рдЫрдиреНред

Mediastreamer2 VoIP рдЗрдиреНрдЬрд┐рди рдЕрдиреНрд╡реЗрд╖рдг рдЧрд░реНрджреИред рднрд╛рдЧ рео

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

рд╕реНрдЯрдкрд░ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рднрдПрдкрдЫрд┐ рдЖрдЙрдиреЗ рд╕рдиреНрджреЗрд╢, рд░ рддрддреНрд╡ рдХрд╛рдЙрдиреНрдЯрд░ рдШрдЯрд╛рдЗрдиреНрдЫред рдпрджрд┐ рд▓рд╛рдордорд╛ рд╕реНрдЯрдкрд░ рдмрд╛рд╣реЗрдХ рдХреБрдиреИ рддрддреНрд╡рд╣рд░реВ рдЫреИрдирдиреН рднрдиреЗ, реж рдлрд░реНрдХрд╛рдЗрдиреНрдЫред

рд▓рд╛рдордорд╛ рд╕рдиреНрджреЗрд╢ рд╕рдореНрдорд┐рд▓рд┐рдд рдЧрд░реНрджреИ:

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;

рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдпреЛрдЬрдирд╛ рдЕрдиреБрд╕рд╛рд░ C рдХрд╛рд░реНрдпрдХреНрд░рдордорд╛ рдлрд┐рд▓реНрдЯрд░рд╣рд░реВ рдЬрдбрд╛рди рдЧрд░реЗрдкрдЫрд┐ (рддрд░ рдЯрд┐рдХрд░ рдЬрдбрд╛рди рдЧрд░реЗрди), рд╣рд╛рдореАрд▓реЗ рдпрд╕рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЧреНрд░рд╛рдл рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдпреМрдВ, рдЬрд╕рдХрд╛ рдиреЛрдбрд╣рд░реВ рд╕рдВрд░рдЪрдирд╛рдХрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╣реБрдиреНред MSFilter, рд░ рдХрд┐рдирд╛рд░рд╛рд╣рд░реВ рд▓рд┐рдЩреНрдХрд╣рд░реВрдХреЛ рдЙрджрд╛рд╣рд░рдг рд╣реБрдиреН MSQueue.

рдЯрд┐рдХрд░рдХреЛ рдкрд░реНрджрд╛ рдкрдЫрд╛рдбрд┐рдХрд╛ рдЧрддрд┐рд╡рд┐рдзрд┐рд╣рд░реВ

рдЬрдм рдореИрд▓реЗ рддрдкрд╛рдИрд▓рд╛рдИ рднрдиреЗрдВ рдХрд┐ рдЯрд┐рдХрд░ рдЯрд┐рдХрдХреЛ рд╕реНрд░реЛрддрдХреЛ рд▓рд╛рдЧрд┐ рдлрд┐рд▓реНрдЯрд░ рд╣реЛ, рдпреЛ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рдкреВрд░реНрдг рд╕рддреНрдп рдерд┐рдПрдиред рдЯрд┐рдХрд░ рднрдиреЗрдХреЛ рдШрдбреАрдорд╛ рдХрд╛рд░реНрдп рдЪрд▓рд╛рдЙрдиреЗ рд╡рд╕реНрддреБ рд╣реЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛() рд╕рд░реНрдХрд┐рдЯрдХрд╛ рд╕рдмреИ рдлрд┐рд▓реНрдЯрд░рд╣рд░реВ (рдЧреНрд░рд╛рдл) рдЬрд╕рдорд╛ рдпреЛ рдЬрдбрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫред рдЬрдм рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ C рдХрд╛рд░реНрдпрдХреНрд░рдордорд╛ рдЧреНрд░рд╛рдл рдлрд┐рд▓реНрдЯрд░рдорд╛ рдЯрд┐рдХрд░ рдЬрдбрд╛рди рдЧрд░реНрдЫреМрдВ, рд╣рд╛рдореА рдЯрд┐рдХрд░рд▓рд╛рдИ рдЧреНрд░рд╛рдл рджреЗрдЦрд╛рдЙрдБрдЫреМрдВ рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдмрдиреНрдж рдирдЧрд░реЗрд╕рдореНрдо рдпрд╕рд▓реЗ рдЕрдмрджреЗрдЦрд┐ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрдиреЗрдЫред рдЬрдбрд╛рди рдЧрд░реЗрдкрдЫрд┐, рдЯрд┐рдХрд░рд▓реЗ рдпрд╕рдХреЛ рд╣реЗрд░рдЪрд╛рд╣рдорд╛ рд╕реБрдореНрдкрд┐рдПрдХреЛ рдЧреНрд░рд╛рдлрдХреЛ рдЬрд╛рдБрдЪ рдЧрд░реНрди рдерд╛рд▓реНрдЫ, рдпрд╕рдорд╛ рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХрд╛ рдлрд┐рд▓реНрдЯрд░рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрджреИред рдПрдЙрдЯреИ рдлрд┐рд▓реНрдЯрд░рд▓рд╛рдИ рджреБрдИ рдкрдЯрдХ "рдЧрдгрдирд╛" рдирдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рдпрд╕рд▓реЗ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЗрдПрдХрд╛ рдлрд┐рд▓реНрдЯрд░рд╣рд░реВрд▓рд╛рдИ рдЪреЗрдХрдмрдХреНрд╕ рд░рд╛рдЦреЗрд░ рдЪрд┐рдиреНрд╣ рд▓рдЧрд╛рдЙрдБрдЫред рджреЗрдЦреЗрдХреЛред рдкреНрд░рддреНрдпреЗрдХ рдлрд┐рд▓реНрдЯрд░рдорд╛ рд░рд╣реЗрдХреЛ рд▓рд┐рдЩреНрдХ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЦреЛрдЬреА рдЧрд░рд┐рдиреНрдЫред

рдЧреНрд░рд╛рдлрдХреЛ рдпрд╕рдХреЛ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рднреНрд░рдордгрдХреЛ рдХреНрд░рдордорд╛, рдЯрд┐рдХрд░рд▓реЗ рдлрд┐рд▓реНрдЯрд░рд╣рд░реВ рдмреАрдЪрдорд╛ рдбрд╛рдЯрд╛ рдмреНрд▓рдХрд╣рд░реВрдХреЛ рд╕реНрд░реЛрддрдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рдХрдореНрддрд┐рдорд╛ рдПрдЙрдЯрд╛ рдЫ рдХрд┐ рдЫреИрди рднрдиреЗрд░ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫред рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдкрдирд┐ рдЫреИрди рднрдиреЗ, рдЧреНрд░рд╛рдлрд▓рд╛рдИ рдЧрд▓рдд рдорд╛рдирд┐рдиреНрдЫ рд░ рдЯрд┐рдХрд░ рдХреНрд░реНрдпрд╛рд╕ рд╣реБрдиреНрдЫред

рдпрджрд┐ рдЧреНрд░рд╛рдл "рд╕рд╣реА" рд╣реЛ рднрдиреЗ, рдкреНрд░рддреНрдпреЗрдХ рдлреЗрд▓рд╛ рдкрд░реЗрдХреЛ рдлрд┐рд▓реНрдЯрд░рдХреЛ рд▓рд╛рдЧрд┐, рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдкреНрд░рд╛рд░рдореНрднрд┐рдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдмреЛрд▓рд╛рдЗрдиреНрдЫред рдкреВрд░реНрд╡ рдкреНрд░рдХреНрд░рд┐рдпрд╛ ()ред рдЕрд░реНрдХреЛ рдкреНрд░рд╢реЛрдзрди рдЪрдХреНрд░рдХреЛ рд▓рд╛рдЧрд┐ рдкрд▓ рдЖрдЙрдиреЗ рдмрд┐рддреНрддрд┐рдХреИ (рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдкреНрд░рддреНрдпреЗрдХ резреж рдорд┐рд▓рд┐рд╕реЗрдХреЗрдиреНрдбрдорд╛), рдЯрд┐рдХрд░рд▓реЗ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдЫред рдкреНрд░рдХреНрд░рд┐рдпрд╛() рд╕рдмреИ рдкрд╣рд┐рд▓реЗ рдлреЗрд▓рд╛ рдкрд░реЗрдХрд╛ рд╕реНрд░реЛрдд рдлрд┐рд▓реНрдЯрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рд░ рддреНрдпрд╕рдкрдЫрд┐ рд╕реВрдЪреАрдорд╛ рдмрд╛рдБрдХреА рдлрд┐рд▓реНрдЯрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ред рдпрджрд┐ рдлрд┐рд▓реНрдЯрд░рдорд╛ рдЗрдирдкреБрдЯ рд▓рд┐рдЩреНрдХрд╣рд░реВ рдЫрдиреН рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдкреНрд░рдХрд╛рд░реНрдп рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН рдкреНрд░рдХреНрд░рд┐рдпрд╛() рдЗрдирдкреБрдЯ рд▓рд┐рдЩреНрдХ рд▓рд╛рдЗрдирд╣рд░реВ рдЦрд╛рд▓реА рдирднрдПрд╕рдореНрдо рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдБрдЫред рдпрд╕рдкрдЫрд┐, рдпреЛ рд╕реВрдЪреАрдХреЛ рдЕрд░реНрдХреЛ рдлрд┐рд▓реНрдЯрд░рдорд╛ рдЬрд╛рдиреНрдЫ рд░ рдЗрдирдкреБрдЯ рд▓рд┐рдЩреНрдХрд╣рд░реВ рд╕рдиреНрджреЗрд╢рд╣рд░реВрдмрд╛рдЯ рдореБрдХреНрдд рдирднрдПрд╕рдореНрдо рдпрд╕рд▓рд╛рдИ "рд╕реНрдХреНрд░реЛрд▓" рдЧрд░реНрдЫред рд╕реВрдЪреА рд╕рдорд╛рдкреНрдд рдирднрдПрд╕рдореНрдо рдЯрд┐рдХрд░ рдлрд┐рд▓реНрдЯрд░рдмрд╛рдЯ рдлрд┐рд▓реНрдЯрд░рдорд╛ рд╕рд░реНрдЫред рдпрд╕рд▓реЗ рдЪрдХреНрд░рдХреЛ рдкреНрд░рд╢реЛрдзрди рдкреВрд░рд╛ рдЧрд░реНрджрдЫред

рдЕрдм рд╣рд╛рдореА рдЯреБрдкрд▓реНрд╕рдорд╛ рдлрд░реНрдХрдиреЗрдЫреМрдВ рд░ рдХрд┐рди рдорд┐рдбрд┐рдпрд╛ рд╕реНрдЯреНрд░рд┐рдорд░рдорд╛ рдпрд╕реНрддреЛ рдЗрдХрд╛рдИ рдердкрд┐рдпреЛ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдлрд┐рд▓реНрдЯрд░ рднрд┐рддреНрд░ рдХрд╛рдо рдЧрд░реНрдиреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛рдХреЛ рдорд╛рддреНрд░рд╛ рдорд┐рд▓реНрджреИрди рд░ рдЗрдирдкреБрдЯрдорд╛ рдкреНрд░рд╛рдкреНрдд рдбрд╛рдЯрд╛ рдмрдлрд░рд╣рд░реВрдХреЛ рдЖрдХрд╛рд░рдХреЛ рдЧреБрдгрди рд╣реЛрдЗрдиред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рд╣рд╛рдореА рдПрдХ рдлрд┐рд▓реНрдЯрд░ рд▓реЗрдЦреНрджреИ рдЫреМ рдЬрд╕рд▓реЗ рдЫрд┐рдЯреЛ рдлреБрд░рд┐рдпрд░ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрджрдЫ, рдЬреБрди рдкрд░рд┐рднрд╛рд╖рд╛ рдЕрдиреБрд╕рд╛рд░ рдХреЗрд╡рд▓ рдбрд╛рдЯрд╛ рдмреНрд▓рдХрд╣рд░реБ рд▓рд╛рдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рд╕рдХреНрдЫ рдЬрд╕рдХреЛ рд╕рд╛рдЗрдЬ рджреБрдИ рдХреЛ рд╢рдХреНрддрд┐ рд╣реЛред рдпрд╕рд▓рд╛рдИ 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); 

рдпрджрд┐ рдмрдлрд░рдорд╛ рд╕рдВрдЪрд┐рдд рдбрд╛рдЯрд╛рдХреЛ рдЖрдХрд╛рд░ рдЕрдиреБрд░реЛрдз рдЧрд░рд┐рдПрдХреЛ рднрдиреНрджрд╛ рдХрдо рдЫ (datalen), рддреНрдпрд╕рдкрдЫрд┐ рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рд╢реВрдиреНрдп рдлрд░реНрдХрд╛рдЙрдБрдЫ, рдбрд╛рдЯрд╛ рдбрд╛рдЯрд╛рдорд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред рдЕрдиреНрдпрдерд╛, рдмрдлрд░ рдорд╛ рд╕реНрдерд┐рдд tuples рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдХреЛ рдХреНрд░рдорд┐рдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рджрд░реНрд╢рди рдЧрд░рд┐рдиреНрдЫред рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реЗрдкрдЫрд┐, рдЯрдкрд▓ рдореЗрдЯрд╛рдЗрдиреНрдЫ рд░ рдореЗрдореЛрд░реА рдЦрд╛рд▓реА рд╣реБрдиреНрдЫред рдбрд╛рдЯрд╛рд▓реЗрди рдмрд╛рдЗрдЯрд╣рд░реВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╣реБрдБрджрд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреЗ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫред рдпрджрд┐ рдбрд╛рдЯрд╛ рдмреНрд▓рдХрдХреЛ рдмреАрдЪрдорд╛ рд╕реНрдкреЗрд╕ рд╕рдорд╛рдкреНрдд рднрдпреЛ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рд╕рдиреНрджреЗрд╢рдорд╛, рдбрд╛рдЯрд╛ рдмреНрд▓рдХрд▓рд╛рдИ рдмрд╛рдБрдХреА рдирдХреНрдХрд▓рд┐рдПрдХреЛ рднрд╛рдЧрдорд╛ рдШрдЯрд╛рдЗрдиреЗрдЫред рдЕрд░реНрдХреЛ рдкрдЯрдХ рддрдкрд╛рдИрдВрд▓реЗ рдХрд▓ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреЗ рдХрд╛рдо рдпрд╕ рдмрд┐рдиреНрджреБрдмрд╛рдЯ рдЬрд╛рд░реА рд░рд╣рдиреЗрдЫред

рд╣рд╛рд▓ рдмрдлрд░рдорд╛ рдЙрдкрд▓рдмреНрдз рдбрд╛рдЯрд╛рдХреЛ рдорд╛рддреНрд░рд╛ рдкрдвреНрджреИ:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди