📄 testforce.cxx
字号:
#if defined(HAVE_CONFIG_H)#include "resip/stack/config.hxx" #endif#include <iostream>#if defined (HAVE_POPT_H) #include <popt.h>#else#ifndef WIN32#warning "will not work very well without libpopt"#endif#endif#include "resip/stack/SipStack.hxx"//#include "resip/stack/UdpTransport.hxx"#include "resip/stack/Helper.hxx"#include "resip/stack/SipMessage.hxx"#include "resip/stack/Uri.hxx"#include "rutil/Data.hxx"#include "rutil/DnsUtil.hxx"#include "rutil/Logger.hxx"#include "rutil/DataStream.hxx"#include "resip/stack/MethodHash.hxx"using namespace resip;using namespace std;#define RESIPROCATE_SUBSYSTEM Subsystem::SIPintmain(int argc, char* argv[]){ char* logType = 0; char* logLevel = 0; int sipPort = 5060; char * ruri = 0; char * toUri = 0; char * fromUri = 0; char * contactUri = 0; char * targetUri = 0; char * method = 0; int seltime = 500;#if defined (HAVE_POPT_H) struct poptOption table[] = { {"sip-port", 'p', POPT_ARG_INT, &sipPort, 0, "Port for SIP stack to listen / send on.",0 }, {"select-time", 'T', POPT_ARG_INT, &seltime, 0, "Select upper bound in ms.", 0}, {"log-type", 'l', POPT_ARG_STRING, &logType, 0, "where to send logging messages", "syslog|cerr|cout"}, {"log-level", 'v', POPT_ARG_STRING, &logLevel, 0, "specify the default log level", "DEBUG|INFO|WARNING|ALERT"}, {"ruri", 'r', POPT_ARG_STRING, &ruri, 0, "The Request-URI for this message", 0}, {"to", 't', POPT_ARG_STRING, &toUri, 0, "The To: Header URI", 0}, {"from", 'f', POPT_ARG_STRING, &fromUri, 0, "The From: Header URI", 0}, {"ctc", 'm', POPT_ARG_STRING, &contactUri,0, "The Contact: URI", 0}, {"target-uri", 'g', POPT_ARG_STRING, &targetUri, 0, "The target (forced) URI", 0}, {"method", 'M', POPT_ARG_STRING, &method, 0, "The method to use", "REGISTER|INVITE|OPTIONS|MESSAGE|CANCEL|ACK|BYE"}, POPT_AUTOHELP { 0, 0, 0, 0, 0 } }; poptContext context = poptGetContext(NULL, argc, const_cast<const char**>(argv), table, 0); poptGetNextOpt(context); poptFreeContext(context);#endif Log::initialize(logType, logLevel, argv[0]); if (!ruri) { ErrLog(<<"Not much to do with an RURI"); return -1; } if (!toUri) { InfoLog(<<"No To URI, using URI." << ruri); toUri = ruri; } if (!fromUri) { InfoLog(<<"No From URI, using To URI." << toUri); fromUri = toUri; } MethodTypes meth(OPTIONS); if (method) { meth=getMethodType(method); if (meth == UNKNOWN) { ErrLog(<<"Unknown method, using OPTIONS for now: " << method ); meth = OPTIONS; } } InfoLog(<<"Using method: " << resip::MethodNames[meth]); // resolve method. Fifo<Message> txFifo; auto_ptr<SipStack> stack( new SipStack ); stack->addTransport(resip::UDP,sipPort); stack->addTransport(resip::TCP,sipPort); NameAddr ruriNA(ruri); NameAddr from(fromUri); NameAddr to(toUri); InfoLog (<< "Creating messages"); auto_ptr<SipMessage> msg(new SipMessage); NameAddr contact; if (!contactUri) { InfoLog(<<"Warning: leaving contact: header empty."); } else { contact = NameAddr(contactUri); msg->header(h_Contacts).push_front(contact); } if (targetUri) { Uri forceTarget(targetUri); InfoLog(<<"Setting force target to " << forceTarget); msg->setForceTarget(forceTarget); } if (meth != UNKNOWN) { msg->header(h_RequestLine) = RequestLine(meth); msg->header(h_CSeq).method() = meth; } else { msg->header(h_RequestLine) = RequestLine(UNKNOWN); msg->header(h_RequestLine).unknownMethodName() = method; msg->header(h_CSeq).method() = UNKNOWN; msg->header(h_CSeq).unknownMethodName() = Data(method); } msg->header(h_RequestLine).uri() = ruriNA.uri(); msg->header(h_To) = to; msg->header(h_From) = from; msg->header(h_CSeq).sequence() = 1; Via v; msg->header(h_Vias).push_front(v); msg->header(h_CallId).value() = Helper::computeCallId(); //DnsUtil::inet_pton("127.0.0.1", in); //Tuple dest(in, target.uri().port(), UDP); //InfoLog (<< "Sending to " << dest); InfoLog(<<"Sending Message: " << msg->brief()); DebugLog(<<"Sending Message:" << endl << *msg); stack->send(*msg); bool done = false; while(!done) { FdSet fdset; stack->buildFdSet(fdset); fdset.selectMilliSeconds(seltime); stack->process(fdset); SipMessage* reply = stack->receive(); if (!reply) continue; InfoLog(<<"Got reply: " << reply->brief()); DebugLog(<<"Got reply:" << endl << *reply); ++done; } InfoLog (<< "Finished "); return 0;}/* ==================================================================== * The Vovida Software License, Version 1.0 * * Copyright (c) 2000 Vovida Networks, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The names "VOCAL", "Vovida Open Communication Application Library", * and "Vovida Open Communication Application Library (VOCAL)" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact vocal@vovida.org. * * 4. Products derived from this software may not be called "VOCAL", nor * may "VOCAL" appear in their name, without prior written * permission of Vovida Networks, Inc. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * ==================================================================== * * This software consists of voluntary contributions made by Vovida * Networks, Inc. and many individuals on behalf of Vovida Networks, * Inc. For more information on Vovida Networks, Inc., please see * <http://www.vovida.org/>. * */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -