/*
* 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.sip.call;
import org.zoolu.sdp.*;
import java.util.Enumeration;
import java.util.Vector;
/** Class SdpTools collects some static methods for managing SDP materials.
*/
public class SdpTools
{
/** Costructs a new SessionDescriptor from a given SessionDescriptor
* with olny media types and attribute values specified by a MediaDescriptor Vector.
* <p> If no attribute is specified for a particular media, all present attributes are kept.
* <br>If no attribute is present for a selected media, the media is kept (regardless any sepcified attributes).
* @param sdp the given SessionDescriptor
* @param m_descs Vector of MediaDescriptor with the selecting media types and attributes
* @return this SessionDescriptor */
public static SessionDescriptor sdpMediaProduct(SessionDescriptor sdp, Vector m_descs)
{
/*
Vector new_media=new Vector();
if (m_descs!=null)
{
System.err.println("m_descs="+m_descs);
for (Enumeration e=m_descs.elements(); e.hasMoreElements(); )
{
System.err.println("foo!");
MediaDescriptor spec_md=(MediaDescriptor)e.nextElement();
System.err.println("spec_md="+spec_md);
//System.err.print("DEBUG: SDP: sdp_select: "+spec_md.toString());
MediaDescriptor prev_md=sdp.getMediaDescriptor(spec_md.getMedia().getMedia());
System.err.println("prev_md="+prev_md);
//System.err.print("DEBUG: SDP: sdp_origin: "+prev_md.toString());
if (prev_md!=null)
{
System.err.println("prev_md!=null");
System.err.println("prev_md="+prev_md);
Vector spec_attributes=spec_md.getAttributes();
System.err.println("spec_attributes="+spec_attributes);
Vector prev_attributes=prev_md.getAttributes();
System.err.println("prev_attributes="+prev_attributes);
if (spec_attributes.size()==0 || prev_attributes.size()==0)
{
System.err.println("spec_attributes>0");
new_media.addElement(prev_md);
}
else
{
System.err.println("spec_attributes=0");
Vector new_attributes=new Vector();
for (Enumeration i=spec_attributes.elements(); i.hasMoreElements(); )
{ AttributeField spec_attr=(AttributeField)i.nextElement();
String spec_name=spec_attr.getAttributeName();
String spec_value=spec_attr.getAttributeValue();
for (Enumeration k=prev_attributes.elements(); k.hasMoreElements(); )
{ AttributeField prev_attr=(AttributeField)k.nextElement();
String prev_name=prev_attr.getAttributeName();
String prev_value=prev_attr.getAttributeValue();
if (prev_name.equals(spec_name) && prev_value.equalsIgnoreCase(spec_value))
{ new_attributes.addElement(prev_attr);
break;
}
}
}
if (new_attributes.size()>0) new_media.addElement(new MediaDescriptor(prev_md.getMedia(),prev_md.getConnection(),new_attributes));
}
}
}
}
SessionDescriptor new_sdp=new SessionDescriptor(sdp);
new_sdp.removeMediaDescriptors();
System.err.println("new_media="+new_media);
new_sdp.addMediaDescriptors(new_media);
// return new_sdp;
*/
return sdp;
}
/** Costructs a new SessionDescriptor from a given SessionDescriptor
* with olny the first specified media attribute.
/** Keeps only the fisrt attribute of the specified type for each media.
* <p> If no attribute is present for a media, the media is dropped.
* @param sdp the given SessionDescriptor
* @param a_name the attribute name
* @return this SessionDescriptor */
public static SessionDescriptor sdpAttirbuteSelection(SessionDescriptor sdp, String a_name)
{ Vector new_media=new Vector();
for (Enumeration e=sdp.getMediaDescriptors().elements(); e.hasMoreElements(); )
{ MediaDescriptor md=(MediaDescriptor)e.nextElement();
AttributeField attr=md.getAttribute(a_name);
if (attr!=null)
{ new_media.addElement(new MediaDescriptor(md.getMedia(),md.getConnection(),attr));
}
}
SessionDescriptor new_sdp=new SessionDescriptor(sdp);
new_sdp.removeMediaDescriptors();
new_sdp.addMediaDescriptors(new_media);
return new_sdp;
}
}