/* * Copyright (C) 2005 Luca Veltri - University of Parma - Italy * * This file is part of MjSip (http://www.mjsip.org) * * MjSip is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * MjSip is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MjSip; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Author(s): * Luca Veltri (luca.veltri@unipr.it) */ package org.zoolu.sdp; import java.util.Vector; /** Class MediaDescriptor handles SDP media descpriptions. * <p> A MediaDescriptor can be part of a SessionDescriptor, and contains * details that apply onto to a single media stream. * <p> A single SessionDescriptor may convey zero or more MediaDescriptors. * <p> In the current implementation, the MediaDescriptor consists of * the m (media) and c (connection information) fields, followed by zero * or more a (attribute) fields. * The m field is mandatory for a MediaDescriptor. */ public class MediaDescriptor { /** Media field ('m'). */ MediaField m; /** Connection field ('c') */ ConnectionField c; /** Vector of attribute fileds ('a') */ Vector av; /** Creates a new MediaDescriptor. * @param md the cloned MediaDescriptor */ public MediaDescriptor(MediaDescriptor md) { m=new MediaField(md.m); if (md.c!=null) c=new ConnectionField(md.c); else c=null; av=new Vector(); for (int i=0; i<md.av.size(); i++) av.addElement(new AttributeField((AttributeField)md.av.elementAt(i))); } /** Creates a new MediaDescriptor with m <i>media</i> and c <i>connection</i>. * No attribute is set by default. * @param media the MediaField * @param connection the ConnectionField, or null if no ConnectionField * is present in the MediaDescriptor */ public MediaDescriptor(MediaField media, ConnectionField connection) { m=media; c=connection; av=new Vector(); } /** Creates a new MediaDescriptor with m <i>media</i>, c <i>connection</i>, * and a <i>attribute</i>. * @param media the MediaField * @param connection the ConnectionField, or null if no ConnectionField * is present in the MediaDescriptor * @param attribute the first AttributeField */ public MediaDescriptor(MediaField media, ConnectionField connection, AttributeField attribute) { m=media; c=connection; av=new Vector(); if (attribute!=null) av.addElement(attribute); } /** Creates a new MediaDescriptor with m=<i>media</i> and c=<i>connection</i>, * with attributes 'a' equals to <i>attributes</i> (Vector of AttributeField). * @param media the MediaField * @param connection the ConnectionField, or null if no ConnectionField * is present in the MediaDescriptor * @param attributes the Vector of AttributeField */ public MediaDescriptor(MediaField media, ConnectionField connection, Vector attributes) { m=media; c=connection; av=new Vector(attributes.size()); av.setSize(attributes.size()); for (int i=0; i<attributes.size(); i++) av.setElementAt((AttributeField)attributes.elementAt(i),i); } /** Creates a new MediaDescriptor with m <i>media</i>, c <i>connection</i>, * and a <i>attribute</i>. * @param media the media field vaule * @param connection the connection field vaule, or null if no connection field * is present in the MediaDescriptor * @param attribute the first media attribute alue */ public MediaDescriptor(String media, String connection, String attribute) { m=new MediaField(media); if (connection!=null) c=new ConnectionField(connection); av=new Vector(); if (attribute!=null) av.addElement(new AttributeField(attribute)); } /** Creates a new MediaDescriptor from String <i>str</i>. * @param str the media field line */ /*public MediaDescriptor(String str) { SdpParser par=new SdpParser(str); m=par.parseMediaField(); c=par.parseConnectionField(); av=new Vector(); AttributeField a=par.parseAttributeField(); while (a!=null) { av.addElement(a); a=par.parseAttributeField(); } }*/ /** Gets media. * @return the MediaField */ public MediaField getMedia() { return m; } /** Gets connection information. * @return the ConnectionField */ public ConnectionField getConnection() { return c; } /** Gets a Vector of attribute values. * @return a Vector of AttributeField */ public Vector getAttributes() { Vector v=new Vector(av.size()); for (int i=0; i<av.size(); i++) v.addElement((AttributeField)av.elementAt(i)); return v; } /** Adds a new attribute * @param attribute the new AttributeField * @return this MediaDescriptor */ public MediaDescriptor addAttribute(AttributeField attribute) { av.addElement(new AttributeField(attribute)); return this; } /** Whether it has a particular attribute * @param a_name the attribute name * @return true if found, otherwise returns null */ public boolean hasAttribute(String a_name) { for (int i=0; i<av.size(); i++) { if (((AttributeField)av.elementAt(i)).getAttributeName().equals(a_name)) return true; } return false; } /** Gets a particular attribute * @param a_name the attribute name * @return the AttributeField, or null if not found */ public AttributeField getAttribute(String a_name) { for (int i=0; i<av.size(); i++) { AttributeField a=(AttributeField)av.elementAt(i); if (a.getAttributeName().equals(a_name)) return a; } return null; } /** Gets a Vector of attribute values of a particular attribute name. * @param a_name the attribute name * @return a Vector of AttributeFields */ public Vector getAttributes(String a_name) { Vector v=new Vector(av.size()); for (int i=0; i<av.size(); i++) { AttributeField a=(AttributeField)av.elementAt(i); if (a.getAttributeName().equals(a_name)) v.addElement(a); } return v; } /** Gets a String rapresentation of the MediaDescriptor. * @return the string representation */ public String toString() { String str=""; str+=m; if (c!=null) str+=c; for (int i=0; i<av.size(); i++) str+=(AttributeField)av.elementAt(i); return str; } }