hi all...
i m trying to create a sip application using the SDK documentation and the SIP Example that came along with the SDK.I am using Asterisk as the SIP Server. I am able to do the following:->
1. register the S60 Emulator at Asterisk server without using the SIP Profile.

2. send an invite from one peer to another via SIP Server. Both the peers are S60 Emulator

3. receive the invite at other end and send a 200 OK.

The important thing to note here is that at both ends i m using S60 Emulator as my SIP Phone.
Now if i use one peers as S60 Emulator and other Xlite SIP Phone , i cannot receive an invite from S60 Emulator to Xlite.
The error is: process_sdp: No compatible codecs

As far as i know , this is SDP codec problem..
I have created the SDP document as follows:-

CSdpDocument* CSipRtpExSipEngine::SdpDocumentLC()
	_LIT8( KSessionName, "SIP Example Application" );

	// Create SDP document
	CSdpDocument* sdpDocument = CSdpDocument::NewL();
	CleanupStack::PushL( sdpDocument );
CSdpOriginField* orgField = CSdpOriginField::NewL( "username, SessionId(), session_version, iLocalAddr );
	sdpDocument->SetOriginField( orgField );

	// Set session name
	sdpDocument->SetSessionNameL( KSessionName );

	// Set connection data
	CSdpConnectionField* connField = CSdpConnectionField::NewL( iLocalAddr );
	sdpDocument->SetConnectionField( connField );

	return sdpDocument;

the media fields are created as:-
 CSdpFmtAttributeField* rtpmapAttribute = NULL;
    _LIT8( KSdpOptionalEncodingParam, "");
	TBuf8<10> payloadType;
	payloadType.AppendNum( KDefaultPayloadType );
	TBuf8<10> samplingFreq;
	samplingFreq.AppendNum( KExampleSamplingFreq );
	TBuf8<10> ptime;
	ptime.AppendNum( KDefaultPtime );
	TBuf8<10> maxptime;
	maxptime.AppendNum( KDefaultMaxptime );

	// Set media field
	// Set media type: audio
	RStringF media = StringPoolL().StringF( SdpCodecStringConstants::EMediaAudio, 
					                        SdpCodecStringPool::StringTableL() );
	// Set media transport: RTP/AVP
	RStringF prot = StringPoolL().StringF( SdpCodecStringConstants::EProtocolRtpAvp,
				                           SdpCodecStringPool::StringTableL() );
	// Create the media line
	CSdpMediaField* mediaDescription =
		CSdpMediaField::NewL( media, iLocalMediaPort, prot, payloadType );

	aDocument->MediaFields().Append( mediaDescription );    

	RStringF directionStr = StringPoolL().StringF( SdpCodecStringConstants::EAttributeSendrecv,
				                           SdpCodecStringPool::StringTableL() );
    CSdpAttributeField* direction = 
        CSdpAttributeField::NewLC( directionStr, KNullDesC8 );
    mediaDescription->AttributeFields().AppendL( direction );
    CleanupStack::Pop( direction );

	RStringF rtpmapStr = StringPoolL().StringF( SdpCodecStringConstants::EAttributeRtpmap,
				                           SdpCodecStringPool::StringTableL() );

    TSdpRtpmapValue rtpmapValue( KExampleCodecName(), 
                                 KSdpOptionalEncodingParam() ); 
    HBufC8* rtpmapBuf = rtpmapValue.EncodeL();
    CleanupStack::PushL( rtpmapBuf );
    rtpmapAttribute = 
        CSdpFmtAttributeField::NewL( rtpmapStr, payloadType, *rtpmapBuf );
    CleanupStack::PopAndDestroy( rtpmapBuf );          
    CleanupStack::PushL( rtpmapAttribute );

    mediaDescription->FormatAttributeFields().AppendL( rtpmapAttribute );
    CleanupStack::Pop( rtpmapAttribute );

	RStringF attributePtime = StringPoolL().StringF( SdpCodecStringConstants::EAttributePtime,
				                           SdpCodecStringPool::StringTableL() );
	RStringF attributeMaxPtime = StringPoolL().StringF( SdpCodecStringConstants::EAttributeMaxptime,
				                           SdpCodecStringPool::StringTableL() );
    CSdpAttributeField* ptimeLine = 
        CSdpAttributeField::NewLC( attributePtime, ptime );
    CSdpAttributeField* maxptimeLine = 
        CSdpAttributeField::NewLC( attributeMaxPtime, maxptime );

    mediaDescription->AttributeFields().AppendL( ptimeLine );
    // this creates dependency between ptime and payload type
    ptimeLine->AssignTo( *rtpmapAttribute );
    CleanupStack::Pop( maxptimeLine ); 
    mediaDescription->AttributeFields().AppendL( maxptimeLine );
    // this creates dependency between maxptime and payload type
    maxptimeLine->AssignTo( *rtpmapAttribute ); 
    CleanupStack::Pop( ptimeLine ); 

in d above method:
KDefaultPayloadType = 102
KDefaultPtime = 40
KDefaultMaxptime = 80
KExampleSamplingFreq = 8000
_LIT8( KExampleCodecName, "G711" )

please help me on this.....
Thanx in advance......