<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Aug 27, 2014 at 4:32 PM, Maiquel Breitenbach <span dir="ltr"><<a href="mailto:maiquel.breitenbach@gmail.com" target="_blank">maiquel.breitenbach@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi, <div><br></div><div>I was already here asking about the building of new channel, I use as example chan_alsa, the new channel is work, the write function record a voice in file, but i am having problems with function read, asterisk doesn't call the read function, can someone explain how the asterisk works to call the read function of a channel? </div>


<div><br></div><div>I appreciate very much your help.</div><div><br></div></div></blockquote><div><br></div><div>Most channel drivers, including chan_alsa, set a file descriptor on the channel that will be polled.  When that fd indicates reading is possible, the read() callback will be called.  Search for ast_channel_set_fd() in chan_alsa.c, for example.</div>

<div><br></div><div>It's also possible to do reading in your own way in another thread and queue frames to the channel using ast_queue_frame().  chan_iax2 does this.  In that case, the read calback isn't used.  chan_iax2 has to do it that way as all data for *every* call is arriving on the same UDP socket, so it can't put that one socket fd on every channel.</div>

<div><br></div><div>-- </div><div>Russell Bryant</div></div></div></div>