Re: [GnomeMeeting-devel-list] Re: I GOT THE PROBLEM! :) :) :)
- From: Damien Sandras <dsandras seconix com>
- To: GnomeMeeting development mailing list <gnomemeeting-devel-list gnome org>
- Subject: Re: [GnomeMeeting-devel-list] Re: I GOT THE PROBLEM! :) :) :)
- Date: Thu, 14 Apr 2005 13:23:48 +0200
Hello!
First of all, nice catch!
Le jeudi 14 avril 2005 à 11:52 +0200, Jan Schiefer a écrit :
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> I don't receive this hello corruption every time. There are also correct
> invites.
>
> But one thing is really, really wired:
>
> I do an cout << transport.rdbuf() << endl; after
>
> #if defined(__MWERKS__) || (__GNUC__ >= 3) || (_MSC_VER >= 1300)
> if (transport.rdbuf()->pubseekoff(0, ios_base::cur) == streampos(_BADOFF))
> #else
> if (transport.rdbuf()->seekoff(0, ios::cur, ios::in) == EOF)
> #endif
> transport.clear(ios::badbit);
>
> in BOOL SIP_PDU::Read(OpalTransport & transport) and i get:
>
> INVITE sip:03419899434 195 158 171 101:5061;user=phone SIP/2.0
> From: <sip:anonymous 213 148 136 2;user=phone>;tag=aa8d4815
> To: <sip:03419899434 195 158 171 101;user=phone>
> CSeq: 1 INVITE
> Call-ID: d820fc5ab2bb9296b85e8d5724028918 sx3000
> Via: SIP/2.0/UDP 213.148.136.2:5060;branch=z9hG4bK65df926ab
> Allow:
> INVITE,ACK,CANCEL,OPTIONS,BYE,REGISTER,PRACK,INFO,UPDATE,SUBSCRIBE,NOTIFY,MESSAGE,REFER
> Max-Forwards: 16
> Supported: 100rel
> Contact: <sip:anonymous 213 148 136 2:5060;user=phone>
> Privacy: user
> Content-Length: 316
> Content-Type: application/sdp
>
> v=0
> o=HuaweiSoftX3000 90321 90321 IN IP4 213.148.135.2
> s=Sip Call
> c=IN IP4 213.148.136.2
> t=0 0
> m=audio 62276 RTP/AVP 18 8 0 4 97 96
> a=rtpmap:18 G729/8000
> a=rtpmap:8 PCMA/8000
> a=rtpmap:0 PCMU/8000
> a=rtpmap:4 G723/8000
> a=rtpmap:97 telephone-event/8000
> a=rtpmap:96 red/8000
> a=fmtp:97 0-15
> a=fmtp:96 97/97
>
> This if fully correct.
>
> BUT just after this transport.good() FAILS!!!
> Wtf???
>
> So the REAL PROBLEM is:
>
> #if defined(__MWERKS__) || (__GNUC__ >= 3) || (_MSC_VER >= 1300)
> if (transport.rdbuf()->pubseekoff(0, ios_base::cur) == streampos(_BADOFF))
> #else
> if (transport.rdbuf()->seekoff(0, ios::cur, ios::in) == EOF)
> #endif
> transport.clear(ios::badbit);
>
> doesn't work's correctly. The "bad bit" ( yeah ,really the BAD bit ) has
> to be cleared at invite. But this doesn't happen.
For now I don't really know how to debug this.
I think the problem is the following :
- it receives the "hello" from your provider
- the PDU is invalid
- transport is not good
- it returns with this :
"SIP\tPDU Read failed: " <<
transport.GetErrorText(PChannel::LastReadError));
- it receives the INVITE
- the hello is still in the buffer of OPAL
- the transport is still marked as not good
- it returns
I think the transport is erroneouosly marked as not good.
It should stay "good", and fail because the "hello" is not a correct
PDU.
--
_ Damien Sandras
(o- GnomeMeeting: http://www.gnomemeeting.org/
//\ FOSDEM 2005 : http://www.fosdem.org
v_/_ H.323 phone : callto:ils.seconix.com/dsandras seconix com
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]