11391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen/* 21391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * libjingle 31391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * Copyright 2004--2005, Google Inc. 41391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * 51391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * Redistribution and use in source and binary forms, with or without 61391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * modification, are permitted provided that the following conditions are met: 71391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * 81391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * 1. Redistributions of source code must retain the above copyright notice, 91391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * this list of conditions and the following disclaimer. 101391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * 2. Redistributions in binary form must reproduce the above copyright notice, 111391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * this list of conditions and the following disclaimer in the documentation 121391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * and/or other materials provided with the distribution. 131391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * 3. The name of the author may not be used to endorse or promote products 141391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * derived from this software without specific prior written permission. 151391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * 161391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 171391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 181391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 191391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 201391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 211391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 221391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 231391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 241391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 251391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 261391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen */ 271391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen 281391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen#ifdef POSIX 291391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen#include <errno.h> 301391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen#endif // POSIX 311391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen 321391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen#include <iostream> 331391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen 341391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen#include "talk/base/host.h" 351391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen#include "talk/base/thread.h" 361391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen#include "talk/p2p/base/stunserver.h" 371391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen 381391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsenusing namespace cricket; 391391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen 401391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsenint main(int argc, char* argv[]) { 411391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen if (argc != 2) { 421391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen std::cerr << "usage: stunserver address" << std::endl; 431391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen return 1; 441391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen } 451391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen 461391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen talk_base::SocketAddress server_addr; 471391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen if (!server_addr.FromString(argv[1])) { 481391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen std::cerr << "Unable to parse IP address: " << argv[1]; 491391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen return 1; 501391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen } 511391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen 521391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen talk_base::Thread *pthMain = talk_base::Thread::Current(); 531391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen 541391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen talk_base::AsyncUDPSocket* server_socket = 55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen talk_base::AsyncUDPSocket::Create(pthMain->socketserver(), server_addr); 56dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!server_socket) { 57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::cerr << "Failed to create a UDP socket" << std::endl; 581391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen return 1; 591391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen } 601391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen 611391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen StunServer* server = new StunServer(server_socket); 621391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen 631391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen std::cout << "Listening at " << server_addr.ToString() << std::endl; 641391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen 651391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen pthMain->Run(); 661391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen 671391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen delete server; 681391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen return 0; 691391b24619d56bae6ce14bb54ed0fb16a945e853Kristian Monsen} 70