All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.pkts.packet.sip.impl.ImmutableSipRequest Maven / Gradle / Ivy

package io.pkts.packet.sip.impl;

import io.pkts.buffer.Buffer;
import io.pkts.packet.sip.SipParseException;
import io.pkts.packet.sip.SipRequest;
import io.pkts.packet.sip.SipResponse;
import io.pkts.packet.sip.address.URI;
import io.pkts.packet.sip.header.SipHeader;

import java.util.List;
import java.util.Map;

/**
 * @author [email protected]
 */
public class ImmutableSipRequest extends ImmutableSipMessage implements SipRequest {


    /**
     * @param message            the full immutable buffer which has the entire SIP message in it, including all headers, body
     *                           initial line etc.
     * @param initialLine        the parsed initial line (which is just a reference into the message buffer)
     * @param headers
     * @param body
     */
    protected ImmutableSipRequest(final Buffer message,
                                  final SipRequestLine initialLine,
                                  final Map> headers,
                                  final SipHeader toHeader,
                                  final SipHeader fromHeader,
                                  final SipHeader cSeqHeader,
                                  final SipHeader callIdHeader,
                                  final SipHeader maxForwardsHeader,
                                  final SipHeader viaHeader,
                                  final SipHeader routeHeader,
                                  final SipHeader recordRouteHeader,
                                  final SipHeader contactHeader,
                                  final Buffer body) {

        super(message,
              initialLine,
              headers,
              toHeader,
              fromHeader,
              cSeqHeader,
              callIdHeader,
              maxForwardsHeader,
              viaHeader,
              routeHeader,
              recordRouteHeader,
              contactHeader,
              body);
    }

    @Override
    public URI getRequestUri() throws SipParseException {
        return getInitialLineAsObject().toRequestLine().getRequestUri();
    }

    @Override
    public Buffer getMethod() throws SipParseException {
        return getInitialLineAsObject().toRequestLine().getMethod();
    }

    @Override
    public SipResponse.Builder createResponse(final int responseCode, final Buffer content) throws SipParseException, ClassCastException {
        final SipResponse.Builder builder = SipResponse.withStatusCode(responseCode);
        builder.withFromHeader(getFromHeader());
        builder.withToHeader(getToHeader());
        builder.withCSeqHeader(getCSeqHeader());
        builder.withCallIdHeader(getCallIDHeader());
        builder.withViaHeaders(getViaHeaders());
        return builder;
    }

    @Override
    public SipRequest.Builder copy() {
        final SipRequest.Builder builder = SipRequest.withMethod(getMethod()).withRequestURI(getRequestUri());
        builder.withHeaders(getAllHeaders());
        builder.withBody(getContent());
        return builder;
    }


    @Override
    final public SipRequest clone() {
        // everything is immutable so no real reason to actually clone
        // TODO: remove the clone method alltogether?
        return this;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy