[asterisk-dev] Implementation using libpri and socketpair()

Christian crich-ml at beronet.com
Wed Feb 7 15:31:57 MST 2007


Hi Paulo,

i have had similar issues with a quite different use-case ;-) the 
problem is that you need to frame your messages and transmit these 
frames instead of the transparent data. you can use hdlc for example, i 
believe there are some simple implementations out there, but that is 
sort of overkill. The most simple thing would be to just put the length 
of the frame before each packet, the length could be of maximum 4 bytes, 
then do a read of just as much bytes which you know from this length, like:

uint32 len;
char buf[1024];
read(fd, &len, 4);
read(fd,buf,len);

then you can be sure that you've got only this single frame in buf, 
(well if read returns less then len you need to reread of course).

Besides that i have somewhere read that you can set a HDLC Property via 
fcntl to terminals, but i haven't had ever the time to test that out.


cheers,

christian


Paulo Garcia wrote:
> Hi,
>
> in my own channel, I'm implementing ISDN support using Libpri. The 
> implementation is completely independent from zaptel then I'm trying 
> to do all communications between my hardware and libpri using 
> socketpair function.
>
> The idea is to create a socketpair, passing fd[0] to pri_new function 
> and writing to fd[1] to pass data to libpri. So far so good...
>
> To receive data from libpri, I have a thread checking for all file 
> descriptors fd[1] using select() function and when I receive 
> something, I pass it to my card. This approach also works well but 
> sometimes I receive two messages (from libpri) in only one read() 
> call. I think this is because of libpri writes two messages so fast 
> then when the read is called, there are already two messages in socket 
> buffer...
>
> How can I avoid this behavior? Maybe using another way different of 
> socketpair ? This communication will be used only inside the same 
> process, between different threads.
>
> Any path or idea will be appreciated.
>
>
> Regards
>
>
> Paulo Garcia
> ------------------------------------------------------------------------
>
> _______________________________________________
> --Bandwidth and Colocation provided by Easynews.com --
>
> asterisk-dev mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-dev
>   



More information about the asterisk-dev mailing list