1*d9f75844SAndroid Build Coastguard Worker /* 2*d9f75844SAndroid Build Coastguard Worker * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3*d9f75844SAndroid Build Coastguard Worker * 4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*d9f75844SAndroid Build Coastguard Worker */ 10*d9f75844SAndroid Build Coastguard Worker #include <iostream> 11*d9f75844SAndroid Build Coastguard Worker 12*d9f75844SAndroid Build Coastguard Worker #include "p2p/base/stun_server.h" 13*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/async_udp_socket.h" 14*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/socket_address.h" 15*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/socket_server.h" 16*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/thread.h" 17*d9f75844SAndroid Build Coastguard Worker 18*d9f75844SAndroid Build Coastguard Worker using cricket::StunServer; 19*d9f75844SAndroid Build Coastguard Worker main(int argc,char * argv[])20*d9f75844SAndroid Build Coastguard Workerint main(int argc, char* argv[]) { 21*d9f75844SAndroid Build Coastguard Worker if (argc != 2) { 22*d9f75844SAndroid Build Coastguard Worker std::cerr << "usage: stunserver address" << std::endl; 23*d9f75844SAndroid Build Coastguard Worker return 1; 24*d9f75844SAndroid Build Coastguard Worker } 25*d9f75844SAndroid Build Coastguard Worker 26*d9f75844SAndroid Build Coastguard Worker rtc::SocketAddress server_addr; 27*d9f75844SAndroid Build Coastguard Worker if (!server_addr.FromString(argv[1])) { 28*d9f75844SAndroid Build Coastguard Worker std::cerr << "Unable to parse IP address: " << argv[1]; 29*d9f75844SAndroid Build Coastguard Worker return 1; 30*d9f75844SAndroid Build Coastguard Worker } 31*d9f75844SAndroid Build Coastguard Worker 32*d9f75844SAndroid Build Coastguard Worker rtc::Thread* pthMain = rtc::Thread::Current(); 33*d9f75844SAndroid Build Coastguard Worker 34*d9f75844SAndroid Build Coastguard Worker rtc::AsyncUDPSocket* server_socket = 35*d9f75844SAndroid Build Coastguard Worker rtc::AsyncUDPSocket::Create(pthMain->socketserver(), server_addr); 36*d9f75844SAndroid Build Coastguard Worker if (!server_socket) { 37*d9f75844SAndroid Build Coastguard Worker std::cerr << "Failed to create a UDP socket" << std::endl; 38*d9f75844SAndroid Build Coastguard Worker return 1; 39*d9f75844SAndroid Build Coastguard Worker } 40*d9f75844SAndroid Build Coastguard Worker 41*d9f75844SAndroid Build Coastguard Worker StunServer* server = new StunServer(server_socket); 42*d9f75844SAndroid Build Coastguard Worker 43*d9f75844SAndroid Build Coastguard Worker std::cout << "Listening at " << server_addr.ToString() << std::endl; 44*d9f75844SAndroid Build Coastguard Worker 45*d9f75844SAndroid Build Coastguard Worker pthMain->Run(); 46*d9f75844SAndroid Build Coastguard Worker 47*d9f75844SAndroid Build Coastguard Worker delete server; 48*d9f75844SAndroid Build Coastguard Worker return 0; 49*d9f75844SAndroid Build Coastguard Worker } 50