package com.voxeo.moho.sip;
import java.io.IOException;
import java.util.Map;
import javax.servlet.sip.SipServletRequest;
import com.voxeo.moho.Endpoint;
import com.voxeo.moho.SignalException;
import com.voxeo.moho.TextableEndpoint;
import com.voxeo.moho.common.event.MohoTextEvent;
import com.voxeo.moho.event.EventSource;
import com.voxeo.moho.sip.SIPTextEvent;
import com.voxeo.moho.spi.ExecutionContext;
public class SIPTextEventImpl<T extends EventSource> extends MohoTextEvent<T> implements SIPTextEvent<T> {
protected SipServletRequest _req;
protected ExecutionContext _ctx;
protected boolean _proxied;
protected SIPTextEventImpl(final T source, final SipServletRequest req) {
super(source);
_req = req;
_ctx = (ExecutionContext) source.getApplicationContext();
}
@Override
public SipServletRequest getSipRequest() {
return _req;
}
@Override
public String getText() {
Object content = null;
try {
content = _req.getContent();
}
catch (final IOException e) {
throw new SignalException(e);
}
return content == null ? null : String.valueOf(content);
}
@Override
public String getTextType() {
return _req.getContentType();
}
@Override
public TextableEndpoint getFrom() {
return new SIPEndpointImpl(_ctx, _req.getFrom());
}
@Override
public TextableEndpoint getTo() {
return new SIPEndpointImpl(_ctx, _req.getTo());
}
@Override
public boolean isProxied() {
return _proxied;
}
protected synchronized boolean isProcessed() {
return isProxied();
}
protected synchronized void checkState() {
if (isProcessed()) {
throw new IllegalStateException("Event is already processed and can not be processed.");
}
}
@Override
public void proxyTo(boolean recordRoute, boolean parallel, Endpoint... destinations) throws SignalException {
proxyTo(recordRoute, parallel, null, destinations);
}
@Override
public synchronized void proxyTo(boolean recordRoute, boolean parallel, Map<String, String> headers, Endpoint... destinations) {
checkState();
_proxied = true;
SIPHelper.proxyTo(_ctx.getSipFactory(), _req, headers, recordRoute, parallel, destinations);
}
}