package com.voxeo.moho.util;
import java.io.IOException;
import javax.sdp.MediaDescription;
import javax.sdp.Origin;
import javax.sdp.SdpException;
import javax.sdp.SdpFactory;
import javax.sdp.SessionDescription;
import org.apache.log4j.Logger;
import com.voxeo.moho.sip.SIPCallImpl;
import com.voxeo.moho.spi.ExecutionContext;
public class SDPUtils {
private static final Logger LOG = Logger.getLogger(SDPUtils.class);
private static SdpFactory sdpFactory;
public static void init(ExecutionContext context) {
sdpFactory = context.getSdpFactory();
}
public static byte[] formulateSDP(SIPCallImpl call, Object sdp) throws IOException {
SessionDescription sd = null;
if (sdp instanceof byte[]) {
try {
sd = sdpFactory.createSessionDescription(new String((byte[]) sdp, "iso8859-1"));
}
catch (Exception e) {
LOG.warn("Exception when parsing SDP.", e);
return (byte[]) sdp;
}
}
else {
sd = (SessionDescription) sdp;
}
try {
Origin previousOrigin = call.getPreviousOrigin();
if (previousOrigin != null) {
previousOrigin.setSessionVersion(previousOrigin.getSessionVersion() + 1);
sd.setOrigin(previousOrigin);
}
else {
call.setPreviousOrigin(sd.getOrigin());
}
}
catch (Exception ex) {
LOG.warn("Exception when parsing SDP.", ex);
}
byte[] newSDP = sd.toString().getBytes("iso8859-1");
call.setLocalSDP(newSDP);
return newSDP;
}
public static byte[] makeBlackholeSDP(byte[] sdp) throws IOException, SdpException {
SessionDescription sd = sdpFactory.createSessionDescription(new String((byte[]) sdp, "iso8859-1"));
if (sd.getConnection() != null) {
sd.getConnection().setAddress("0.0.0.0");
}
MediaDescription md = (MediaDescription) sd.getMediaDescriptions(false).get(0);
if (md.getConnection() != null) {
md.getConnection().setAddress("0.0.0.0");
}
return sd.toString().getBytes("iso8859-1");
}
}