sdp_dump.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:9k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is MPEG4IP.
  13.  * 
  14.  * The Initial Developer of the Original Code is Cisco Systems Inc.
  15.  * Portions created by Cisco Systems Inc. are
  16.  * Copyright (C) Cisco Systems Inc. 2000, 2001.  All Rights Reserved.
  17.  * 
  18.  * Contributor(s): 
  19.  *              Bill May        wmay@cisco.com
  20.  */
  21. /*
  22.  * sdp_dump.c
  23.  *
  24.  * dump SDP structure to stdout
  25.  *
  26.  * October, 2000
  27.  * Bill May (wmay@cisco.com)
  28.  * Cisco Systems, Inc.
  29.  */
  30. #include "sdp.h"
  31. #include <time.h>
  32. #include "sdp_decode_private.h"
  33. static void time_repeat_dump (time_repeat_desc_t *trptr)
  34. {
  35.   int morethan1;
  36.   char buffer[80], *start;
  37.   int cnt;
  38.   uint32_t ix;
  39.   morethan1 = trptr != NULL && trptr->next != NULL;
  40.   cnt = 0;
  41.   
  42.   while (trptr != NULL) {
  43.     if (morethan1) {
  44.       printf("Repeat %d:n", cnt + 1);
  45.       start = "t";
  46.     } else {
  47.       start = "";
  48.     }
  49.     cnt++;
  50.     sdp_time_offset_to_str(trptr->repeat_interval, buffer, sizeof(buffer));
  51.     printf("%sRepeat Interval: %sn", start, buffer);
  52.     sdp_time_offset_to_str(trptr->active_duration, buffer, sizeof(buffer));
  53.     printf("%sDuration of session: %sn", start, buffer);
  54.     printf("%sOffsets: ", start);
  55.     for (ix = 0; ix < trptr->offset_cnt; ix++) {
  56.       sdp_time_offset_to_str(trptr->offsets[ix], buffer, sizeof(buffer));
  57.       printf("%s ", buffer);
  58.       if ((ix % 8) == 0) {
  59. printf("n%s", start);
  60.       }
  61.     }
  62.     trptr = trptr->next;
  63.   }
  64. }
  65.   
  66. static void time_dump (session_time_desc_t *tptr) {
  67.   while (tptr != NULL) {
  68.     if (tptr->end_time == 0 &&
  69. tptr->start_time == 0) {
  70.       printf("Start/End time is 0n");
  71.     } else {
  72.       if (tptr->start_time != 0) {
  73. printf("Start Time: %s", ctime(&tptr->start_time));
  74.       } else {
  75. printf("Start Time is 0n");
  76.       }
  77.       if (tptr->end_time != 0) {
  78. printf("End Time: %s", ctime(&tptr->end_time));
  79.       } else {
  80. printf("End Time is 0n");
  81.       }
  82.     }
  83.     time_repeat_dump(tptr->repeat);
  84.     tptr = tptr->next;
  85.    
  86.   }
  87. }
  88. static void time_adj_dump (time_adj_desc_t *taptr)
  89. {
  90.   while (taptr != NULL) {
  91.     printf("Adjustment of %d on %s", taptr->offset, ctime(&taptr->adj_time));
  92.     taptr = taptr->next;
  93.   }
  94. }
  95. static void unparsed_dump (string_list_t *uptr,
  96.    char *start)
  97. {
  98.   printf("%sUnparsed lines:n", start);
  99.   while (uptr != NULL) {
  100.     printf("t%s%sn", start, uptr->string_val);
  101.     uptr = uptr->next;
  102.   }
  103. }
  104. static void bandwidth_dump (bandwidth_t *bptr, char *start)
  105. {
  106.   while (bptr != NULL) {
  107.     printf("%s Bandwidth: %ld ", start, bptr->bandwidth);
  108.     if (bptr->modifier == BANDWIDTH_MODIFIER_USER) {
  109.       printf("(%s)", bptr->user_band);
  110.     } else {
  111.       printf("(%s)",
  112.      bptr->modifier == BANDWIDTH_MODIFIER_AS ? "AS type" : "CT type");
  113.     }
  114.     printf("n");
  115.     bptr = bptr->next;
  116.   }
  117. }
  118. static void category_dump (category_list_t *cptr)
  119. {
  120.   int ix = 0;
  121.   if (cptr == NULL)
  122.     return;
  123.   printf("Category: ");
  124.   while (cptr != NULL) {
  125.     printf("%lld ", cptr->category);
  126.     ix++;
  127.     if (ix >= 8) {
  128.       printf("n");
  129.       ix = 0;
  130.     }
  131.     cptr = cptr->next;
  132.   }
  133.   if (ix != 0) printf("n");
  134. }
  135. static void key_dump (key_desc_t *sptr)
  136. {
  137.   switch (sptr->key_type) {
  138.   case KEY_TYPE_PROMPT:
  139.     printf("Key: promptn");
  140.     break;
  141.   case KEY_TYPE_CLEAR:
  142.     printf("Key: clear : %sn", sptr->key);
  143.     break;
  144.   case KEY_TYPE_BASE64:
  145.     printf("Key: base64n");
  146.     break;
  147.   case KEY_TYPE_URI:
  148.     printf("Key: uri : %s", sptr->key);
  149.     break;
  150.   default:
  151.     break;
  152.   }
  153. }
  154. static void range_dump (range_desc_t *rptr, const char *start)
  155. {
  156.   char buffer[80];
  157.   if (rptr->have_range == FALSE) return;
  158.   printf("%sRange is ", start);
  159.   if (rptr->range_is_npt) {
  160.     printf("npt - start %g, end ", rptr->range_start);
  161.     if (rptr->range_end_infinite) {
  162.       printf("infiniten");
  163.     } else {
  164.       printf("%gn", rptr->range_end);
  165.     }
  166.   } else {
  167.     printf("smtpe - start ");
  168.     sdp_smpte_to_str(rptr->range_start, rptr->range_smpte_fps, buffer);
  169.     printf("%s, end ", buffer);
  170.     if (rptr->range_end_infinite) {
  171.       printf("infiniten");
  172.     } else {
  173.       sdp_smpte_to_str(rptr->range_end, rptr->range_smpte_fps, buffer);
  174.       printf("%sn", buffer);
  175.     }
  176.   }
  177. }
  178. static void media_dump (media_desc_t *mptr)
  179. {
  180.   format_list_t *fptr;
  181.   int ix;
  182.   
  183.   printf("tMedia type: %sn", mptr->media);
  184.   printf("tMedia proto: %sn", mptr->proto);
  185.   if (mptr->media_desc)
  186.     printf("tMedia description: %sn", mptr->media_desc);
  187.   if (mptr->media_connect.used) {
  188.     printf("tMedia Address: %s", mptr->media_connect.conn_addr);
  189.     if (strcasecmp(mptr->media_connect.conn_type, "IP4") != 0) {
  190.       printf("(address type %s)", mptr->media_connect.conn_type);
  191.     }
  192.     if (mptr->media_connect.num_addr > 0) {
  193.       printf("(%u addresses)", mptr->media_connect.num_addr);
  194.     }
  195.     printf("ntMedia TTL: %un", mptr->media_connect.ttl);
  196.   }
  197.   printf("tMedia port number: %d", mptr->port);
  198.   if (mptr->num_ports > 1) {
  199.     printf("/%d", mptr->num_ports);
  200.   }
  201.   printf("n");
  202.   bandwidth_dump(mptr->media_bandwidth, "ntMedia");
  203.   if (mptr->recvonly) {
  204.     printf("tReceive Only Setn");
  205.   }
  206.   if (mptr->sendrecv) {
  207.     printf("tSend/Receive Setn");
  208.   }
  209.   if (mptr->sendonly) {
  210.     printf("tSend Only Setn");
  211.   }
  212.   if (mptr->ptime_present) {
  213.     printf("tPacket Time: %dn", mptr->ptime);
  214.   }
  215.   if (mptr->quality_present) {
  216.     printf("tQuality: %dn", mptr->quality);
  217.   }
  218.   if (mptr->framerate_present) {
  219.     printf("tFramerate: %fn", mptr->framerate);
  220.   }
  221.   if (mptr->control_string) {
  222.     printf("tControl: %sn", mptr->control_string);
  223.   }
  224.   range_dump(&mptr->media_range, "t");
  225.   printf("tMedia formats: ");
  226.   fptr = mptr->fmt;
  227.   ix = 0;
  228.   while (fptr != NULL) {
  229.     if (ix >= 6) {
  230.       printf("ntt");
  231.       ix = 0;
  232.     }
  233.     printf("%s", fptr->fmt);
  234.     if (fptr->rtpmap != NULL) {
  235.       printf("(%s %u", fptr->rtpmap->encode_name, fptr->rtpmap->clock_rate);
  236.       if (fptr->rtpmap->encode_param != 0){
  237. printf(" %u", fptr->rtpmap->encode_param);
  238.       }
  239.       printf(")");
  240.       ix += 2;
  241.     }
  242.     if (fptr->fmt_param != NULL) {
  243.       printf("(%s)", fptr->fmt_param);
  244.       ix += 4;
  245.     }
  246.     printf(" ");
  247.     ix++;
  248.     fptr = fptr->next;
  249.   }
  250.   printf("n");
  251.   unparsed_dump(mptr->unparsed_a_lines, "t");
  252. }
  253.   
  254. void session_dump_one (session_desc_t *sptr)
  255. {
  256.   int ix;
  257.   media_desc_t *media;
  258.   string_list_t *strptr;
  259.   
  260.   printf("Session name: %sn", sptr->session_name);
  261.   if (sptr->session_desc != NULL) {
  262.     printf("Description: %sn", sptr->session_desc);
  263.   }
  264.   if (sptr->uri != NULL) {
  265.     printf("URI: %sn", sptr->uri);
  266.   }
  267.   if (sptr->orig_username) {
  268.     printf("Origin username: %sn", sptr->orig_username);
  269.   }
  270.   printf("Session id: %lldnSession version: %lldn",
  271.  sptr->session_id,
  272.  sptr->session_version);
  273.   if (sptr->create_addr)
  274.     printf("Session created by: %s", sptr->create_addr);
  275.   if (sptr->create_addr_type &&
  276.       strcasecmp(sptr->create_addr_type, "IP4") != 0) {
  277.     printf("address type %s", sptr->create_addr_type);
  278.   }
  279.   printf("n");
  280.   if (sptr->conf_type != CONFERENCE_TYPE_NONE) {
  281.     printf("Conference type: %sn",
  282.    sptr->conf_type < CONFERENCE_TYPE_OTHER ?
  283.    type_values[sptr->conf_type - 1] : sptr->conf_type_user);
  284.   }
  285.     
  286.   if (sptr->keywds) printf("Keywords: %sn", sptr->keywds);
  287.   if (sptr->tool) printf("Tool: %sn", sptr->tool);
  288.   category_dump(sptr->category_list);
  289.   strptr = sptr->admin_email;
  290.   while (strptr != NULL) {
  291.     printf("Admin email: %sn", strptr->string_val);
  292.     strptr = strptr->next;
  293.   }
  294.   strptr = sptr->admin_phone;
  295.   while (strptr != NULL) {
  296.     printf("Admin phone: %sn", strptr->string_val);
  297.     strptr = strptr->next;
  298.   }
  299.   key_dump(&sptr->key);
  300.   time_dump(sptr->time_desc);
  301.   time_adj_dump(sptr->time_adj_desc);
  302.   if (sptr->session_connect.used) {
  303.     printf("Session Address: %s", sptr->session_connect.conn_addr);
  304.     if (strcasecmp(sptr->session_connect.conn_type, "IP4") != 0) {
  305.       printf("(address type %s)", sptr->session_connect.conn_type);
  306.     }
  307.     if (sptr->session_connect.num_addr > 0) {
  308.       printf("(%u addresses)", sptr->session_connect.num_addr);
  309.     }
  310.     printf("ntSession TTL: %un", sptr->session_connect.ttl);
  311.   }
  312.   range_dump(&sptr->session_range, "");
  313.   bandwidth_dump(sptr->session_bandwidth, "Session");
  314.   if (sptr->control_string) {
  315.     printf("Control: %sn", sptr->control_string);
  316.   }
  317.   unparsed_dump(sptr->unparsed_a_lines, "");
  318.   ix = 0;
  319.   media = sptr->media;
  320.   while (media != NULL) {
  321.     printf("Media description %d:n", ix + 1);
  322.     media_dump(media);
  323.     media = media->next;
  324.     ix++;
  325.   }
  326.   if (ix == 0) {
  327.     printf("No media descriptions for sessionn");
  328.   }
  329. }
  330. void session_dump_list (session_desc_t *sptr)
  331. {
  332.   while (sptr != NULL) {
  333.     session_dump_one(sptr);
  334.     printf("n");
  335.     sptr = sptr->next;
  336.     if (sptr) {
  337.       printf("------------------------------------------------------n");
  338.     }
  339.   }
  340. }