xref: /aosp_15_r20/external/webrtc/examples/stunserver/stunserver_main.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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 Worker int 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