⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdp_neg_test.c

📁 一个开源的sip源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/* $Id: sdp_neg_test.c 974 2007-02-19 01:13:53Z bennylp $ */
/* 
 * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms oa the GNU General Public License as published by
 * the Free Software Foundation; either version 2 oa the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty oa
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy oa the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 */
#include <pjmedia/sdp.h>
#include <pjmedia/sdp_neg.h>
#include "test.h"


#define THIS_FILE   "sdp_neg_test.c"
#define START_TEST  0

enum session_type
{
    REMOTE_OFFER,
    LOCAL_OFFER,
};

struct offer_answer
{			
    enum session_type type;	/*  LOCAL_OFFER:	REMOTE_OFFER:	*/
    char *sdp1;			/* local offer		remote offer	*/
    char *sdp2;			/* remote answer	initial local	*/
    char *sdp3;			/* local active media	local answer	*/
};

struct test
{
    const char		*title;
    unsigned		 offer_answer_count;
    struct offer_answer	 offer_answer[4];
} test[] = 
{
    /* test 0: */
    {
	/*********************************************************************
	 * RFC 3264 examples, section 10.1 (Alice's view)
	 *
	 * Difference from the example:
	 *  - Bob's port number of the third media stream in the first answer
	 *    is changed (make it different than Alice's)
	 *  - in the second offer/answer exchange, Alice can't accept the
	 *    additional line since she didn't specify the capability
	 *    in the initial negotiator creation.
	 */

	"RFC 3264 example 10.1 (Alice's view)",
	2,
	{
	  {
	    LOCAL_OFFER,
	    /* Alice sends offer: */
	    "v=0\r\n"
	    "o=alice 2890844526 2890844526 IN IP4 host.anywhere.com\r\n"
	    "s= \r\n"
	    "c=IN IP4 host.anywhere.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 49170 RTP/AVP 0\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "m=video 51372 RTP/AVP 31\r\n"
	    "a=rtpmap:31 H261/90000\r\n"
	    "m=video 53000 RTP/AVP 32\r\n"
	    "a=rtpmap:32 MPV/90000\r\n",
	    /* Received Bob's answer: */
	    "v=0\r\n"
	    "o=bob 2890844730 2890844730 IN IP4 host.example.com\r\n"
	    "s= \r\n"
	    "c=IN IP4 host.example.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 49920 RTP/AVP 0\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "m=video 0 RTP/AVP 31\r\n"
	    "m=video 53002 RTP/AVP 32\r\n"
	    "a=rtpmap:32 MPV/90000\r\n",
	    /* Alice's SDP now: */
	    "v=0\r\n"
	    "o=alice 2890844526 2890844526 IN IP4 host.anywhere.com\r\n"
	    "s= \r\n"
	    "c=IN IP4 host.anywhere.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 49170 RTP/AVP 0\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "m=video 0 RTP/AVP 31\r\n"
	    "a=rtpmap:31 H261/90000\r\n"
	    "m=video 53000 RTP/AVP 32\r\n"
	    "a=rtpmap:32 MPV/90000\r\n"
	  },
	  {
	    REMOTE_OFFER,
	    /* Bob wants to change his local SDP 
	     * (change local port for the first stream and add new stream)
	     * Received SDP from Bob:
	     */
	    "v=0\r\n"
	    "o=bob 2890844730 2890844731 IN IP4 host.example.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.example.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 65422 RTP/AVP 0\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "m=video 0 RTP/AVP 31\r\n"
	    "m=video 53002 RTP/AVP 32\r\n"
	    "a=rtpmap:32 MPV/90000\r\n"
	    "m=audio 51434 RTP/AVP 110\r\n"
	    "a=rtpmap:110 telephone-events/8000\r\n"
	    "a=recvonly\r\n",
	    NULL,
	    /* Alice's SDP now */
	    "v=0\r\n"
	    "o=alice 2890844526 2890844527 IN IP4 host.anywhere.com\r\n"
	    "s= \r\n"
	    "c=IN IP4 host.anywhere.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 49170 RTP/AVP 0\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "m=video 0 RTP/AVP 31\r\n"
	    "a=rtpmap:31 H261/90000\r\n"	/* <-- this is not necessary */
	    "m=video 53000 RTP/AVP 32\r\n"
	    "a=rtpmap:32 MPV/90000\r\n"
	    "m=audio 0 RTP/AVP 110\r\n"
	    "a=rtpmap:110 telephone-events/8000\r\n"
	    "a=sendonly\r\n"
	  }
	}
    },

    /* test 1: */
    {
	/*********************************************************************
	 * RFC 3264 examples, section 10.1. (Bob's view)
	 *
	 * Difference:
	 *  - the SDP version in Bob's capability is changed to ver-1.
	 */

	"RFC 3264 example 10.1 (Bob's view)",
	2,
	{
	  {
	    REMOTE_OFFER,
	    /* Remote offer from Alice: */
	    "v=0\r\n"
	    "o=alice 2890844526 2890844526 IN IP4 host.anywhere.com\r\n"
	    "s= \r\n"
	    "c=IN IP4 host.anywhere.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 49170 RTP/AVP 0\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "m=video 51372 RTP/AVP 31\r\n"
	    "a=rtpmap:31 H261/90000\r\n"
	    "m=video 53000 RTP/AVP 32\r\n"
	    "a=rtpmap:32 MPV/90000\r\n",
	    /* Bob's capability: */
	    "v=0\r\n"
	    "o=bob 2890844730 2890844729 IN IP4 host.example.com\r\n"
	    "s= \r\n"
	    "c=IN IP4 host.example.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 49920 RTP/AVP 0\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "m=video 0 RTP/AVP 31\r\n"
	    "m=video 53000 RTP/AVP 32\r\n"
	    "a=rtpmap:32 MPV/90000\r\n",
	    /* This's how Bob's answer should look like: */
	    "v=0\r\n"
	    "o=bob 2890844730 2890844730 IN IP4 host.example.com\r\n"
	    "s= \r\n"
	    "c=IN IP4 host.example.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 49920 RTP/AVP 0\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "m=video 0 RTP/AVP 31\r\n"
	    "m=video 53000 RTP/AVP 32\r\n"
	    "a=rtpmap:32 MPV/90000\r\n"
	  },
	  {
	    LOCAL_OFFER,
	    /* Bob wants to change his local SDP 
	     * (change local port for the first stream and add new stream)
	     */
	    "v=0\r\n"
	    "o=bob 2890844730 2890844731 IN IP4 host.example.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.example.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 65422 RTP/AVP 0\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "m=video 0 RTP/AVP 31\r\n"
	    "m=video 53000 RTP/AVP 32\r\n"
	    "a=rtpmap:32 MPV/90000\r\n"
	    "m=audio 51434 RTP/AVP 110\r\n"
	    "a=rtpmap:110 telephone-events/8000\r\n"
	    "a=recvonly\r\n",
	    /* Got answer from Alice */
	    "v=0\r\n"
	    "o=alice 2890844526 2890844527 IN IP4 host.anywhere.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.anywhere.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 49170 RTP/AVP 0\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "m=video 0 RTP/AVP 31\r\n"
	    "a=rtpmap:31 H261/90000\r\n"
	    "m=video 53000 RTP/AVP 32\r\n"
	    "a=rtpmap:32 MPV/90000\r\n"
	    "m=audio 53122 RTP/AVP 110\r\n"
	    "a=rtpmap:110 telephone-events/8000\r\n"
	    "a=sendonly\r\n",
	    /* This is how Bob's SDP should look like after negotiation */
	    "v=0\r\n"
	    "o=bob 2890844730 2890844731 IN IP4 host.example.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.example.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 65422 RTP/AVP 0\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "m=video 0 RTP/AVP 31\r\n"
	    "m=video 53000 RTP/AVP 32\r\n"
	    "a=rtpmap:32 MPV/90000\r\n"
	    "m=audio 51434 RTP/AVP 110\r\n"
	    "a=rtpmap:110 telephone-events/8000\r\n"
	    "a=recvonly\r\n"
	  }
	}
    },

    /* test 2: */
    {
	/*********************************************************************
	 * RFC 3264 examples, section 10.2.
	 * This is from Alice's point of view.
	 */

	"RFC 3264 example 10.2 (Alice's view)",
	2,
	{
	  {
	    LOCAL_OFFER,
	    /* The initial offer from Alice to Bob indicates a single audio 
	     * stream with the three audio codecs that are available in the 
	     * DSP. The stream is marked as inactive, 
	     */
	    "v=0\r\n"
	    "o=alice 2890844526 2890844526 IN IP4 host.anywhere.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.anywhere.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 62986 RTP/AVP 0 4 18\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "a=rtpmap:4 G723/8000\r\n"
	    "a=rtpmap:18 G729/8000\r\n"
	    "a=inactive\r\n",
	    /* Bob can support dynamic switching between PCMU and G.723. So, 
	     * he sends the following answer:
	     */
	    "v=0\r\n"
	    "o=bob 2890844730 2890844731 IN IP4 host.example.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.example.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 54344 RTP/AVP 0 4\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "a=rtpmap:4 G723/8000\r\n"
	    "a=inactive\r\n",
	    /* This is how Alice's media should look like after negotiation */
	    "v=0\r\n"
	    "o=alice 2890844526 2890844526 IN IP4 host.anywhere.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.anywhere.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 62986 RTP/AVP 0 4\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "a=rtpmap:4 G723/8000\r\n"
	    "a=inactive\r\n",
	  },
	  {
	    LOCAL_OFFER,
	    /* Alice sends an updated offer with a sendrecv stream: */
	    "v=0\r\n"
	    "o=alice 2890844526 2890844527 IN IP4 host.anywhere.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.anywhere.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 62986 RTP/AVP 4\r\n"
	    "a=rtpmap:4 G723/8000\r\n"
	    "a=sendrecv\r\n",
	    /* Bob accepts the single codec: */
	    "v=0\r\n"
	    "o=bob 2890844730 2890844732 IN IP4 host.example.com\r\n"
	    "s= \r\n"
	    "c=IN IP4 host.example.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 54344 RTP/AVP 4\r\n"
	    "a=rtpmap:4 G723/8000\r\n"
	    "a=sendrecv\r\n",
	    /* This is how Alice's media should look like after negotiation */
	    "v=0\r\n"
	    "o=alice 2890844526 2890844527 IN IP4 host.anywhere.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.anywhere.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 62986 RTP/AVP 4\r\n"
	    "a=rtpmap:4 G723/8000\r\n"
	    "a=sendrecv\r\n"
	  }
	}
    },

    /* test 3: */
    {
	/*********************************************************************
	 * RFC 3264 examples, section 10.2.
	 * This is from Bob's point of view.
	 *
	 * Difference:
	 *  - The SDP version number in Bob's initial capability is ver-1
	 */

	"RFC 3264 example 10.2 (Bob's view)",
	2,
	{
	  {
	    REMOTE_OFFER,
	    /* Bob received offer from Alice:
	     */
	    "v=0\r\n"
	    "o=alice 2890844526 2890844526 IN IP4 host.anywhere.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.anywhere.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 62986 RTP/AVP 0 4 18\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "a=rtpmap:4 G723/8000\r\n"
	    "a=rtpmap:18 G729/8000\r\n"
	    "a=inactive\r\n",
	    /* Bob's capability:
	     */
	    "v=0\r\n"
	    "o=bob 2890844730 2890844730 IN IP4 host.example.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.example.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 54344 RTP/AVP 0 4\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "a=rtpmap:4 G723/8000\r\n"
	    "a=inactive\r\n",
	    /* This is how Bob's media should look like after negotiation */
	    "v=0\r\n"
	    "o=bob 2890844730 2890844731 IN IP4 host.example.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.example.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 54344 RTP/AVP 0\r\n"
	    "a=rtpmap:0 PCMU/8000\r\n"
	    "a=inactive\r\n"
	  },
	  {
	    REMOTE_OFFER,
	    /* Received updated Alice's SDP: offer with a sendrecv stream: */
	    "v=0\r\n"
	    "o=alice 2890844526 2890844527 IN IP4 host.anywhere.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.anywhere.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 62986 RTP/AVP 4\r\n"
	    "a=rtpmap:4 G723/8000\r\n"
	    "a=sendrecv\r\n",
	    /* Bob accepts the single codec: */
	    NULL,
	    /* This is how Bob's media should look like after negotiation */
	    "v=0\r\n"
	    "o=bob 2890844730 2890844732 IN IP4 host.example.com\r\n"
	    "s=-\r\n"
	    "c=IN IP4 host.example.com\r\n"
	    "t=0 0\r\n"
	    "m=audio 54344 RTP/AVP 4\r\n"
	    "a=rtpmap:4 G723/8000\r\n"
	    "a=sendrecv\r\n",
	  }
	}
    },

    /* test 4: */
    {
	/*********************************************************************
	 * RFC 4317 Sample 2.1: Audio and Video 1 (Alice's view)
	 *
	 * This common scenario shows a video and audio session in which
	 * multiple codecs are offered but only one is accepted.  As a result of
	 * the exchange shown below, Alice and Bob may send only PCMU audio and

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -