/* This file is part of Peers, a java SIP softphone. This program 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 3 of the License, or any later version. This program 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 this program. If not, see . Copyright 2007, 2008, 2009, 2010 Yohann Martineau */ package peers.sip.core.useragent; import org.tinylog.Logger; import peers.sip.RFC3261; import peers.sip.core.useragent.handlers.ByeHandler; import peers.sip.core.useragent.handlers.CancelHandler; import peers.sip.core.useragent.handlers.InviteHandler; import peers.sip.core.useragent.handlers.OptionsHandler; import peers.sip.core.useragent.handlers.RegisterHandler; import peers.sip.syntaxencoding.NameAddress; import peers.sip.syntaxencoding.SipHeaderFieldName; import peers.sip.syntaxencoding.SipHeaderFieldValue; import peers.sip.syntaxencoding.SipHeaderParamName; import peers.sip.syntaxencoding.SipHeaders; import peers.sip.syntaxencoding.SipURI; import peers.sip.syntaxencoding.SipUriSyntaxException; import peers.sip.transaction.TransactionManager; import peers.sip.transactionuser.Dialog; import peers.sip.transactionuser.DialogManager; import peers.sip.transport.SipRequest; import peers.sip.transport.SipResponse; import peers.sip.transport.TransportManager; public abstract class RequestManager { public static SipURI getDestinationUri(SipRequest sipRequest ) { SipHeaders requestHeaders = sipRequest.getSipHeaders(); SipURI destinationUri = null; SipHeaderFieldValue route = requestHeaders.get( new SipHeaderFieldName(RFC3261.HDR_ROUTE)); if (route != null) { try { destinationUri = new SipURI( NameAddress.nameAddressToUri(route.toString())); } catch (SipUriSyntaxException e) { Logger.error("syntax error", e); } } if (destinationUri == null) { destinationUri = sipRequest.getRequestUri(); } return destinationUri; } public static SipResponse generateResponse(SipRequest sipRequest, Dialog dialog, int statusCode, String reasonPhrase) { //8.2.6.2 SipResponse sipResponse = new SipResponse(statusCode, reasonPhrase); SipHeaders requestHeaders = sipRequest.getSipHeaders(); SipHeaders responseHeaders = sipResponse.getSipHeaders(); SipHeaderFieldName fromName = new SipHeaderFieldName(RFC3261.HDR_FROM); responseHeaders.add(fromName, requestHeaders.get(fromName)); SipHeaderFieldName callIdName = new SipHeaderFieldName(RFC3261.HDR_CALLID); responseHeaders.add(callIdName, requestHeaders.get(callIdName)); SipHeaderFieldName cseqName = new SipHeaderFieldName(RFC3261.HDR_CSEQ); responseHeaders.add(cseqName, requestHeaders.get(cseqName)); SipHeaderFieldName viaName = new SipHeaderFieldName(RFC3261.HDR_VIA); responseHeaders.add(viaName, requestHeaders.get(viaName));//TODO check ordering SipHeaderFieldName toName = new SipHeaderFieldName(RFC3261.HDR_TO); SipHeaderFieldValue toValue = requestHeaders.get(toName); SipHeaderParamName toTagParamName = new SipHeaderParamName(RFC3261.PARAM_TAG); String toTag = toValue.getParam(toTagParamName); if (toTag == null) { if (dialog != null) { toTag = dialog.getLocalTag(); toValue.addParam(toTagParamName, toTag); } } responseHeaders.add(toName, toValue); return sipResponse; } protected InviteHandler inviteHandler; protected CancelHandler cancelHandler; protected ByeHandler byeHandler; protected OptionsHandler optionsHandler; protected RegisterHandler registerHandler; protected UserAgent userAgent; protected TransactionManager transactionManager; protected TransportManager transportManager; public RequestManager(UserAgent userAgent, InviteHandler inviteHandler, CancelHandler cancelHandler, ByeHandler byeHandler, OptionsHandler optionsHandler, RegisterHandler registerHandler, DialogManager dialogManager, TransactionManager transactionManager, TransportManager transportManager) { this.userAgent = userAgent; this.inviteHandler = inviteHandler; this.cancelHandler = cancelHandler; this.byeHandler = byeHandler; this.optionsHandler = optionsHandler; this.registerHandler = registerHandler; this.transactionManager = transactionManager; this.transportManager = transportManager; } public InviteHandler getInviteHandler() { return inviteHandler; } public ByeHandler getByeHandler() { return byeHandler; } public RegisterHandler getRegisterHandler() { return registerHandler; } }