blob: 45a79f6708baa19fd60e363ecf232c40d30b82d4 [file] [log] [blame]
Benny Prijono0a749f12005-10-31 21:02:30 +00001/* $Header: /pjproject/pjmedia/src/test/sdptest.c 8 6/12/05 11:36a Bennylp $ */
2#include <pjmedia/sdp.h>
3#include <pj/os.h>
4#include <pj/pool.h>
5#include <stdio.h>
6#include <string.h>
7
8static char *sdp[] = {
9 /*
10 "v=0\r\n"
11 "o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4\r\n"
12 "s=SDP Seminar\r\n"
13 "i=A Seminar on the session description protocol\r\n"
14 "u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps\r\n"
15 "e=mjh@isi.edu (Mark Handley)\r\n"
16 "c=IN IP4 224.2.17.12/127\r\n"
17 "t=2873397496 2873404696\r\n"
18 "a=recvonly\r\n"
19 "m=audio 49170 RTP/AVP 0\r\n"
20 "m=video 51372 RTP/AVP 31\r\n"
21 "m=application 32416 udp wb\r\n"
22 "a=orient:portrait\r\n"
23 "m=audio 49230 RTP/AVP 96 97 98\r\n"
24 "a=rtpmap:96 L8/8000\r\n"
25 "a=rtpmap:97 L16/8000\r\n"
26 "a=rtpmap:98 L16/11025/2\r\n",
27 */
28 "v=0\r\n"
29 "o=usera 2890844526 2890844527 IN IP4 alice.example.com\r\n"
30 "s=\r\n"
31 "c=IN IP4 alice.example.com\r\n"
32 "t=0 0\r\n"
33 "m=message 7394 msrp/tcp *\r\n"
34 "a=accept-types: message/cpim text/plain text/html\r\n"
35 "a=path:msrp://alice.example.com:7394/2s93i9;tcp\r\n"
36};
37
38static int sdp_perform_test(pj_pool_factory *pf)
39{
40 pj_pool_t *pool;
41 int inputlen, len;
42 pjsdp_session_desc *ses;
43 char buf[1500];
44 enum { LOOP=1000000 };
45 int i;
46 pj_time_val start, end;
47
48 printf("Parsing and printing %d SDP messages..\n", LOOP);
49
50 pool = pj_pool_create(pf, "", 4096, 0, NULL);
51 inputlen = strlen(sdp[0]);
52 pj_gettimeofday(&start);
53 for (i=0; i<LOOP; ++i) {
54 ses = pjsdp_parse(sdp[0], inputlen, pool);
55 len = pjsdp_print(ses, buf, sizeof(buf));
56 buf[len] = '\0';
57 pj_pool_reset(pool);
58 }
59 pj_gettimeofday(&end);
60
61 printf("Original:\n%s\n", sdp[0]);
62 printf("Parsed:\n%s\n", buf);
63
64 PJ_TIME_VAL_SUB(end, start);
65 printf("Time: %ld:%03lds\n", end.sec, end.msec);
66
67 if (end.msec==0 && end.sec==0) end.msec=1;
68 printf("Performance: %ld msg/sec\n", LOOP*1000/PJ_TIME_VAL_MSEC(end));
69 puts("");
70
71 pj_pool_release(pool);
72 return 0;
73}
74
75static int sdp_conform_test(pj_pool_factory *pf)
76{
77 pj_pool_t *pool;
78 pjsdp_session_desc *ses;
79 int i, len;
80 char buf[1500];
81
82 for (i=0; i<sizeof(sdp)/sizeof(sdp[0]); ++i) {
83 pool = pj_pool_create(pf, "sdp", 4096, 0, NULL);
84 ses = pjsdp_parse(sdp[i], strlen(sdp[i]), pool);
85 len = pjsdp_print(ses, buf, sizeof(buf));
86 buf[len] = '\0';
87 printf("%s\n", buf);
88 pj_pool_release(pool);
89 }
90
91 return 0;
92}
93
94pj_status_t sdp_test(pj_pool_factory *pf)
95{
96 if (sdp_conform_test(pf) != 0)
97 return -2;
98
99 if (sdp_perform_test(pf) != 0)
100 return -3;
101
102 return 0;
103}
104