package org.mobicents.media.server.ctrl.rtsp;
import java.io.File;
import java.net.URI;
import java.util.concurrent.Callable;
import org.apache.log4j.Logger;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.handler.codec.http.HttpHeaders;
import org.mobicents.rtsp.DefaultRtspResponse;
import org.mobicents.rtsp.RtspHeaders;
import org.mobicents.rtsp.RtspRequest;
import org.mobicents.rtsp.RtspResponse;
import org.mobicents.rtsp.RtspResponseStatus;
import org.mobicents.rtsp.RtspVersion;
/**
*
* @author amit bhayani
*
*/
public class DescribeAction implements Callable<RtspResponse> {
private static Logger logger = Logger.getLogger(DescribeAction.class);
private RtspController rtspController = null;
private RtspRequest request = null;
private final SdpUtils sdpUtils;
public DescribeAction(RtspController rtspController, RtspRequest request) {
this.rtspController = rtspController;
this.request = request;
this.sdpUtils = new SdpUtils();
}
public RtspResponse call() throws Exception {
RtspResponse response = null;
String mediaDir = this.rtspController.getMediaDir();
URI objUri = new URI(this.request.getUri());
mediaDir += objUri.getPath();
if (logger.isDebugEnabled()) {
logger.debug("Final path = " + mediaDir);
}
File f = new File(mediaDir);
if (f.isFile() && f.exists()) {
String sdp = this.sdpUtils.getSdp(f, this.rtspController.getBindAddress(), 9000, this.request.getUri());
response = new DefaultRtspResponse(RtspVersion.RTSP_1_0, RtspResponseStatus.OK);
response.setHeader(HttpHeaders.Names.SERVER, RtspController.SERVER);
response.setHeader(RtspHeaders.Names.CSEQ, this.request.getHeader(RtspHeaders.Names.CSEQ));
response.setHeader(HttpHeaders.Names.CONTENT_TYPE, "application/sdp");
response.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(sdp.length()));
response.setContent(ChannelBuffers.copiedBuffer(sdp, "UTF-8"));
} else {
response = new DefaultRtspResponse(RtspVersion.RTSP_1_0, RtspResponseStatus.NOT_FOUND);
response.setHeader(HttpHeaders.Names.SERVER, RtspController.SERVER);
response.setHeader(RtspHeaders.Names.CSEQ, this.request.getHeader(RtspHeaders.Names.CSEQ));
}
return response;
}
}